From fdd142c42ef097912e8fad1dc200ea091d769c1e Mon Sep 17 00:00:00 2001 From: Zach Prezkuta Date: Thu, 3 Jan 2013 10:47:45 -0700 Subject: [PATCH 1/3] never use profile_load outside of a module's _init() function --- boot.php | 6 + mod/display.php | 12 +- mod/profile.php | 1 - mod/profiles.php | 263 +++++++++++++++++-------------- view/theme/cleanzero/theme.php | 3 +- view/theme/comix-plain/theme.php | 3 + view/theme/comix/theme.php | 3 + view/theme/darkbubble/theme.php | 2 + view/theme/darkzero-NS/theme.php | 4 +- view/theme/darkzero/theme.php | 2 +- view/theme/diabook/theme.php | 5 +- view/theme/dispy/dark/theme.php | 13 +- view/theme/dispy/light/theme.php | 13 +- view/theme/dispy/theme.php | 13 +- view/theme/easterbunny/theme.php | 3 + view/theme/facepark/theme.php | 4 + view/theme/greenzero/theme.php | 3 +- view/theme/purplezero/theme.php | 3 +- view/theme/quattro/theme.php | 2 +- view/theme/slack-NS/theme.php | 5 +- view/theme/slackr/theme.php | 3 +- view/theme/smoothly/theme.php | 7 +- view/theme/testbubble/theme.php | 3 + view/theme/vier/theme.php | 2 +- 24 files changed, 214 insertions(+), 164 deletions(-) diff --git a/boot.php b/boot.php index 864cdedd32..b19f0aa963 100644 --- a/boot.php +++ b/boot.php @@ -1107,6 +1107,10 @@ if(! function_exists('get_max_import_size')) { * Profile information is placed in the App structure for later retrieval. * Honours the owner's chosen theme for display. * + * IMPORTANT: Should only be run in the _init() functions of a module. That ensures that + * the theme is chosen before the _init() function of a theme is run, which will usually + * load a lot of theme-specific content + * */ if(! function_exists('profile_load')) { @@ -1185,6 +1189,8 @@ if(! function_exists('profile_load')) { * load/reload current theme info */ + set_template_engine($a); // reset the template engine to the default in case the user's theme doesn't specify one + $theme_info_file = "view/theme/".current_theme()."/theme.php"; if (file_exists($theme_info_file)){ require_once($theme_info_file); diff --git a/mod/display.php b/mod/display.php index 32c4bcae9f..2e0b8216a4 100644 --- a/mod/display.php +++ b/mod/display.php @@ -1,13 +1,22 @@ argc > 1) ? $a->argv[1] : ''); + profile_load($a,$nick); + +} + + +function display_content(&$a, $update = 0) { + require_once("include/bbcode.php"); require_once('include/security.php'); require_once('include/conversation.php'); @@ -25,7 +34,6 @@ function display_content(&$a, $update = 0) { else { $nick = (($a->argc > 1) ? $a->argv[1] : ''); } - profile_load($a,$nick); if($update) { $item_id = $_REQUEST['item_id']; diff --git a/mod/profile.php b/mod/profile.php index 9e9af19834..25871c2405 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -33,7 +33,6 @@ function profile_init(&$a) { auto_redir($a, $which); } - set_template_engine($a); // reset the template engine to the default in case the user's theme doesn't specify one profile_load($a,$which,$profile); $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false); diff --git a/mod/profiles.php b/mod/profiles.php index eaa603a282..1fc1f484a3 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -1,6 +1,147 @@ argc > 2) && ($a->argv[1] === "drop") && intval($a->argv[2])) { + $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1", + intval($a->argv[2]), + intval(local_user()) + ); + if(! count($r)) { + notice( t('Profile not found.') . EOL); + goaway($a->get_baseurl(true) . '/profiles'); + return; // NOTREACHED + } + + check_form_security_token_redirectOnErr('/profiles', 'profile_drop', 't'); + + // move every contact using this profile as their default to the user default + + $r = q("UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d ", + intval(local_user()), + intval($a->argv[2]), + intval(local_user()) + ); + $r = q("DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($a->argv[2]), + intval(local_user()) + ); + if($r) + info( t('Profile deleted.') . EOL); + + goaway($a->get_baseurl(true) . '/profiles'); + return; // NOTREACHED + } + + + + + + if(($a->argc > 1) && ($a->argv[1] === 'new')) { + + check_form_security_token_redirectOnErr('/profiles', 'profile_new', 't'); + + $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d", + intval(local_user())); + $num_profiles = count($r0); + + $name = t('Profile-') . ($num_profiles + 1); + + $r1 = q("SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", + intval(local_user())); + + $r2 = q("INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`) + VALUES ( %d, '%s', '%s', '%s', '%s' )", + intval(local_user()), + dbesc($name), + dbesc($r1[0]['name']), + dbesc($r1[0]['photo']), + dbesc($r1[0]['thumb']) + ); + + $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1", + intval(local_user()), + dbesc($name) + ); + + info( t('New profile created.') . EOL); + if(count($r3) == 1) + goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']); + + goaway($a->get_baseurl(true) . '/profiles'); + } + + if(($a->argc > 2) && ($a->argv[1] === 'clone')) { + + check_form_security_token_redirectOnErr('/profiles', 'profile_clone', 't'); + + $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d", + intval(local_user())); + $num_profiles = count($r0); + + $name = t('Profile-') . ($num_profiles + 1); + $r1 = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1", + intval(local_user()), + intval($a->argv[2]) + ); + if(! count($r1)) { + notice( t('Profile unavailable to clone.') . EOL); + killme(); + return; + } + unset($r1[0]['id']); + $r1[0]['is-default'] = 0; + $r1[0]['publish'] = 0; + $r1[0]['net-publish'] = 0; + $r1[0]['profile-name'] = dbesc($name); + + dbesc_array($r1[0]); + + $r2 = dbq("INSERT INTO `profile` (`" + . implode("`, `", array_keys($r1[0])) + . "`) VALUES ('" + . implode("', '", array_values($r1[0])) + . "')" ); + + $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1", + intval(local_user()), + dbesc($name) + ); + info( t('New profile created.') . EOL); + if(count($r3) == 1) + goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']); + + goaway($a->get_baseurl(true) . '/profiles'); + + return; // NOTREACHED + } + + + if(($a->argc > 1) && (intval($a->argv[1]))) { + $r = q("SELECT id FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($a->argv[1]), + intval(local_user()) + ); + if(! count($r)) { + notice( t('Profile not found.') . EOL); + killme(); + return; + } + + profile_load($a,$a->user['nickname'],$r[0]['id']); + } + +} + function profiles_post(&$a) { if(! local_user()) { @@ -425,126 +566,6 @@ function profile_activity($changed, $value) { function profiles_content(&$a) { $o = ''; - nav_set_selected('profiles'); - - if(! local_user()) { - notice( t('Permission denied.') . EOL); - return; - } - - if(($a->argc > 2) && ($a->argv[1] === "drop") && intval($a->argv[2])) { - $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d AND `is-default` = 0 LIMIT 1", - intval($a->argv[2]), - intval(local_user()) - ); - if(! count($r)) { - notice( t('Profile not found.') . EOL); - goaway($a->get_baseurl(true) . '/profiles'); - return; // NOTREACHED - } - - check_form_security_token_redirectOnErr('/profiles', 'profile_drop', 't'); - - // move every contact using this profile as their default to the user default - - $r = q("UPDATE `contact` SET `profile-id` = (SELECT `profile`.`id` AS `profile-id` FROM `profile` WHERE `profile`.`is-default` = 1 AND `profile`.`uid` = %d LIMIT 1) WHERE `profile-id` = %d AND `uid` = %d ", - intval(local_user()), - intval($a->argv[2]), - intval(local_user()) - ); - $r = q("DELETE FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($a->argv[2]), - intval(local_user()) - ); - if($r) - info( t('Profile deleted.') . EOL); - - goaway($a->get_baseurl(true) . '/profiles'); - return; // NOTREACHED - } - - - - - - if(($a->argc > 1) && ($a->argv[1] === 'new')) { - - check_form_security_token_redirectOnErr('/profiles', 'profile_new', 't'); - - $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d", - intval(local_user())); - $num_profiles = count($r0); - - $name = t('Profile-') . ($num_profiles + 1); - - $r1 = q("SELECT `name`, `photo`, `thumb` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", - intval(local_user())); - - $r2 = q("INSERT INTO `profile` (`uid` , `profile-name` , `name`, `photo`, `thumb`) - VALUES ( %d, '%s', '%s', '%s', '%s' )", - intval(local_user()), - dbesc($name), - dbesc($r1[0]['name']), - dbesc($r1[0]['photo']), - dbesc($r1[0]['thumb']) - ); - - $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1", - intval(local_user()), - dbesc($name) - ); - - info( t('New profile created.') . EOL); - if(count($r3) == 1) - goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']); - - goaway($a->get_baseurl(true) . '/profiles'); - } - - if(($a->argc > 2) && ($a->argv[1] === 'clone')) { - - check_form_security_token_redirectOnErr('/profiles', 'profile_clone', 't'); - - $r0 = q("SELECT `id` FROM `profile` WHERE `uid` = %d", - intval(local_user())); - $num_profiles = count($r0); - - $name = t('Profile-') . ($num_profiles + 1); - $r1 = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d LIMIT 1", - intval(local_user()), - intval($a->argv[2]) - ); - if(! count($r1)) { - notice( t('Profile unavailable to clone.') . EOL); - return; - } - unset($r1[0]['id']); - $r1[0]['is-default'] = 0; - $r1[0]['publish'] = 0; - $r1[0]['net-publish'] = 0; - $r1[0]['profile-name'] = dbesc($name); - - dbesc_array($r1[0]); - - $r2 = dbq("INSERT INTO `profile` (`" - . implode("`, `", array_keys($r1[0])) - . "`) VALUES ('" - . implode("', '", array_values($r1[0])) - . "')" ); - - $r3 = q("SELECT `id` FROM `profile` WHERE `uid` = %d AND `profile-name` = '%s' LIMIT 1", - intval(local_user()), - dbesc($name) - ); - info( t('New profile created.') . EOL); - if(count($r3) == 1) - goaway($a->get_baseurl(true) . '/profiles/' . $r3[0]['id']); - - goaway($a->get_baseurl(true) . '/profiles'); - - return; // NOTREACHED - } - if(($a->argc > 1) && (intval($a->argv[1]))) { $r = q("SELECT * FROM `profile` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -556,8 +577,6 @@ function profiles_content(&$a) { return; } - profile_load($a,$a->user['nickname'],$r[0]['id']); - require_once('include/profile_selectors.php'); diff --git a/view/theme/cleanzero/theme.php b/view/theme/cleanzero/theme.php index 356a1b71cb..37ba15ce0a 100644 --- a/view/theme/cleanzero/theme.php +++ b/view/theme/cleanzero/theme.php @@ -5,12 +5,13 @@ * Version: * Author: Christian Vogeley (https://christian-vogeley.de/profile/christian) */ + +function cleanzero_init(&$a) { $a->theme_info = array( 'extends' => 'duepuntozero', ); set_template_engine($a, 'smarty3'); -function cleanzero_init(&$a) { $a->page['htmlhead'] .= <<< EOT EOT; +} + diff --git a/view/theme/comix/theme.php b/view/theme/comix/theme.php index ce28ebf189..da195f267a 100644 --- a/view/theme/comix/theme.php +++ b/view/theme/comix/theme.php @@ -8,6 +8,7 @@ */ +function comix_init(&$a) { $a->theme_info = array( 'extends' => 'duepuntozero', ); @@ -59,3 +60,5 @@ $('.savedsearchterm').hover( EOT; +} + diff --git a/view/theme/darkbubble/theme.php b/view/theme/darkbubble/theme.php index ecd14da772..475d4e63ce 100644 --- a/view/theme/darkbubble/theme.php +++ b/view/theme/darkbubble/theme.php @@ -7,6 +7,7 @@ */ +function darkbubble_init(&$a) { $a->theme_info = array( 'extends' => 'testbubble', ); @@ -21,3 +22,4 @@ $('html').click(function() { $("#nav-notifications-menu" ).hide(); }); }); EOT; +} diff --git a/view/theme/darkzero-NS/theme.php b/view/theme/darkzero-NS/theme.php index 211c552c51..ee227109b1 100644 --- a/view/theme/darkzero-NS/theme.php +++ b/view/theme/darkzero-NS/theme.php @@ -7,11 +7,11 @@ * Author: Mike Macgirvin */ +function darkzero_NS_init(&$a) { $a->theme_info = array( 'extends' => 'duepuntozero', ); -function darkzero_NS_init(&$a) { $a->page['htmlhead'] .= <<< EOT EOT; -} \ No newline at end of file +} diff --git a/view/theme/darkzero/theme.php b/view/theme/darkzero/theme.php index ceafdf5956..1fe4bf859c 100644 --- a/view/theme/darkzero/theme.php +++ b/view/theme/darkzero/theme.php @@ -8,12 +8,12 @@ * Maintainer: Mike Macgirvin */ +function darkzero_init(&$a) { $a->theme_info = array( 'extends' => 'duepuntozero', ); set_template_engine($a, 'smarty3'); -function darkzero_init(&$a) { $a->page['htmlhead'] .= <<< EOT EOT; +} + diff --git a/view/theme/greenzero/theme.php b/view/theme/greenzero/theme.php index 09a63c040d..9a3dd1d3e1 100644 --- a/view/theme/greenzero/theme.php +++ b/view/theme/greenzero/theme.php @@ -1,10 +1,11 @@ theme_info = array( 'extends' => 'duepuntozero', ); set_template_engine($a, 'smarty3'); -function greenzero_init(&$a) { $a->page['htmlhead'] .= <<< EOT EOT; -} \ No newline at end of file +} diff --git a/view/theme/slackr/theme.php b/view/theme/slackr/theme.php index bc09299794..43deb4b8cc 100644 --- a/view/theme/slackr/theme.php +++ b/view/theme/slackr/theme.php @@ -1,10 +1,11 @@ theme_info = array( 'extends' => 'duepuntozero', ); set_template_engine($a, 'smarty3'); -function slackr_init(&$a) { $a->page['htmlhead'] .= <<< EOT EOT; +} diff --git a/view/theme/vier/theme.php b/view/theme/vier/theme.php index 7c0f3d3f8d..7da0731f78 100644 --- a/view/theme/vier/theme.php +++ b/view/theme/vier/theme.php @@ -8,11 +8,11 @@ * Description: "Vier" uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/ */ +function vier_init(&$a) { set_template_engine($a, 'smarty3'); $a->theme_info = array(); -function vier_init(&$a) { $a->page['htmlhead'] .= <<< EOT