]> git.mxchange.org Git - friendica.git/blobdiff - mod/profile.php
- Improved speed due to forced indexes when showing items.
[friendica.git] / mod / profile.php
index 24cadef3b26ae8e6683293a43ce2c60ade8d676f..c5f787a4f0792fd33a636a18dffd1be13d1153f9 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 require_once('include/contact_widgets.php');
+require_once('include/redir.php');
 
 
 function profile_init(&$a) {
@@ -8,12 +9,10 @@ function profile_init(&$a) {
        if(! x($a->page,'aside'))
                $a->page['aside'] = '';
 
-       $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
-
        if($a->argc > 1)
                $which = $a->argv[1];
        else {
-               $r = q("select nickname from user where blocked = 0 and account_expired = 0 and verified = 1 order by rand() limit 1");
+               $r = q("select nickname from user where blocked = 0 and account_expired = 0 and account_removed = 0 and verified = 1 order by rand() limit 1");
                if(count($r)) {
                        goaway($a->get_baseurl() . '/profile/' . $r[0]['nickname']);
                }
@@ -30,9 +29,13 @@ function profile_init(&$a) {
                $which = $a->user['nickname'];
                $profile = $a->argv[1];         
        }
+       else {
+               auto_redir($a, $which);
+       }
 
        profile_load($a,$which,$profile);
 
+       $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
        $userblock = (($a->profile['hidewall'] && (! local_user()) && (! remote_user())) ? true : false);
 
        if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY)) {
@@ -116,8 +119,18 @@ function profile_content(&$a, $update = 0) {
        $contact = null;
        $remote_contact = false;
 
-       if(remote_user()) {
-               $contact_id = $_SESSION['visitor_id'];
+       $contact_id = 0;
+
+       if(is_array($_SESSION['remote'])) {
+               foreach($_SESSION['remote'] as $v) {
+                       if($v['uid'] == $a->profile['profile_uid']) {
+                               $contact_id = $v['cid'];
+                               break;
+                       }
+               }
+       }
+
+       if($contact_id) {
                $groups = init_groups_visitor($contact_id);
                $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                        intval($contact_id),
@@ -185,7 +198,8 @@ function profile_content(&$a, $update = 0) {
                'acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
                    'bang' => '',
                'visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
-                   'profile_uid' => $a->profile['profile_uid']
+                   'profile_uid' => $a->profile['profile_uid'],
+                               'acl_data' => ( $is_owner ? construct_acl_data($a, $a->user) : '' ), // For non-Javascript ACL selector
                );
 
                $o .= status_editor($a,$x);
@@ -229,7 +243,7 @@ function profile_content(&$a, $update = 0) {
                        $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert(date_default_timezone_get(),'',$datequery2))));
                }
 
-               if(! get_pconfig($a->profile['profile_uid'],'system','alt_pager')) {
+               if( (! get_config('alt_pager', 'global')) && (! get_pconfig($a->profile['profile_uid'],'system','alt_pager')) ) {
                    $r = q("SELECT COUNT(*) AS `total`
                            FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
                            WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
@@ -244,8 +258,17 @@ function profile_content(&$a, $update = 0) {
                        }
                }
 
-               $itemspage_network = get_pconfig(local_user(),'system','itemspage_network');
-               $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
+               //  check if we serve a mobile device and get the user settings 
+               //  accordingly
+               if ($a->is_mobile) { 
+                   $itemspage_network = get_pconfig(local_user(),'system','itemspage_mobile_network');
+                   $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20);
+               } else { 
+                   $itemspage_network = get_pconfig(local_user(),'system','itemspage_network');
+                   $itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 40);
+               }
+               //  now that we have the user settings, see if the theme forces 
+               //  a maximum item number which is lower then the user choice
                if(($a->force_max_items > 0) && ($a->force_max_items < $itemspage_network))
                        $itemspage_network = $a->force_max_items;
 
@@ -254,7 +277,7 @@ function profile_content(&$a, $update = 0) {
                $pager_sql = sprintf(" LIMIT %d, %d ",intval($a->pager['start']), intval($a->pager['itemspage']));
 
                $r = q("SELECT `item`.`id` AS `item_id`, `contact`.`uid` AS `contact-uid`
-                       FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
+                       FROM `item` FORCE INDEX (created) LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
                        WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0
                        and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0
                        AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1
@@ -294,21 +317,11 @@ function profile_content(&$a, $update = 0) {
                $items = array();
        }
 
-       if($is_owner && ! $update) {
+       if($is_owner && (! $update) && (! get_config('theme','hide_eventlist'))) {
                $o .= get_birthdays();
                $o .= get_events();
        }
 
-       if((! $update) && ($tab === 'posts')) {
-
-               // This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
-               // because browser prefetching might change it on us. We have to deliver it with the page.
-
-               $o .= '<div id="live-profile"></div>' . "\r\n";
-               $o .= "<script> var profile_uid = " . $a->profile['profile_uid'] 
-                       . "; var netargs = '?f='; var profile_page = " . $a->pager['page'] . "; </script>\r\n";
-       }
-
 
        if($is_owner) {
                $r = q("UPDATE `item` SET `unseen` = 0 
@@ -320,12 +333,12 @@ function profile_content(&$a, $update = 0) {
        $o .= conversation($a,$items,'profile',$update);
 
        if(! $update) {
-         if(! get_pconfig($a->profile['profile_uid'],'system','alt_pager')) {
-                       $o .= paginate($a);
-               }
-               else {
-                       $o .= alt_pager($a,count($items));
-               }
+               if( get_config('alt_pager', 'global') || get_pconfig($a->profile['profile_uid'],'system','alt_pager') ) {
+                       $o .= alt_pager($a,count($items));
+               }
+               else {
+                       $o .= paginate($a);
+               }
        }
 
        return $o;