From f077badcb61777810aed21717092a1793bd79b1d Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 6 Nov 2014 23:50:54 -0800 Subject: include self in load_contact_links so you don't get a connect menu entry for yourself --- boot.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 76c09d956..f8c91dfbb 100755 --- a/boot.php +++ b/boot.php @@ -1804,9 +1804,8 @@ function load_contact_links($uid) { // logger('load_contact_links'); - $r = q("SELECT abook_id, abook_flags, abook_my_perms, abook_their_perms, xchan_hash, xchan_photo_m, xchan_name, xchan_url from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and not (abook_flags & %d) ", - intval($uid), - intval(ABOOK_FLAG_SELF) + $r = q("SELECT abook_id, abook_flags, abook_my_perms, abook_their_perms, xchan_hash, xchan_photo_m, xchan_name, xchan_url from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d ", + intval($uid) ); if($r) { foreach($r as $rr){ -- cgit v1.2.3 From 62094652333514e92f9f00699e14b9f49680bb64 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 10 Nov 2014 15:21:04 -0800 Subject: add public forum identification to libzot. No attempt is made to identify other types of forums or weird custom channel permissions. If the channel is auto-accept and taggable, it's a public forum. --- boot.php | 1 + 1 file changed, 1 insertion(+) (limited to 'boot.php') diff --git a/boot.php b/boot.php index f8c91dfbb..4b1c008cd 100755 --- a/boot.php +++ b/boot.php @@ -414,6 +414,7 @@ define ( 'XCHAN_FLAGS_ORPHAN', 0x0002); define ( 'XCHAN_FLAGS_CENSORED', 0x0004); define ( 'XCHAN_FLAGS_SELFCENSORED', 0x0008); define ( 'XCHAN_FLAGS_SYSTEM', 0x0010); +define ( 'XCHAN_FLAGS_PUBFORUM', 0x0020); define ( 'XCHAN_FLAGS_DELETED', 0x1000); /* * Traficlights for Administration of HubLoc -- cgit v1.2.3 From b5af6679857eeafcb360d7dec69acf11af034c1d Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 11 Nov 2014 19:29:30 -0800 Subject: slow progress on sys publishing, making sure all the data we need is in the places we need it but validate it anyway --- boot.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 4b1c008cd..fb059f8b0 100755 --- a/boot.php +++ b/boot.php @@ -677,8 +677,8 @@ class App { public $css_sources = array(); public $js_sources = array(); public $theme_info = array(); - - public $nav_sel; + public $is_sys = false; + public $nav_sel; public $category; -- cgit v1.2.3 From fc2bf4c29b45a97ec745c26821cc31cfe97f091c Mon Sep 17 00:00:00 2001 From: Klaus Weidenbach Date: Thu, 13 Nov 2014 00:00:50 +0100 Subject: Some Doxygen documentation. Add some more Doxygen formating for boot.php and dba_driver.php. Cleaning a bit up, too. --- boot.php | 324 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 162 insertions(+), 162 deletions(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index fb059f8b0..d883dcc28 100755 --- a/boot.php +++ b/boot.php @@ -1,6 +1,8 @@ ' . "\r\n" ); +define ( 'EOL', '
' . "\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); define ( 'NULL_DATE', '0000-00-00 00:00:00' ); define ( 'TEMPLATE_BUILD_PATH', 'store/[data]/smarty3' ); @@ -196,7 +198,6 @@ define ( 'UPDATE_SUCCESS', 0); define ( 'UPDATE_FAILED', 1); - define ( 'CLIENT_MODE_NORMAL', 0x0000); define ( 'CLIENT_MODE_LOAD', 0x0001); define ( 'CLIENT_MODE_UPDATE', 0x0002); @@ -263,13 +264,11 @@ define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder * Permissions */ - define ( 'PERMS_R_STREAM', 0x00001); define ( 'PERMS_R_PROFILE', 0x00002); define ( 'PERMS_R_PHOTOS', 0x00004); define ( 'PERMS_R_ABOOK', 0x00008); - define ( 'PERMS_W_STREAM', 0x00010); define ( 'PERMS_W_WALL', 0x00020); define ( 'PERMS_W_TAGWALL', 0x00040); @@ -321,7 +320,6 @@ define ( 'ATTACH_FLAG_DIR', 0x0001); define ( 'ATTACH_FLAG_OS', 0x0002); - define ( 'MENU_ITEM_ZID', 0x0001); define ( 'MENU_ITEM_NEWWIN', 0x0002); define ( 'MENU_ITEM_CHATROOM', 0x0004); @@ -336,13 +334,11 @@ define ( 'POLL_MULTIPLE_CHOICE', 0x0004); define ( 'POLL_OVERWRITE', 0x8000); // If you vote twice remove the prior entry - define ( 'UPDATE_FLAGS_UPDATED', 0x0001); define ( 'UPDATE_FLAGS_FORCED', 0x0002); define ( 'UPDATE_FLAGS_DELETED', 0x1000); - define ( 'DROPITEM_NORMAL', 0); define ( 'DROPITEM_PHASE1', 1); define ( 'DROPITEM_PHASE2', 2); @@ -448,7 +444,6 @@ define ( 'TERM_OBJ_OBJECT', 5 ); define ( 'TERM_OBJ_THING', 6 ); define ( 'TERM_OBJ_APP', 7 ); - /** * various namespaces we may need to parse */ @@ -513,7 +508,6 @@ define ( 'GRAVITY_PARENT', 0); define ( 'GRAVITY_LIKE', 3); define ( 'GRAVITY_COMMENT', 6); - /** * Account Flags */ @@ -589,7 +583,6 @@ function startup() { @set_time_limit(0); if(function_exists ('ini_set')) { - // This has to be quite large to deal with embedded private photos @ini_set('pcre.backtrack_limit', 500000); @@ -615,7 +608,6 @@ function startup() { } unset($process); } - } /** @@ -630,8 +622,6 @@ function startup() { * before we spit the page out. * */ - - class App { public $install = false; // true if we are installing the software @@ -643,7 +633,6 @@ class App { public $poi = null; // "person of interest", generally a referenced connection public $layout = array(); // Comanche parsed template - private $perms = null; // observer permissions private $widgets = array(); // widgets for this page private $widgetlist = null; // widget ordering and inclusion directives @@ -672,7 +661,7 @@ class App { public $timezone; public $interactive = true; public $plugins; - private $apps = array(); + private $apps = array(); public $identities; public $css_sources = array(); public $js_sources = array(); @@ -680,16 +669,16 @@ class App { public $is_sys = false; public $nav_sel; - public $category; + public $category; // Allow themes to control internal parameters // by changing App values in theme.php - public $sourcename = ''; - public $videowidth = 425; - public $videoheight = 350; - public $force_max_items = 0; - public $theme_thread_allow = true; + public $sourcename = ''; + public $videowidth = 425; + public $videoheight = 350; + public $force_max_items = 0; + public $theme_thread_allow = true; // An array for all theme-controllable parameters // Mostly unimplemented yet. Only options 'template_engine' and @@ -732,9 +721,7 @@ class App { private $cached_profile_picdate; - function __construct() { - // we'll reset this after we read our config file date_default_timezone_set('UTC'); @@ -753,7 +740,6 @@ class App { . 'library/langdet' . PATH_SEPARATOR . '.' ); - $this->scheme = 'http'; if(x($_SERVER,'HTTPS') && $_SERVER['HTTPS']) $this->scheme = 'https'; @@ -792,7 +778,6 @@ class App { $this->cmd = 'channel/' . substr($this->cmd,1); - /** * * Break the URL path into C style argc/argv style arguments for our @@ -820,7 +805,6 @@ class App { $this->module = 'home'; } - /** * See if there is any page number information, and initialise * pagination @@ -857,8 +841,6 @@ class App { } function get_baseurl($ssl = false) { - - if(is_array($this->config) && array_key_exists('system',$this->config) && is_array($this->config['system']) @@ -868,7 +850,6 @@ class App { return $url; } - $scheme = $this->scheme; $this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' ); @@ -933,7 +914,6 @@ class App { return $this->channel; } - function set_observer($xchan) { $this->observer = $xchan; } @@ -1097,6 +1077,7 @@ class App { break; }*/ } + function get_template_ldelim($engine = 'smarty3') { return $this->ldelim[$engine]; } @@ -1107,7 +1088,6 @@ class App { function head_set_icon($icon) { $this->data['pageicon'] = $icon; - } function head_get_icon() { @@ -1117,7 +1097,7 @@ class App { return $icon; } -} +} // End App class // retrieve the App structure @@ -1129,21 +1109,26 @@ function get_app() { } - -// Multi-purpose function to check variable state. -// Usage: x($var) or $x($array,'key') -// returns false if variable/key is not set -// if variable is set, returns 1 if has 'non-zero' value, otherwise returns 0. -// e.g. x('') or x(0) returns 0; - - -function x($s,$k = NULL) { - if($k != NULL) { - if((is_array($s)) && (array_key_exists($k,$s))) { +/** + * @brief Multi-purpose function to check variable state. + * + * Usage: x($var) or $x($array, 'key') + * + * returns false if variable/key is not set + * if variable is set, returns 1 if has 'non-zero' value, otherwise returns 0. + * e.g. x('') or x(0) returns 0; + * + * @param string|array $s variable to check + * @param string $k key inside the array to check + * @return bool + */ +function x($s, $k = null) { + if($k != null) { + if((is_array($s)) && (array_key_exists($k, $s))) { if($s[$k]) return (int) 1; return (int) 0; - } + } return false; } else { @@ -1160,7 +1145,6 @@ function x($s,$k = NULL) { // called from db initialisation if db is dead. - function system_unavailable() { include('include/system_unavailable.php'); system_down(); @@ -1170,6 +1154,7 @@ function system_unavailable() { function clean_urls() { global $a; + // if($a->config['system']['clean_urls']) return true; // return false; @@ -1177,9 +1162,11 @@ function clean_urls() { function z_path() { global $a; + $base = $a->get_baseurl(); if(! clean_urls()) $base .= '/?q='; + return $base; } @@ -1191,6 +1178,7 @@ function z_root() { function absurl($path) { if(strpos($path,'/') === 0) return z_path() . $path; + return $path; } @@ -1200,9 +1188,6 @@ function os_mkdir($path,$mode = 0777,$recursive = false) { @umask($oldumask); } - - - function is_ajax() { return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); } @@ -1212,7 +1197,6 @@ function is_ajax() { // base url for use in cmdline programs which don't have // $_SERVER variables, and synchronising the state of installed plugins. - function check_config(&$a) { $build = get_config('system','db_version'); @@ -1222,21 +1206,22 @@ function check_config(&$a) { $saved = get_config('system','urlverify'); if(! $saved) set_config('system','urlverify',bin2hex(z_root())); + if(($saved) && ($saved != bin2hex(z_root()))) { // our URL changed. Do something. $oldurl = hex2bin($saved); logger('Baseurl changed!'); - $oldhost = substr($oldurl,strpos($oldurl,'//')+2); - $host = substr(z_root(),strpos(z_root(),'//')+2); + $oldhost = substr($oldurl, strpos($oldurl, '//') + 2); + $host = substr(z_root(), strpos(z_root(), '//') + 2); $is_ip_addr = ((preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$host)) ? true : false); $was_ip_addr = ((preg_match("/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/",$oldhost)) ? true : false); // only change the url to an ip address if it was already an ip and not a dns name if((! $is_ip_addr) || ($is_ip_addr && $was_ip_addr)) { fix_system_urls($oldurl,z_root()); - set_config('system','urlverify',bin2hex(z_root())); + set_config('system', 'urlverify', bin2hex(z_root())); } else logger('Attempt to change baseurl from a DNS name to an IP address was refused.'); @@ -1251,8 +1236,8 @@ function check_config(&$a) { // so we just need to keep this around a couple of weeks until the hubs that // already exist have one $syschan_exists = get_sys_channel(); - if (! $syschan_exists) - create_sys_channel(); + if (! $syschan_exists) + create_sys_channel(); if($build != DB_UPDATE_VERSION) { $stored = intval($build); @@ -1323,7 +1308,6 @@ function check_config(&$a) { } else set_config('database','update_r' . $x, 'success'); - } } set_config('system','db_version', DB_UPDATE_VERSION); @@ -1380,13 +1364,10 @@ function check_config(&$a) { } } - load_hooks(); - return; } - function fix_system_urls($oldurl,$newurl) { require_once('include/crypto.php'); @@ -1470,16 +1451,13 @@ function fix_system_urls($oldurl,$newurl) { } - - // wrapper for adding a login box. If $register == true provide a registration // link. This will most always depend on the value of $a->config['system']['register_policy']. // returns the complete html for inserting into the page - function login($register = false, $form_id = 'main-login', $hiddens=false) { $a = get_app(); - $o = ""; + $o = ''; $reg = false; $reglink = get_config('system','register_link'); if(! strlen($reglink)) @@ -1498,17 +1476,15 @@ function login($register = false, $form_id = 'main-login', $hiddens=false) { } else { $a->page['htmlhead'] .= replace_macros(get_markup_template("login_head.tpl"),array( - '$baseurl' => $a->get_baseurl(true) + '$baseurl' => $a->get_baseurl(true) )); $tpl = get_markup_template("login.tpl"); if(strlen($a->query_string)) - $_SESSION['login_return_url'] = $a->query_string; + $_SESSION['login_return_url'] = $a->query_string; } - $o .= replace_macros($tpl,array( - '$dest_url' => $dest_url, '$logout' => t('Logout'), '$login' => t('Login'), @@ -1517,14 +1493,12 @@ function login($register = false, $form_id = 'main-login', $hiddens=false) { '$lpassword' => array('password', t('Password'), '', ''), '$remember' => array('remember', t('Remember me'), '', ''), '$hiddens' => $hiddens, - '$register' => $reg, - '$lostpass' => t('Forgot your password?'), '$lostlink' => t('Password Reset'), )); - call_hooks('login_hook',$o); + call_hooks('login_hook', $o); return $o; } @@ -1532,7 +1506,6 @@ function login($register = false, $form_id = 'main-login', $hiddens=false) { // Used to end the current process, after saving session state. - function killme() { session_write_close(); exit; @@ -1541,33 +1514,44 @@ function killme() { // redirect to another URL and terminate this process. - function goaway($s) { header("Location: $s"); killme(); } - +/** + * @brief Returns the entity id of locally logged in account or false. + * + * Returns numeric account_id if authenticated or 0. It is possible to be + * authenticated and not connected to a channel. + * + * @return int|bool account_id or false + */ function get_account_id() { if(get_app()->account) return intval(get_app()->account['account_id']); + return false; } - -// Returns the entity id of locally logged in user or false. - - +/** + * @brief Returns the entity id of locally logged in user or false. + * + * Returns authenticated numeric channel_id if authenticated and connected to + * a channel or 0. Sometimes referred to as $uid in the code. + * + * @return int|bool channel_id or false + */ function local_user() { - if((x($_SESSION,'authenticated')) && (x($_SESSION,'uid'))) + if((x($_SESSION, 'authenticated')) && (x($_SESSION, 'uid'))) return intval($_SESSION['uid']); + return false; } // Returns contact id of authenticated site visitor or false - function remote_user() { if((x($_SESSION,'authenticated')) && (x($_SESSION,'visitor_id'))) return $_SESSION['visitor_id']; @@ -1578,15 +1562,14 @@ function remote_user() { // contents of $s are displayed prominently on the page the next time // a page is loaded. Usually used for errors or alerts. - function notice($s) { $a = get_app(); - if(! x($_SESSION,'sysmsg')) $_SESSION['sysmsg'] = array(); + if(! x($_SESSION, 'sysmsg')) $_SESSION['sysmsg'] = array(); if($a->interactive) { // shameless plug, permission is denied and they have no identity. // There's a fairly good chance that they've not got zot. - if((stristr($s,t('permission denied'))) && (! get_observer_hash())) { - $s .= '
' . t('Got Zot?') . ''; + if((stristr($s, t('permission denied'))) && (! get_observer_hash())) { + $s .= '
' . t('Got Zot?') . ''; } $_SESSION['sysmsg'][] = $s; } @@ -1595,24 +1578,21 @@ function notice($s) { function info($s) { $a = get_app(); - if(! x($_SESSION,'sysmsg_info')) $_SESSION['sysmsg_info'] = array(); + if(! x($_SESSION, 'sysmsg_info')) $_SESSION['sysmsg_info'] = array(); if($a->interactive) $_SESSION['sysmsg_info'][] = $s; } - - -// wrapper around config to limit the text length of an incoming message - - +/** + * @brief Wrapper around config to limit the text length of an incoming message + * + * @return int + */ function get_max_import_size() { - return(intval(get_config('system','max_import_size'))); + return(intval(get_config('system', 'max_import_size'))); } - - - /** * * Wrap calls to proc_close(proc_open()) and call hook @@ -1626,8 +1606,6 @@ function get_max_import_size() { * * $cmd and string args are surrounded with "" */ - - function proc_run($cmd){ $a = get_app(); @@ -1660,24 +1638,28 @@ function proc_run($cmd){ if(count($args) && $args[0] === 'php') $args[0] = ((x($a->config,'system')) && (x($a->config['system'],'php_path')) && (strlen($a->config['system']['php_path'])) ? $a->config['system']['php_path'] : 'php'); - for($x = 0; $x < count($args); $x ++) + + for($x = 0; $x < count($args); $x++) $args[$x] = escapeshellarg($args[$x]); $cmdline = implode($args," "); - if(is_windows()) { $cwd = getcwd(); $cmd = "cmd /c start \"title\" /D \"$cwd\" /b $cmdline"; proc_close(proc_open($cmd, array(), $foo)); } else - proc_close(proc_open($cmdline." &",array(),$foo)); + proc_close(proc_open($cmdline ." &", array(), $foo)); } - +/** + * @brief Checks if we are running on M$ Windows. + * + * @return bool true if we run on M$ Windows + */ function is_windows() { - return ((strtoupper(substr(PHP_OS,0,3)) === 'WIN') ? true : false); + return ((strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false); } @@ -1709,7 +1691,6 @@ function current_theme(){ $page_theme = null; } - $is_mobile = $a->is_mobile || $a->is_tablet; $standard_system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : ''); @@ -1724,7 +1705,7 @@ function current_theme(){ $system_theme = ((isset($a->config['system']['mobile_theme'])) ? $a->config['system']['mobile_theme'] : ''); $theme_name = ((isset($_SESSION) && x($_SESSION,'mobile_theme')) ? $_SESSION['mobile_theme'] : $system_theme); - if($theme_name === '' || $theme_name === '---' ) { + if($theme_name === '' || $theme_name === '---' ) { // user has selected to have the mobile theme be the same as the normal one $system_theme = $standard_system_theme; $theme_name = $standard_theme_name; @@ -1732,21 +1713,20 @@ function current_theme(){ } } else { - $system_theme = $standard_system_theme; - $theme_name = $standard_theme_name; + $system_theme = $standard_system_theme; + $theme_name = $standard_theme_name; if($page_theme) $theme_name = $page_theme; } - if($theme_name && (file_exists('view/theme/' . $theme_name . '/css/style.css') || file_exists('view/theme/' . $theme_name . '/php/style.php'))) return($theme_name); foreach($app_base_themes as $t) { - if(file_exists('view/theme/' . $t . '/css/style.css')|| + if(file_exists('view/theme/' . $t . '/css/style.css') || file_exists('view/theme/' . $t . '/php/style.php')) return($t); } @@ -1771,9 +1751,17 @@ function current_theme_url($installing = false) { $opts .= ((x($a->layout,'schema')) ? '&schema=' . $a->layout['schema'] : ''); if(file_exists('view/theme/' . $t . '/php/style.php')) return('view/theme/' . $t . '/php/style.pcss' . $opts); + return('view/theme/' . $t . '/css/style.css'); } +/** + * @brief Check if current user has admin role. + * + * Check if the current user has ACCOUNT_ROLE_ADMIN. + * + * @return bool true if user is an admin + */ function is_site_admin() { $a = get_app(); if((intval($_SESSION['authenticated'])) @@ -1783,19 +1771,25 @@ function is_site_admin() { return false; } +/** + * @brief Check if current user has developer role. + * + * Check if the current user has ACCOUNT_ROLE_DEVELOPER. + * + * @return bool true if user is a developer + */ function is_developer() { $a = get_app(); if((intval($_SESSION['authenticated'])) && (is_array($a->account)) && ($a->account['account_roles'] & ACCOUNT_ROLE_DEVELOPER)) return true; + return false; } - function load_contact_links($uid) { - $a = get_app(); $ret = array(); @@ -1815,30 +1809,30 @@ function load_contact_links($uid) { } else $ret['empty'] = true; + $a->contacts = $ret; - return; } /** - * returns querystring as string from a mapped array + * @brief Returns querystring as string from a mapped array. * - * @param params Array + * @param array $params mapped array with query parameters + * @param string $name of parameter, default null * @return string */ - -function build_querystring($params, $name=null) { - $ret = ""; - foreach($params as $key=>$val) { +function build_querystring($params, $name = null) { + $ret = ''; + foreach($params as $key => $val) { if(is_array($val)) { - if($name==null) { + if($name === null) { $ret .= build_querystring($val, $key); } else { - $ret .= build_querystring($val, $name."[$key]"); + $ret .= build_querystring($val, $name . "[$key]"); } } else { $val = urlencode($val); - if($name!=null) { + if($name != null) { $ret .= $name . "[$key]" . "=$val&"; } else { $ret .= "$key=$val&"; @@ -1858,6 +1852,7 @@ function argc() { function argv($x) { if(array_key_exists($x,get_app()->argv)) return get_app()->argv[$x]; + return ''; } @@ -1869,15 +1864,16 @@ function get_observer_hash() { $observer = get_app()->get_observer(); if(is_array($observer)) return $observer['xchan_hash']; + return ''; } /** -* Returns the complete URL of the current page, e.g.: http(s)://something.com/network -* -* Taken from http://webcheatsheet.com/php/get_current_page_url.php -*/ + * Returns the complete URL of the current page, e.g.: http(s)://something.com/network + * + * Taken from http://webcheatsheet.com/php/get_current_page_url.php + */ function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} @@ -1890,13 +1886,20 @@ function curPageURL() { return $pageURL; } -function get_custom_nav(&$a,$navname) { +function get_custom_nav(&$a, $navname) { if(! $navname) return $a->page['nav']; // load custom nav menu by name here - } +/** + * @brief Loads a page definition file for a module. + * + * If there is no parsed Comanche template already load a module's pdl file + * and parse it with Comanche. + * + * @param App &$a global application object + */ function load_pdl(&$a) { require_once('include/comanche.php'); @@ -1904,34 +1907,34 @@ function load_pdl(&$a) { $n = 'mod_' . $a->module . '.pdl' ; $u = comanche_get_channel_id(); if($u) - $s = get_pconfig($u,'system',$n); + $s = get_pconfig($u, 'system', $n); + if((! $s) && (($p = theme_include($n)) != '')) $s = @file_get_contents($p); + if($s) - comanche_parser($a,$s); + comanche_parser($a, $s); } - } - - +/** + * @brief build the page. + * + * Build the page - now that we have all the components + * + * @param App &$a global application object + */ function construct_page(&$a) { - - /** - * Build the page - now that we have all the components - */ - - $comanche = ((count($a->layout)) ? true : false); require_once(theme_include('theme_init.php')); $installing = false; - if($a->module == 'setup') + if($a->module == 'setup') { $installing = true; - else { + } else { nav($a); } @@ -1941,7 +1944,6 @@ function construct_page(&$a) { } } - if(($p = theme_include(current_theme() . '.js')) != '') head_add_js($p); @@ -1950,10 +1952,10 @@ function construct_page(&$a) { require_once('include/js_strings.php'); - if(x($a->page,'template_style')) + if(x($a->page, 'template_style')) head_add_css($a->page['template_style'] . '.css'); else - head_add_css(((x($a->page,'template')) ? $a->page['template'] : 'default' ) . '.css'); + head_add_css(((x($a->page, 'template')) ? $a->page['template'] : 'default' ) . '.css'); head_add_css('mod_' . $a->module . '.css'); head_add_css(current_theme_url($installing)); @@ -1963,11 +1965,12 @@ function construct_page(&$a) { $a->build_pagehead(); $arr = $a->get_widgets(); - ksort($arr,SORT_NUMERIC); + ksort($arr, SORT_NUMERIC); if(count($arr)) { foreach($arr as $x) { - if(! array_key_exists($x['location'],$a->page)) + if(! array_key_exists($x['location'], $a->page)) $a->page[$x['location']] = ''; + $a->page[$x['location']] .= $x['html']; } } @@ -1983,27 +1986,25 @@ function construct_page(&$a) { if($comanche) { $arr = array('module' => $a->module, 'layout' => $a->layout); - call_hooks('construct_page',$arr); + call_hooks('construct_page', $arr); $a->layout = $arr['layout']; foreach($a->layout as $k => $v) { - if((strpos($k,'region_') === 0) && strlen($v)) { - if(strpos($v,'$region_') !== false) { - $v = preg_replace_callback('/\$region_([a-zA-Z0-9]+)/ism','comanche_replace_region',$v); + if((strpos($k, 'region_') === 0) && strlen($v)) { + if(strpos($v, '$region_') !== false) { + $v = preg_replace_callback('/\$region_([a-zA-Z0-9]+)/ism', 'comanche_replace_region', $v); } // And a couple of convenience macros - if(strpos($v,'$nav') !== false) { - $v = str_replace('$nav',$a->page['nav'],$v); + if(strpos($v, '$nav') !== false) { + $v = str_replace('$nav', $a->page['nav'], $v); } - if(strpos($v,'$content') !== false) { - - $v = str_replace('$content',$a->page['content'],$v); + if(strpos($v, '$content') !== false) { + $v = str_replace('$content', $a->page['content'], $v); } - $a->page[substr($k,7)] = $v; - + $a->page[substr($k, 7)] = $v; } } } @@ -2030,13 +2031,8 @@ function construct_page(&$a) { header("Content-type: text/html; charset=utf-8"); require_once(theme_include( - ((x($a->page,'template')) - ? $a->page['template'] - : 'default' ) - . '.php' ) + ((x($a->page, 'template')) ? $a->page['template'] : 'default' ) . '.php' ) ); - - return; } @@ -2047,20 +2043,24 @@ function appdirpath() { function head_set_icon($icon) { global $a; + $a->data['pageicon'] = $icon; // logger('head_set_icon: ' . $icon); } function head_get_icon() { global $a; + $icon = $a->data['pageicon']; - if(! strpos($icon,'://')) + if(! strpos($icon, '://')) $icon = z_root() . $icon; + return $icon; } function get_directory_realm() { - if($x = get_config('system','directory_realm')) + if($x = get_config('system', 'directory_realm')) return $x; + return DIRECTORY_REALM; } -- cgit v1.2.3 From 1a5a5c7edb8697c93f8bababbafa80245378dd7e Mon Sep 17 00:00:00 2001 From: Habeas Codice Date: Thu, 13 Nov 2014 12:21:58 -0800 Subject: PostgreSQL support initial commit There were 11 main types of changes: - UPDATE's and DELETE's sometimes had LIMIT 1 at the end of them. This is not only non-compliant but it would certainly not do what whoever wrote it thought it would. It is likely this mistake was just copied from Friendica. All of these instances, the LIMIT 1 was simply removed. - Bitwise operations (and even some non-zero int checks) erroneously rely on MySQL implicit integer-boolean conversion in the WHERE clauses. This is non-compliant (and bad programming practice to boot). Proper explicit boolean conversions were added. New queries should use proper conventions. - MySQL has a different operator for bitwise XOR than postgres. Rather than add yet another dba_ func, I converted them to "& ~" ("AND NOT") when turning off, and "|" ("OR") when turning on. There were no true toggles (XOR). New queries should refrain from using XOR when not necessary. - There are several fields which the schema has marked as NOT NULL, but the inserts don't specify them. The reason this works is because mysql totally ignores the constraint and adds an empty text default automatically. Again, non-compliant, obviously. In these cases a default of empty text was added. - Several statements rely on a non-standard MySQL feature (http://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html). These queries can all be rewritten to be standards compliant. Interestingly enough, the newly rewritten standards compliant queries run a zillion times faster, even on MySQL. - A couple of function/operator name translations were needed (RAND/RANDOM, GROUP_CONCAT/STRING_AGG, UTC_NOW, REGEXP/~, ^/#) -- assist functions added in the dba_ - INTERVALs: postgres requires quotes around the value, mysql requires that there are not quotes around the value -- assist functions added in the dba_ - NULL_DATE's -- Postgres does not allow the invalid date '0000-00-00 00:00:00' (there is no such thing as year 0 or month 0 or day 0). We use '0001-01-01 00:00:00' for postgres. Conversions are handled in Zot/item packets automagically by quoting all dates with dbescdate(). - char(##) specifications in the schema creates fields with blank spaces that aren't trimmed in the code. MySQL apparently treats char(##) as varchar(##), again, non-compliant. Since postgres works better with text fields anyway, this ball of bugs was simply side-stepped by using 'text' datatype for all text fields in the postgres schema. varchar was used in a couple of places where it actually seemed appropriate (size constraint), but without rigorously vetting that all of the PHP code actually validates data, new bugs might come out from under the rug. - postgres doesn't store nul bytes and a few other non-printables in text fields, even when quoted. bytea fields were used when storing binary data (photo.data, attach.data). A new dbescbin() function was added to handle this transparently. - postgres does not support LIMIT #,# syntax. All databases support LIMIT # OFFSET # syntax. Statements were updated to be standard. These changes require corresponding changes in the coding standards. Please review those before adding any code going forward. Still on my TODO list: - remove quotes from non-reserved identifiers and make reserved identifiers use dba func for quoting - Rewrite search queries for better results (both MySQL and Postgres) --- boot.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index abbf48636..085e6b36b 100755 --- a/boot.php +++ b/boot.php @@ -52,7 +52,7 @@ define ( 'DB_UPDATE_VERSION', 1130 ); define ( 'EOL', '
' . "\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); -define ( 'NULL_DATE', '0000-00-00 00:00:00' ); +//define ( 'NULL_DATE', '0000-00-00 00:00:00' ); define ( 'TEMPLATE_BUILD_PATH', 'store/[data]/smarty3' ); define ( 'DIRECTORY_MODE_NORMAL', 0x0000); // This is technically DIRECTORY_MODE_TERTIARY, but it's the default, hence 0x0000 @@ -555,7 +555,9 @@ define ( 'ITEM_VERIFIED', 0x2000); // Signature verification was success define ( 'ITEM_RETAINED', 0x4000); // We looked at this item once to decide whether or not to expire it, and decided not to. define ( 'ITEM_RSS', 0x8000); // Item comes from a feed. Use this to decide whether to link the title // Don't make us evaluate this same item again. - +define ( 'DBTYPE_MYSQL', 0 ); +define ( 'DBTYPE_POSTGRES', 1 ); + /** * * Reverse the effect of magic_quotes_gpc if it is enabled. @@ -1417,7 +1419,7 @@ function fix_system_urls($oldurl,$newurl) { $replace_xchan_url = ((strpos($rr['xchan_url'],$oldurl) !== false) ? true : false); - $x = q("update xchan set xchan_addr = '%s', xchan_url = '%s', xchan_connurl = '%s', xchan_follow = '%s', xchan_connpage = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_date = '%s' where xchan_hash = '%s' limit 1", + $x = q("update xchan set xchan_addr = '%s', xchan_url = '%s', xchan_connurl = '%s', xchan_follow = '%s', xchan_connpage = '%s', xchan_photo_l = '%s', xchan_photo_m = '%s', xchan_photo_s = '%s', xchan_photo_date = '%s' where xchan_hash = '%s'", dbesc($channel_address . '@' . $rhs), dbesc(($replace_xchan_url) ? str_replace($oldurl,$newurl,$rr['xchan_url']) : $rr['xchan_url']), dbesc(str_replace($oldurl,$newurl,$rr['xchan_connurl'])), @@ -1430,7 +1432,7 @@ function fix_system_urls($oldurl,$newurl) { dbesc($rr['xchan_hash']) ); - $y = q("update hubloc set hubloc_addr = '%s', hubloc_url = '%s', hubloc_url_sig = '%s', hubloc_host = '%s', hubloc_callback = '%s' where hubloc_hash = '%s' and hubloc_url = '%s' limit 1", + $y = q("update hubloc set hubloc_addr = '%s', hubloc_url = '%s', hubloc_url_sig = '%s', hubloc_host = '%s', hubloc_callback = '%s' where hubloc_hash = '%s' and hubloc_url = '%s'", dbesc($channel_address . '@' . $rhs), dbesc($newurl), dbesc(base64url_encode(rsa_sign($newurl,$c[0]['channel_prvkey']))), @@ -1787,7 +1789,7 @@ function load_contact_links($uid) { // logger('load_contact_links'); - $r = q("SELECT abook_id, abook_flags, abook_my_perms, abook_their_perms, xchan_hash, xchan_photo_m, xchan_name, xchan_url from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and not (abook_flags & %d) ", + $r = q("SELECT abook_id, abook_flags, abook_my_perms, abook_their_perms, xchan_hash, xchan_photo_m, xchan_name, xchan_url from abook left join xchan on abook_xchan = xchan_hash where abook_channel = %d and not (abook_flags & %d)>0 ", intval($uid), intval(ABOOK_FLAG_SELF) ); -- cgit v1.2.3 From e4859d4bd70b1649e7ebe4cbb285a0993a837f85 Mon Sep 17 00:00:00 2001 From: Klaus Weidenbach Date: Thu, 13 Nov 2014 22:40:06 +0100 Subject: Changed two strange looking places in boot.php. There have been two places that looked wrong, but I don't know how I can test them. So please review and test if I am not wrong. --- boot.php | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index d883dcc28..0feedf7a1 100755 --- a/boot.php +++ b/boot.php @@ -76,7 +76,7 @@ $DIRECTORY_FALLBACK_SERVERS = array( 'https://redmatrix.nl', 'https://whogotzot.com', 'https://red.zottel.red', - 'https://red.pixelbits.de' + 'https://red.pixelbits.de' ); @@ -635,7 +635,7 @@ class App { private $perms = null; // observer permissions private $widgets = array(); // widgets for this page - private $widgetlist = null; // widget ordering and inclusion directives + //private $widgetlist = null; // widget ordering and inclusion directives public $groups; public $language; @@ -712,13 +712,6 @@ class App { private $hostname; private $baseurl; private $path; - private $db; - - private $curl_code; - private $curl_headers; - - private $cached_profile_image; - private $cached_profile_picdate; function __construct() { @@ -847,12 +840,14 @@ class App { && array_key_exists('baseurl',$this->config['system']) && strlen($this->config['system']['baseurl'])) { $url = $this->config['system']['baseurl']; + return $url; } $scheme = $this->scheme; $this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' ); + return $this->baseurl; } @@ -879,7 +874,6 @@ class App { if(x($parsed,'path')) $this->path = trim($parsed['path'],'\\/'); } - } function get_hostname() { @@ -953,9 +947,10 @@ class App { function get_widgets($location = '') { if($location && count($this->widgets)) { $ret = array(); - foreach($widgets as $w) - if($w['location'] == $location) + foreach($this->widgets as $w) { + if ($w['location'] == $location) $ret[] = $w; + } $arr = array('location' => $location, 'widgets' => $ret); call_hooks('get_widgets', $arr); return $arr['widgets']; @@ -1007,7 +1002,6 @@ class App { // always put main.js at the end $this->page['htmlhead'] .= head_get_main_js(); - } /** @@ -1017,11 +1011,11 @@ class App { * @param string $name */ function register_template_engine($class, $name = '') { - if ($name===""){ + if ($name === ""){ $v = get_class_vars( $class ); - if(x($v,"name")) $name = $v['name']; + if(x($v, "name")) $name = $v['name']; } - if ($name===""){ + if ($name === ""){ echo "template engine $class cannot be registered without a name.\n"; killme(); } @@ -1032,11 +1026,11 @@ class App { * return template engine instance. If $name is not defined, * return engine defined by theme, or default * - * @param strin $name Template engine name + * @param string $name Template engine name * @return object Template Engine instance */ function template_engine($name = ''){ - if ($name!=="") { + if ($name !== "") { $template_engine = $name; } else { $template_engine = 'smarty3'; @@ -1886,6 +1880,17 @@ function curPageURL() { return $pageURL; } +/** + * @brief Returns a custom navigation by name??? + * + * If no $navname provided load default page['nav'] + * + * @todo not fully implemented yet + * + * @param App $a global application object + * @param string $navname + * @return mixed + */ function get_custom_nav(&$a, $navname) { if(! $navname) return $a->page['nav']; @@ -1940,7 +1945,7 @@ function construct_page(&$a) { if($comanche) { if($a->layout['nav']) { - $a->page['nav'] = get_custom_nav($a->layout['nav']); + $a->page['nav'] = get_custom_nav($a, $a->layout['nav']); } } -- cgit v1.2.3 From e8b77fbdff6cfd9455db378b5edb00fece74fea2 Mon Sep 17 00:00:00 2001 From: Klaus Weidenbach Date: Fri, 14 Nov 2014 00:45:25 +0100 Subject: Fixed a variable conflict in mod/xchan.php. A variable $rr inside the foreachs was used twice. Add translation to mod/xchan.php. --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 0feedf7a1..55ae3cc66 100755 --- a/boot.php +++ b/boot.php @@ -950,7 +950,7 @@ class App { foreach($this->widgets as $w) { if ($w['location'] == $location) $ret[] = $w; - } + } $arr = array('location' => $location, 'widgets' => $ret); call_hooks('get_widgets', $arr); return $arr['widgets']; -- cgit v1.2.3 From 1c249a5b06279ea4a19433d45a8dbe6fd71bcd25 Mon Sep 17 00:00:00 2001 From: friendica Date: Sun, 16 Nov 2014 15:51:42 -0800 Subject: some poller optimisations and a fix for undefined (empty) dbtype which shows up as a mysql error that 'rand' isn't found. --- boot.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 7758d1933..569162221 100755 --- a/boot.php +++ b/boot.php @@ -567,7 +567,8 @@ define ( 'ITEM_VERIFIED', 0x2000); // Signature verification was success define ( 'ITEM_RETAINED', 0x4000); // We looked at this item once to decide whether or not to expire it, and decided not to. define ( 'ITEM_RSS', 0x8000); // Item comes from a feed. Use this to decide whether to link the title // Don't make us evaluate this same item again. -define ( 'DBTYPE_MYSQL', 0 ); + +define ( 'DBTYPE_MYSQL', 0 ); define ( 'DBTYPE_POSTGRES', 1 ); /** -- cgit v1.2.3 From d9ac9df172337f55bd3c3a84962baf5a1304fab9 Mon Sep 17 00:00:00 2001 From: Thomas Willingham Date: Tue, 25 Nov 2014 01:31:33 +0000 Subject: Update dir fallbacks. --- boot.php | 1 - 1 file changed, 1 deletion(-) (limited to 'boot.php') diff --git a/boot.php b/boot.php index 569162221..b2c8fa9ea 100755 --- a/boot.php +++ b/boot.php @@ -74,7 +74,6 @@ $DIRECTORY_FALLBACK_SERVERS = array( 'https://zothub.com', 'https://zotid.net', 'https://redmatrix.nl', - 'https://whogotzot.com', 'https://red.zottel.red', 'https://red.pixelbits.de' ); -- cgit v1.2.3