diff --git a/boot.php b/boot.php index 5d71a4d443..4ea4bb4560 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')) { @@ -1166,7 +1170,7 @@ if(! function_exists('profile_load')) { if(! $r[0]['is-default']) { $x = q("select `pub_keywords` from `profile` where uid = %d and `is-default` = 1 limit 1", - intval($profile_uid) + intval($r[0]['profile_uid']) ); if($x && count($x)) $r[0]['pub_keywords'] = $x[0]['pub_keywords']; @@ -1174,7 +1178,7 @@ if(! function_exists('profile_load')) { $a->profile = $r[0]; - $a->profile['mobile-theme'] = get_pconfig($profile_uid, 'system', 'mobile_theme'); + $a->profile['mobile-theme'] = get_pconfig($a->profile['profile_uid'], 'system', 'mobile_theme'); $a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename']; @@ -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); @@ -1611,7 +1617,7 @@ if(! function_exists('current_theme')) { // $mobile_detect = new Mobile_Detect(); // $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet(); $is_mobile = $a->is_mobile || $a->is_tablet; - + if($is_mobile) { if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) { $system_theme = ''; diff --git a/index.php b/index.php index dd19bb8336..19673fa7f9 100644 --- a/index.php +++ b/index.php @@ -377,15 +377,9 @@ if($a->module != 'install') { } /** - * Build the page - now that we have all the components + * Add a "toggle mobile" link if we're using a mobile device */ -if(!$a->theme['stylesheet']) - $stylesheet = current_theme_url(); -else - $stylesheet = $a->theme['stylesheet']; -$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => $stylesheet)); - if($a->is_mobile || $a->is_tablet) { if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) { $link = $a->get_baseurl() . '/toggle_mobile?address=' . curPageURL(); @@ -399,6 +393,16 @@ if($a->is_mobile || $a->is_tablet) { )); } +/** + * Build the page - now that we have all the components + */ + +if(!$a->theme['stylesheet']) + $stylesheet = current_theme_url(); +else + $stylesheet = $a->theme['stylesheet']; +$a->page['htmlhead'] = replace_macros($a->page['htmlhead'], array('$stylesheet' => $stylesheet)); + $page = $a->page; $profile = $a->profile; 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