]> git.mxchange.org Git - friendica.git/blobdiff - mod/search.php
implement "moderate" flag on items
[friendica.git] / mod / search.php
old mode 100644 (file)
new mode 100755 (executable)
index 64281df..fe09b67
@@ -1,5 +1,63 @@
 <?php
 
+function search_saved_searches() {
+
+       $o = '';
+
+       $r = q("select `id`,`term` from `search` WHERE `uid` = %d",
+               intval(local_user())
+       );
+
+       if(count($r)) {
+               $o .= '<div id="saved-search-list" class="widget">';
+               $o .= '<h3>' . t('Saved Searches') . '</h3>' . "\r\n";
+               $o .= '<ul id="saved-search-ul">' . "\r\n";
+               foreach($r as $rr) {
+                       $o .= '<li class="saved-search-li clear"><a href="search/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="search/?f=&search=' . $rr['term'] . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n";
+               }
+               $o .= '</ul><div class="clear"></div></div>' . "\r\n";
+       }               
+
+       return $o;
+
+}
+
+
+function search_init(&$a) {
+
+       $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
+
+       if(local_user()) {
+               if(x($_GET,'save') && $search) {
+                       $r = q("select * from `search` where `uid` = %d and `term` = '%s' limit 1",
+                               intval(local_user()),
+                               dbesc($search)
+                       );
+                       if(! count($r)) {
+                               q("insert into `search` ( `uid`,`term` ) values ( %d, '%s') ",
+                                       intval(local_user()),
+                                       dbesc($search)
+                               );
+                       }
+               }
+               if(x($_GET,'remove') && $search) {
+                       q("delete from `search` where `uid` = %d and `term` = '%s' limit 1",
+                               intval(local_user()),
+                               dbesc($search)
+                       );
+               }
+
+               $a->page['aside'] .= search_saved_searches();
+
+       }
+       else
+               unset($_SESSION['theme']);
+
+
+
+}
+
+
 
 function search_post(&$a) {
        if(x($_POST,'search'))
@@ -9,131 +67,80 @@ function search_post(&$a) {
 
 function search_content(&$a) {
 
-       if(x($_SESSION,'theme'))
-               unset($_SESSION['theme']);
+       if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+               notice( t('Public access denied.') . EOL);
+               return;
+       }
+       
+       nav_set_selected('search');
+
+       require_once("include/bbcode.php");
+       require_once('include/security.php');
+       require_once('include/conversation.php');
 
        $o = '<div id="live-search"></div>' . "\r\n";
 
-       $o .= '<h3>' . t('Search') . '</h3>';
+       $o .= '<h3>' . t('Search This Site') . '</h3>';
 
        if(x($a->data,'search'))
                $search = notags(trim($a->data['search']));
        else
                $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
 
-       $o .= search($search);
+       $o .= search($search,'search-box','/search',((local_user()) ? true : false));
 
        if(! $search)
                return $o;
 
-       require_once("include/bbcode.php");
-       require_once('include/security.php');
+       // Here is the way permissions work in the search module...
+       // Only public wall posts can be shown
+       // OR your own posts if you are a logged in member
+
+       $s_regx  = sprintf("AND ( `item`.`body` REGEXP '%s' OR `item`.`tag` REGEXP '%s' )", 
+               dbesc(preg_quote($search)), dbesc('\\]' . preg_quote($search) . '\\['));
 
-       $sql_extra = "
-               AND `item`.`allow_cid` = '' 
-               AND `item`.`allow_gid` = '' 
-               AND `item`.`deny_cid`  = '' 
-               AND `item`.`deny_gid`  = '' 
-       ";
+       $search_alg = $s_regx;
 
        $r = q("SELECT COUNT(*) AS `total`
-               FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
-               WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
-               AND ( `wall` = 1 OR `contact`.`uid` = %d )
+               FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` LEFT JOIN `user` ON `user`.`uid` = `item`.`uid`
+               WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
+               AND (( `wall` = 1 AND `item`.`allow_cid` = ''  AND `item`.`allow_gid` = '' AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = '' AND `user`.`hidewall` = 0) 
+                       OR `item`.`uid` = %d )
                AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
-               AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
-               $sql_extra ",
-               intval(local_user()),
-               dbesc($search)
+               $search_alg ",
+               intval(local_user())
        );
 
        if(count($r))
                $a->set_pager_total($r[0]['total']);
 
        if(! $r[0]['total']) {
-               notice( t('No results.') . EOL);
+               info( t('No results.') . EOL);
                return $o;
        }
 
        $r = q("SELECT `item`.*, `item`.`id` AS `item_id`, 
                `contact`.`name`, `contact`.`photo`, `contact`.`url`, `contact`.`rel`,
-               `contact`.`network`, `contact`.`thumb`, `contact`.`self`, 
+               `contact`.`network`, `contact`.`thumb`, `contact`.`self`, `contact`.`writable`, 
                `contact`.`id` AS `cid`, `contact`.`uid` AS `contact-uid`,
                `user`.`nickname`
                FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
-               LEFT JOIN `user` ON `user`.`uid` = `item`.`uid` 
-               WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0
-               AND ( `wall` = 1 OR `contact`.`uid` = %d )
+               LEFT JOIN `user` ON `user`.`uid` = `item`.`uid`
+               WHERE `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0
+               AND (( `wall` = 1 AND `item`.`allow_cid` = ''  AND `item`.`allow_gid` = '' AND `item`.`deny_cid`  = '' AND `item`.`deny_gid`  = '' AND `user`.`hidewall` = 0 ) 
+                       OR `item`.`uid` = %d )
                AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
-               AND MATCH (`item`.`body`) AGAINST ( '%s' IN BOOLEAN MODE )
-               $sql_extra
-               ORDER BY `parent` DESC ",
+               $search_alg
+               ORDER BY `received` DESC LIMIT %d , %d ",
                intval(local_user()),
-               dbesc($search)
-       );
+               intval($a->pager['start']),
+               intval($a->pager['itemspage'])
 
-       $tpl = load_view_file('view/search_item.tpl');
-       $droptpl = load_view_file('view/wall_fake_drop.tpl');
-
-       $return_url = $_SESSION['return_url'] = $a->cmd;
-
-       if(count($r)) {
-
-               foreach($r as $item) {
-
-                       $total       = 0;
-                       $comment     = '';
-                       $owner_url   = '';
-                       $owner_photo = '';
-                       $owner_name  = '';
-                       $sparkle     = '';
-                       
-                       if(((activity_match($item['verb'],ACTIVITY_LIKE)) || (activity_match($item['verb'],ACTIVITY_DISLIKE))) 
-                               && ($item['id'] != $item['parent']))
-                               continue;
-
-                       $total ++;
-
-                       $profile_name   = ((strlen($item['author-name']))   ? $item['author-name']   : $item['name']);
-                       $profile_avatar = ((strlen($item['author-avatar'])) ? $item['author-avatar'] : $item['thumb']);
-                       $profile_link   = ((strlen($item['author-link']))   ? $item['author-link']   : $item['url']);
-
-
-                       $location = (($item['location']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
-                       $coord = (($item['coord']) ? '<a target="map" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
-                       if($coord) {
-                               if($location)
-                                       $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
-                               else
-                                       $location = '<span class="smalltext">' . $coord . '</span>';
-                       }
+       );
 
-                       $drop = replace_macros($droptpl,array('$id' => $item['id']));
-                       $lock = '<div class="wall-item-lock"></div>';
-
-                       $o .= replace_macros($tpl,array(
-                               '$id' => $item['item_id'],
-                               '$linktitle' => t('View $name\'s profile'),
-                               '$profile_url' => $profile_link,
-                               '$item_photo_menu' => item_photo_menu($item),                           
-                               '$name' => $profile_name,
-                               '$sparkle' => $sparkle,
-                               '$lock' => $lock,
-                               '$thumb' => $profile_avatar,
-                               '$title' => $item['title'],
-                               '$body' => bbcode($item['body']),
-                               '$ago' => relative_date($item['created']),
-                               '$location' => $location,
-                               '$indent' => '',
-                               '$owner_url' => $owner_url,
-                               '$owner_photo' => $owner_photo,
-                               '$owner_name' => $owner_name,
-                               '$drop' => $drop,
-                               '$conv' => '<a href="' . $a->get_baseurl() . '/display/' . $item['nickname'] . '/' . $item['id'] . '">' . t('View in context') . '</a>'
-                       ));
+       $o .= '<h2>Search results for: ' . $search . '</h2>';
 
-               }
-       }
+       $o .= conversation($a,$r,'search',false);
 
        $o .= paginate($a);