diff --git a/boot.php b/boot.php index 56279f4ec8..6f036d846e 100644 --- a/boot.php +++ b/boot.php @@ -32,7 +32,6 @@ require_once('include/cache.php'); require_once('library/Mobile_Detect/Mobile_Detect.php'); require_once('include/features.php'); require_once('include/identity.php'); -require_once('include/pidfile.php'); require_once('update.php'); require_once('include/dbstructure.php'); @@ -40,7 +39,7 @@ define ( 'FRIENDICA_PLATFORM', 'Friendica'); define ( 'FRIENDICA_CODENAME', 'Asparagus'); define ( 'FRIENDICA_VERSION', '3.5.2-dev' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1215 ); +define ( 'DB_UPDATE_VERSION', 1216 ); /** * @brief Constant with a HTML line break. @@ -442,10 +441,17 @@ define('SR_SCOPE_ALL', 'all'); define('SR_SCOPE_TAGS', 'tags'); /* @}*/ -// Normally this constant is defined - but not if "pcntl" isn't installed -if (!defined("SIGTERM")) - define("SIGTERM", 15); +/** + * Lowest possible date time value + */ +define ('NULL_DATE', '0001-01-01 00:00:00'); + + +// Normally this constant is defined - but not if "pcntl" isn't installed +if (!defined("SIGTERM")) { + define("SIGTERM", 15); +} /** * * Reverse the effect of magic_quotes_gpc if it is enabled. @@ -1346,60 +1352,25 @@ class App { return false; } - /** - * @brief Checks if the process is already running - * - * @param string $taskname The name of the task that will be used for the name of the lockfile - * @param string $task The path and name of the php script - * @param int $timeout The timeout after which a task should be killed - * - * @return bool Is the process running? - */ - function is_already_running($taskname, $task = "", $timeout = 540) { - - $lockpath = get_lockpath(); - if ($lockpath != '') { - $pidfile = new pidfile($lockpath, $taskname); - if ($pidfile->is_already_running()) { - logger("Already running"); - if ($pidfile->running_time() > $timeout) { - $pidfile->kill(); - logger("killed stale process"); - // Calling a new instance - if ($task != "") - proc_run(PRIORITY_MEDIUM, $task); - } - return true; - } - } - return false; - } - function proc_run($args) { if (!function_exists("proc_open")) { return; } - // Add the php path if it is a php call - if (count($args) && ($args[0] === 'php' OR !is_string($args[0]))) { - - // If the last worker fork was less than 10 seconds before then don't fork another one. - // This should prevent the forking of masses of workers. - if (get_config("system", "worker")) { - $cachekey = "app:proc_run:started"; - $result = Cache::get($cachekey); - if (!is_null($result)) { - if ((time() - $result) < 10) { - return; - } - } - // Set the timestamp of the last proc_run - Cache::set($cachekey, time(), CACHE_MINUTE); + // If the last worker fork was less than 10 seconds before then don't fork another one. + // This should prevent the forking of masses of workers. + $cachekey = "app:proc_run:started"; + $result = Cache::get($cachekey); + if (!is_null($result)) { + if ((time() - $result) < 10) { + return; } - - $args[0] = ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php'); } + // Set the timestamp of the last proc_run + Cache::set($cachekey, time(), CACHE_MINUTE); + + array_unshift($args, ((x($this->config,'php_path')) && (strlen($this->config['php_path'])) ? $this->config['php_path'] : 'php')); // add baseurl to args. cli scripts can't construct it $args[] = $this->get_baseurl(); @@ -1976,10 +1947,9 @@ function get_max_import_size() { * @brief Wrap calls to proc_close(proc_open()) and call hook * so plugins can take part in process :) * - * @param (string|integer|array) $cmd program to run, priority or parameter array + * @param (integer|array) priority or parameter array, $cmd atrings are deprecated and are ignored * * next args are passed as $cmd command line - * e.g.: proc_run("ls","-la","/tmp"); * or: proc_run(PRIORITY_HIGH, "include/notifier.php", "drop", $drop_id); * or: proc_run(array('priority' => PRIORITY_HIGH, 'dont_fork' => true), "include/create_shadowentry.php", $post_id); * @@ -2024,11 +1994,6 @@ function proc_run($cmd){ if (!$arr['run_cmd'] OR !count($args)) return; - if (!get_config("system", "worker") OR (is_string($run_parameter) AND ($run_parameter != 'php'))) { - $a->proc_run($args); - return; - } - $priority = PRIORITY_MEDIUM; $dont_fork = get_config("system", "worker_dont_fork"); @@ -2063,7 +2028,7 @@ function proc_run($cmd){ } // Checking number of workers - $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'"); + $workers = q("SELECT COUNT(*) AS `workers` FROM `workerqueue` WHERE `executed` > '%s'", dbesc(NULL_DATE)); // Get number of allowed number of worker threads $queues = intval(get_config("system", "worker_queues")); @@ -2076,7 +2041,7 @@ function proc_run($cmd){ return; // Now call the poller to execute the jobs that we just added to the queue - $args = array("php", "include/poller.php", "no_cron"); + $args = array("include/poller.php", "no_cron"); $a->proc_run($args); } @@ -2410,38 +2375,6 @@ function get_itemcachepath() { return ""; } -function get_lockpath() { - $lockpath = get_config('system','lockpath'); - if (($lockpath != "") AND App::directory_usable($lockpath)) { - // We have a lock path and it is usable - return $lockpath; - } - - // We don't have a working preconfigured lock path, so we take the temp path. - $temppath = get_temppath(); - - if ($temppath != "") { - // To avoid any interferences with other systems we create our own directory - $lockpath = $temppath."/lock"; - if (!is_dir($lockpath)) { - mkdir($lockpath); - } - - if (App::directory_usable($lockpath)) { - // The new path is usable, we are happy - set_config("system", "lockpath", $lockpath); - return $lockpath; - } else { - // We can't create a subdirectory, strange. - // But the directory seems to work, so we use it but don't store it. - return $temppath; - } - } - - // Reaching this point means that the operating system is configured badly. - return ""; -} - /** * @brief Returns the path where spool files are stored * diff --git a/database.sql b/database.sql index b133489e4e..7ed19f439c 100644 --- a/database.sql +++ b/database.sql @@ -1,5 +1,5 @@ -- ------------------------------------------ --- Friendica 3.5.1-rc (Asparagus) +-- Friendica 3.5.2-dev (Asparagus) -- DB_UPDATE_VERSION 1215 -- ------------------------------------------ @@ -30,8 +30,8 @@ CREATE TABLE IF NOT EXISTS `attach` ( `filetype` varchar(64) NOT NULL DEFAULT '', `filesize` int(11) NOT NULL DEFAULT 0, `data` longblob NOT NULL, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `allow_cid` mediumtext, `allow_gid` mediumtext, `deny_cid` mediumtext, @@ -58,7 +58,7 @@ CREATE TABLE IF NOT EXISTS `cache` ( `k` varbinary(255) NOT NULL, `v` mediumtext, `expire_mode` int(11) NOT NULL DEFAULT 0, - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`k`), INDEX `expire_mode_updated` (`expire_mode`,`updated`) ) DEFAULT CHARSET=utf8mb4; @@ -107,7 +107,7 @@ CREATE TABLE IF NOT EXISTS `config` ( CREATE TABLE IF NOT EXISTS `contact` ( `id` int(11) NOT NULL auto_increment, `uid` int(11) NOT NULL DEFAULT 0, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `self` tinyint(1) NOT NULL DEFAULT 0, `remote_self` tinyint(1) NOT NULL DEFAULT 0, `rel` tinyint(1) NOT NULL DEFAULT 0, @@ -145,14 +145,14 @@ CREATE TABLE IF NOT EXISTS `contact` ( `usehub` tinyint(1) NOT NULL DEFAULT 0, `subhub` tinyint(1) NOT NULL DEFAULT 0, `hub-verify` varchar(255) NOT NULL DEFAULT '', - `last-update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `success_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `failure_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `name-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `uri-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `avatar-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `term-date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `last-item` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last-update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `success_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `failure_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `name-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `uri-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `avatar-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `term-date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `last-item` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `priority` tinyint(3) NOT NULL DEFAULT 0, `blocked` tinyint(1) NOT NULL DEFAULT 1, `readonly` tinyint(1) NOT NULL DEFAULT 0, @@ -197,25 +197,13 @@ CREATE TABLE IF NOT EXISTS `conv` ( `recips` text, `uid` int(11) NOT NULL DEFAULT 0, `creator` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `subject` text, PRIMARY KEY(`id`), INDEX `uid` (`uid`) ) DEFAULT CHARSET=utf8mb4; --- --- TABLE deliverq --- -CREATE TABLE IF NOT EXISTS `deliverq` ( - `id` int(10) unsigned NOT NULL auto_increment, - `cmd` varbinary(32) NOT NULL DEFAULT '', - `item` int(11) NOT NULL DEFAULT 0, - `contact` int(11) NOT NULL DEFAULT 0, - PRIMARY KEY(`id`), - UNIQUE INDEX `cmd_item_contact` (`cmd`,`item`,`contact`) -) DEFAULT CHARSET=utf8mb4; - -- -- TABLE event -- @@ -225,10 +213,10 @@ CREATE TABLE IF NOT EXISTS `event` ( `uid` int(11) NOT NULL DEFAULT 0, `cid` int(11) NOT NULL DEFAULT 0, `uri` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `finish` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `start` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `finish` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `summary` text, `desc` text, `location` text, @@ -264,7 +252,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` ( `network` varchar(32) NOT NULL DEFAULT '', `alias` varchar(255) NOT NULL DEFAULT '', `pubkey` text, - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`), INDEX `addr` (`addr`(32)), INDEX `url` (`url`) @@ -305,7 +293,7 @@ CREATE TABLE IF NOT EXISTS `fsuggest` ( `request` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '', `note` text, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`) ) DEFAULT CHARSET=utf8mb4; @@ -332,10 +320,10 @@ CREATE TABLE IF NOT EXISTS `gcontact` ( `nurl` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '', `connect` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `updated` datetime DEFAULT '0000-00-00 00:00:00', - `last_contact` datetime DEFAULT '0000-00-00 00:00:00', - `last_failure` datetime DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `updated` datetime DEFAULT '0001-01-01 00:00:00', + `last_contact` datetime DEFAULT '0001-01-01 00:00:00', + `last_failure` datetime DEFAULT '0001-01-01 00:00:00', `location` varchar(255) NOT NULL DEFAULT '', `about` text, `keywords` text, @@ -369,7 +357,7 @@ CREATE TABLE IF NOT EXISTS `glink` ( `uid` int(11) NOT NULL DEFAULT 0, `gcid` int(11) NOT NULL DEFAULT 0, `zcid` int(11) NOT NULL DEFAULT 0, - `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `updated` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`), UNIQUE INDEX `cid_uid_gcid_zcid` (`cid`,`uid`,`gcid`,`zcid`), INDEX `gcid` (`gcid`) @@ -417,10 +405,10 @@ CREATE TABLE IF NOT EXISTS `gserver` ( `noscrape` varchar(255) NOT NULL DEFAULT '', `network` varchar(32) NOT NULL DEFAULT '', `platform` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `last_poco_query` datetime DEFAULT '0000-00-00 00:00:00', - `last_contact` datetime DEFAULT '0000-00-00 00:00:00', - `last_failure` datetime DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `last_poco_query` datetime DEFAULT '0001-01-01 00:00:00', + `last_contact` datetime DEFAULT '0001-01-01 00:00:00', + `last_failure` datetime DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`), INDEX `nurl` (`nurl`(32)) ) DEFAULT CHARSET=utf8mb4; @@ -450,7 +438,7 @@ CREATE TABLE IF NOT EXISTS `intro` ( `duplex` tinyint(1) NOT NULL DEFAULT 0, `note` text, `hash` varchar(255) NOT NULL DEFAULT '', - `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `datetime` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `blocked` tinyint(1) NOT NULL DEFAULT 1, `ignore` tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY(`id`) @@ -473,11 +461,11 @@ CREATE TABLE IF NOT EXISTS `item` ( `parent-uri` varchar(255) NOT NULL DEFAULT '', `extid` varchar(255) NOT NULL DEFAULT '', `thr-parent` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `owner-id` int(11) NOT NULL DEFAULT 0, `owner-name` varchar(255) NOT NULL DEFAULT '', `owner-link` varchar(255) NOT NULL DEFAULT '', @@ -576,7 +564,7 @@ CREATE TABLE IF NOT EXISTS `locks` ( `id` int(11) NOT NULL auto_increment, `name` varchar(128) NOT NULL DEFAULT '', `locked` tinyint(1) NOT NULL DEFAULT 0, - `created` datetime DEFAULT '0000-00-00 00:00:00', + `created` datetime DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`) ) DEFAULT CHARSET=utf8mb4; @@ -600,7 +588,7 @@ CREATE TABLE IF NOT EXISTS `mail` ( `unknown` tinyint(1) NOT NULL DEFAULT 0, `uri` varchar(255) NOT NULL DEFAULT '', `parent-uri` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`), INDEX `uid_seen` (`uid`,`seen`), INDEX `convid` (`convid`), @@ -624,7 +612,7 @@ CREATE TABLE IF NOT EXISTS `mailacct` ( `action` int(11) NOT NULL DEFAULT 0, `movetofolder` varchar(255) NOT NULL DEFAULT '', `pubmail` tinyint(1) NOT NULL DEFAULT 0, - `last_check` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_check` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`) ) DEFAULT CHARSET=utf8mb4; @@ -649,7 +637,7 @@ CREATE TABLE IF NOT EXISTS `notify` ( `name` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '', `photo` varchar(255) NOT NULL DEFAULT '', - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `msg` mediumtext, `uid` int(11) NOT NULL DEFAULT 0, `link` varchar(255) NOT NULL DEFAULT '', @@ -685,7 +673,7 @@ CREATE TABLE IF NOT EXISTS `notify-threads` ( CREATE TABLE IF NOT EXISTS `oembed` ( `url` varbinary(255) NOT NULL, `content` mediumtext, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`url`), INDEX `created` (`created`) ) DEFAULT CHARSET=utf8mb4; @@ -698,7 +686,7 @@ CREATE TABLE IF NOT EXISTS `parsed_url` ( `guessing` tinyint(1) NOT NULL DEFAULT 0, `oembed` tinyint(1) NOT NULL DEFAULT 0, `content` mediumtext, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`url`,`guessing`,`oembed`), INDEX `created` (`created`) ) DEFAULT CHARSET=utf8mb4; @@ -725,8 +713,8 @@ CREATE TABLE IF NOT EXISTS `photo` ( `contact-id` int(10) unsigned NOT NULL DEFAULT 0, `guid` varchar(64) NOT NULL DEFAULT '', `resource-id` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `title` varchar(255) NOT NULL DEFAULT '', `desc` text, `album` varchar(255) NOT NULL DEFAULT '', @@ -788,7 +776,7 @@ CREATE TABLE IF NOT EXISTS `poll_result` ( CREATE TABLE IF NOT EXISTS `process` ( `pid` int(10) unsigned NOT NULL, `command` varbinary(32) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`pid`), INDEX `command` (`command`) ) DEFAULT CHARSET=utf8mb4; @@ -814,7 +802,7 @@ CREATE TABLE IF NOT EXISTS `profile` ( `gender` varchar(32) NOT NULL DEFAULT '', `marital` varchar(255) NOT NULL DEFAULT '', `with` text, - `howlong` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `howlong` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `sexual` varchar(255) NOT NULL DEFAULT '', `politic` varchar(255) NOT NULL DEFAULT '', `religion` varchar(255) NOT NULL DEFAULT '', @@ -866,7 +854,7 @@ CREATE TABLE IF NOT EXISTS `push_subscriber` ( `topic` varchar(255) NOT NULL DEFAULT '', `nickname` varchar(255) NOT NULL DEFAULT '', `push` int(11) NOT NULL DEFAULT 0, - `last_update` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_update` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `secret` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY(`id`) ) DEFAULT CHARSET=utf8mb4; @@ -878,8 +866,8 @@ CREATE TABLE IF NOT EXISTS `queue` ( `id` int(11) NOT NULL auto_increment, `cid` int(11) NOT NULL DEFAULT 0, `network` varchar(32) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `last` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `last` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `content` mediumtext, `batch` tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY(`id`), @@ -896,7 +884,7 @@ CREATE TABLE IF NOT EXISTS `queue` ( CREATE TABLE IF NOT EXISTS `register` ( `id` int(11) unsigned NOT NULL auto_increment, `hash` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `uid` int(11) unsigned NOT NULL DEFAULT 0, `password` varchar(255) NOT NULL DEFAULT '', `language` varchar(16) NOT NULL DEFAULT '', @@ -950,7 +938,7 @@ CREATE TABLE IF NOT EXISTS `spam` ( `spam` int(11) NOT NULL DEFAULT 0, `ham` int(11) NOT NULL DEFAULT 0, `term` varchar(255) NOT NULL DEFAULT '', - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`), INDEX `uid` (`uid`), INDEX `spam` (`spam`), @@ -969,8 +957,8 @@ CREATE TABLE IF NOT EXISTS `term` ( `term` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '', `guid` varchar(255) NOT NULL DEFAULT '', - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `global` tinyint(1) NOT NULL DEFAULT 0, `aid` int(10) unsigned NOT NULL DEFAULT 0, `uid` int(10) unsigned NOT NULL DEFAULT 0, @@ -991,11 +979,11 @@ CREATE TABLE IF NOT EXISTS `thread` ( `gcontact-id` int(11) unsigned NOT NULL DEFAULT 0, `owner-id` int(11) unsigned NOT NULL DEFAULT 0, `author-id` int(11) unsigned NOT NULL DEFAULT 0, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `commented` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `received` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `changed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `edited` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `commented` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `received` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `changed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `wall` tinyint(1) NOT NULL DEFAULT 0, `private` tinyint(1) NOT NULL DEFAULT 0, `pubmail` tinyint(1) NOT NULL DEFAULT 0, @@ -1047,8 +1035,8 @@ CREATE TABLE IF NOT EXISTS `user` ( `openid` varchar(255) NOT NULL DEFAULT '', `timezone` varchar(128) NOT NULL DEFAULT '', `language` varchar(32) NOT NULL DEFAULT 'en', - `register_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `login_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `register_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `login_date` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `default-location` varchar(255) NOT NULL DEFAULT '', `allow_location` tinyint(1) NOT NULL DEFAULT 0, `theme` varchar(255) NOT NULL DEFAULT '', @@ -1072,8 +1060,8 @@ CREATE TABLE IF NOT EXISTS `user` ( `expire` int(11) unsigned NOT NULL DEFAULT 0, `account_removed` tinyint(1) NOT NULL DEFAULT 0, `account_expired` tinyint(1) NOT NULL DEFAULT 0, - `account_expires_on` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `expire_notification_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `account_expires_on` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', + `expire_notification_sent` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `service_class` varchar(32) NOT NULL DEFAULT '', `def_gid` int(11) NOT NULL DEFAULT 0, `allow_cid` mediumtext, @@ -1102,9 +1090,9 @@ CREATE TABLE IF NOT EXISTS `workerqueue` ( `id` int(11) NOT NULL auto_increment, `parameter` text, `priority` tinyint(3) unsigned NOT NULL DEFAULT 0, - `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', `pid` int(11) NOT NULL DEFAULT 0, - `executed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `executed` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', PRIMARY KEY(`id`) ) DEFAULT CHARSET=utf8mb4; diff --git a/include/Contact.php b/include/Contact.php index 9fd61f8d5e..fc9f660f13 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -127,7 +127,7 @@ function mark_for_death($contact) { if($contact['archive']) return; - if($contact['term-date'] == '0000-00-00 00:00:00') { + if ($contact['term-date'] <= NULL_DATE) { q("UPDATE `contact` SET `term-date` = '%s' WHERE `id` = %d", dbesc(datetime_convert()), intval($contact['id']) @@ -185,13 +185,13 @@ function unmark_for_death($contact) { // It's a miracle. Our dead contact has inexplicably come back to life. q("UPDATE `contact` SET `term-date` = '%s' WHERE `id` = %d", - dbesc('0000-00-00 00:00:00'), + dbesc(NULL_DATE), intval($contact['id']) ); if ($contact['url'] != '') { q("UPDATE `contact` SET `term-date` = '%s' WHERE `nurl` = '%s'", - dbesc('0000-00-00 00:00:00'), + dbesc(NULL_DATE), dbesc(normalise_link($contact['url'])) ); } diff --git a/include/create_shadowentry.php b/include/create_shadowentry.php index 005295c978..98db23f9ef 100644 --- a/include/create_shadowentry.php +++ b/include/create_shadowentry.php @@ -6,26 +6,9 @@ * This script is started from mod/item.php to save some time when doing a post. */ -use \Friendica\Core\Config; - -require_once("boot.php"); require_once("include/threads.php"); function create_shadowentry_run($argv, $argc) { - global $a, $db; - - if (is_null($a)) - $a = new App; - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - Config::load(); - if ($argc != 2) { return; } @@ -34,9 +17,4 @@ function create_shadowentry_run($argv, $argc) { add_shadow_entry($message_id); } - -if (array_search(__file__,get_included_files())===0){ - create_shadowentry_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} ?> diff --git a/include/cron.php b/include/cron.php index 2fc8de51c5..ca9b5dff25 100644 --- a/include/cron.php +++ b/include/cron.php @@ -1,35 +1,11 @@ maxload_reached()) - return; - if (App::is_already_running('cron', 'include/cron.php', 540)) - return; - } - $last = get_config('system','last_cron'); $poll_interval = intval(get_config('system','cron_interval')); @@ -64,10 +30,6 @@ function cron_run(&$argv, &$argc){ } } - $a->set_baseurl(get_config('system','url')); - - load_hooks(); - logger('cron: start'); // run queue delivery process in the background @@ -85,34 +47,17 @@ function cron_run(&$argv, &$argc){ // Expire and remove user entries cron_expire_and_remove_users(); - // If the worker is active, split the jobs in several sub processes - if (get_config("system", "worker")) { - // Check OStatus conversations - proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_mentions"); + // Check OStatus conversations + proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_mentions"); - // Check every conversation - proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_conversations"); + // Check every conversation + proc_run(PRIORITY_MEDIUM, "include/cronjobs.php", "ostatus_conversations"); - // Call possible post update functions - proc_run(PRIORITY_LOW, "include/cronjobs.php", "post_update"); + // Call possible post update functions + proc_run(PRIORITY_LOW, "include/cronjobs.php", "post_update"); - // update nodeinfo data - proc_run(PRIORITY_LOW, "include/cronjobs.php", "nodeinfo"); - } else { - // Check OStatus conversations - // Check only conversations with mentions (for a longer time) - ostatus::check_conversations(true); - - // Check every conversation - ostatus::check_conversations(false); - - // Call possible post update functions - // see include/post_update.php for more details - post_update(); - - // update nodeinfo data - nodeinfo_cron(); - } + // update nodeinfo data + proc_run(PRIORITY_LOW, "include/cronjobs.php", "nodeinfo"); // once daily run birthday_updates and then expire in background @@ -123,6 +68,8 @@ function cron_run(&$argv, &$argc){ update_contact_birthdays(); + proc_run(PRIORITY_LOW, "include/discover_poco.php", "update_server"); + proc_run(PRIORITY_LOW, "include/discover_poco.php", "suggestions"); set_config('system','last_expire_day',$d2); @@ -173,8 +120,8 @@ function cron_update_photo_albums() { function cron_expire_and_remove_users() { // expire any expired accounts q("UPDATE user SET `account_expired` = 1 where `account_expired` = 0 - AND `account_expires_on` != '0000-00-00 00:00:00' - AND `account_expires_on` < UTC_TIMESTAMP() "); + AND `account_expires_on` > '%s' + AND `account_expires_on` < UTC_TIMESTAMP()", dbesc(NULL_DATE)); // delete user and contact records for recently removed accounts $r = q("SELECT * FROM `user` WHERE `account_removed` AND `account_expires_on` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); @@ -213,14 +160,6 @@ function cron_poll_contacts($argc, $argv) { $force = true; } - $interval = intval(get_config('system','poll_interval')); - if (!$interval) - $interval = ((get_config('system','delivery_interval') === false) ? 3 : intval(get_config('system','delivery_interval'))); - - // If we are using the worker we don't need a delivery interval - if (get_config("system", "worker")) - $interval = false; - $sql_extra = (($manual_id) ? " AND `id` = $manual_id " : ""); reload_plugins(); @@ -275,13 +214,15 @@ function cron_poll_contacts($argc, $argv) { $xml = false; - if($manual_id) - $contact['last-update'] = '0000-00-00 00:00:00'; + if ($manual_id) { + $contact['last-update'] = NULL_DATE; + } - if(in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) + if (in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) { $contact['priority'] = 2; + } - if($contact['subhub'] AND in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) { + if ($contact['subhub'] AND in_array($contact['network'], array(NETWORK_DFRN, NETWORK_ZOT, NETWORK_OSTATUS))) { // We should be getting everything via a hub. But just to be sure, let's check once a day. // (You can make this more or less frequent if desired by setting 'pushpoll_frequency' appropriately) // This also lets us update our subscription to the hub, and add or replace hubs in case it @@ -335,9 +276,6 @@ function cron_poll_contacts($argc, $argv) { } else { proc_run(PRIORITY_LOW, 'include/onepoll.php', $contact['id']); } - - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); } } } @@ -488,8 +426,3 @@ function cron_repair_database() { /// - remove children when parent got lost /// - set contact-id in item when not present } - -if (array_search(__file__,get_included_files())===0){ - cron_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/cronhooks.php b/include/cronhooks.php index 72b86be427..bea0f6a198 100644 --- a/include/cronhooks.php +++ b/include/cronhooks.php @@ -2,37 +2,11 @@ use \Friendica\Core\Config; -require_once("boot.php"); - function cronhooks_run(&$argv, &$argc){ - global $a, $db; + global $a; - if(is_null($a)) { - $a = new App; - } - - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/session.php'); require_once('include/datetime.php'); - Config::load(); - - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - if ($a->maxload_reached()) - return; - if (App::is_already_running('cronhooks', 'include/cronhooks.php', 1140)) - return; - } - - load_hooks(); - if (($argc == 2) AND is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) { foreach ($a->hooks["cron"] as $hook) if ($hook[1] == $argv[1]) { @@ -42,7 +16,7 @@ function cronhooks_run(&$argv, &$argc){ return; } - $last = get_config('system','last_cronhook'); + $last = get_config('system', 'last_cronhook'); $poll_interval = intval(get_config('system','cronhook_interval')); if(! $poll_interval) @@ -62,22 +36,16 @@ function cronhooks_run(&$argv, &$argc){ $d = datetime_convert(); - if (get_config("system", "worker") AND is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) { + if (is_array($a->hooks) AND array_key_exists("cron", $a->hooks)) { foreach ($a->hooks["cron"] as $hook) { logger("Calling cronhooks for '".$hook[1]."'", LOGGER_DEBUG); proc_run(PRIORITY_MEDIUM, "include/cronhooks.php", $hook[1]); } - } else - call_hooks('cron', $d); + } logger('cronhooks: end'); - set_config('system','last_cronhook', time()); + set_config('system', 'last_cronhook', time()); return; } - -if (array_search(__file__,get_included_files())===0){ - cronhooks_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/cronjobs.php b/include/cronjobs.php index f0a56370b8..5cc2bf1323 100644 --- a/include/cronjobs.php +++ b/include/cronjobs.php @@ -1,44 +1,14 @@ set_baseurl(get_config('system','url')); - // No parameter set? So return if ($argc <= 1) return; @@ -71,8 +41,3 @@ function cronjobs_run(&$argv, &$argc){ return; } - -if (array_search(__file__,get_included_files())===0){ - cronjobs_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/datetime.php b/include/datetime.php index 8d4961cd7c..9e1d4b55c9 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -339,7 +339,7 @@ function relative_date($posted_date, $format = null) { $abs = strtotime($localtime); - if (is_null($posted_date) || $posted_date === '0000-00-00 00:00:00' || $abs === False) { + if (is_null($posted_date) || $posted_date <= NULL_DATE || $abs === False) { return t('never'); } diff --git a/include/dba.php b/include/dba.php index 8e2d18db60..62728acaed 100644 --- a/include/dba.php +++ b/include/dba.php @@ -1,17 +1,5 @@ error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server); + $this->error = sprintf(t('Cannot locate DNS info for database server \'%s\''), $server); $this->connected = false; $this->db = null; return; @@ -61,37 +48,52 @@ class dba { } } - if (class_exists('mysqli')) { - $this->db = @new mysqli($server,$user,$pass,$db); - if (! mysqli_connect_errno()) { + if (class_exists('\PDO') && in_array('mysql', PDO::getAvailableDrivers())) { + $this->driver = 'pdo'; + $connect = "mysql:host=".$server.";dbname=".$db; + if (isset($a->config["system"]["db_charset"])) { + $connect .= ";charset=".$a->config["system"]["db_charset"]; + } + $this->db = @new PDO($connect, $user, $pass); + if (!$this->db->errorCode()) { $this->connected = true; } - if (isset($a->config["system"]["db_charset"])) { - $this->db->set_charset($a->config["system"]["db_charset"]); + } elseif (class_exists('mysqli')) { + $this->driver = 'mysqli'; + $this->db = @new mysqli($server,$user,$pass,$db); + if (!mysqli_connect_errno()) { + $this->connected = true; + + if (isset($a->config["system"]["db_charset"])) { + $this->db->set_charset($a->config["system"]["db_charset"]); + } } - } else { - $this->mysqli = false; + } elseif (function_exists('mysql_connect')) { + $this->driver = 'mysql'; $this->db = mysql_connect($server,$user,$pass); if ($this->db && mysql_select_db($db,$this->db)) { $this->connected = true; + + if (isset($a->config["system"]["db_charset"])) { + mysql_set_charset($a->config["system"]["db_charset"], $this->db); + } + } + } else { + // No suitable SQL driver was found. + if (!$install) { + system_unavailable(); } - if (isset($a->config["system"]["db_charset"])) - mysql_set_charset($a->config["system"]["db_charset"], $this->db); } + if (!$this->connected) { $this->db = null; if (!$install) { system_unavailable(); } } - $a->save_timestamp($stamp1, "network"); } - public function getdb() { - return $this->db; - } - /** * @brief Returns the MySQL server version string * @@ -101,12 +103,18 @@ class dba { * @return string */ public function server_info() { - if ($this->mysqli) { - $return = $this->db->server_info; - } else { - $return = mysql_get_server_info($this->db); + switch ($this->driver) { + case 'pdo': + $version = $this->db->getAttribute(PDO::ATTR_SERVER_VERSION); + break; + case 'mysqli': + $version = $this->db->server_info; + break; + case 'mysql': + $version = mysql_get_server_info($this->db); + break; } - return $return; + return $version; } /** @@ -130,12 +138,18 @@ class dba { return 0; } - if ($this->mysqli) { - $return = $this->result->num_rows; - } else { - $return = mysql_num_rows($this->result); + switch ($this->driver) { + case 'pdo': + $rows = $this->result->rowCount(); + break; + case 'mysqli': + $rows = $this->result->num_rows; + break; + case 'mysql': + $rows = mysql_num_rows($this->result); + break; } - return $return; + return $rows; } /** @@ -172,8 +186,9 @@ class dba { if ((intval($a->config["system"]["db_loglimit_index"]) > 0)) { $log = (in_array($row['key'], $watchlist) AND ($row['rows'] >= intval($a->config["system"]["db_loglimit_index"]))); - } else + } else { $log = false; + } if ((intval($a->config["system"]["db_loglimit_index_high"]) > 0) AND ($row['rows'] >= intval($a->config["system"]["db_loglimit_index_high"]))) { $log = true; @@ -203,13 +218,7 @@ class dba { $this->error = ''; - // Check the connection (This can reconnect the connection - if configured) - if ($this->mysqli) { - $connected = $this->db->ping(); - } else { - $connected = mysql_ping($this->db); - } - $connstr = ($connected ? "Connected" : "Disonnected"); + $connstr = ($this->connected() ? "Connected" : "Disonnected"); $stamp1 = microtime(true); @@ -219,10 +228,22 @@ class dba { $sql = "/*".$a->callstack()." */ ".$sql; } - if ($this->mysqli) { - $result = @$this->db->query($sql); - } else { - $result = @mysql_query($sql,$this->db); + $columns = 0; + + switch ($this->driver) { + case 'pdo': + $result = @$this->db->query($sql); + // Is used to separate between queries that returning data - or not + if (!is_bool($result)) { + $columns = $result->columnCount(); + } + break; + case 'mysqli': + $result = @$this->db->query($sql); + break; + case 'mysql': + $result = @mysql_query($sql,$this->db); + break; } $stamp2 = microtime(true); $duration = (float)($stamp2-$stamp1); @@ -243,16 +264,27 @@ class dba { } } - if ($this->mysqli) { - if ($this->db->errno) { - $this->error = $this->db->error; - $this->errorno = $this->db->errno; - } - } elseif (mysql_errno($this->db)) { - $this->error = mysql_error($this->db); - $this->errorno = mysql_errno($this->db); + switch ($this->driver) { + case 'pdo': + $errorInfo = $this->db->errorInfo(); + if ($errorInfo) { + $this->error = $errorInfo[2]; + $this->errorno = $errorInfo[1]; + } + break; + case 'mysqli': + if ($this->db->errno) { + $this->error = $this->db->error; + $this->errorno = $this->db->errno; + } + break; + case 'mysql': + if (mysql_errno($this->db)) { + $this->error = mysql_error($this->db); + $this->errorno = mysql_errno($this->db); + } + break; } - if (strlen($this->error)) { logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error); } @@ -266,10 +298,16 @@ class dba { } elseif ($result === true) { $mesg = 'true'; } else { - if ($this->mysqli) { - $mesg = $result->num_rows . ' results' . EOL; - } else { - $mesg = mysql_num_rows($result) . ' results' . EOL; + switch ($this->driver) { + case 'pdo': + $mesg = $result->rowCount().' results'.EOL; + break; + case 'mysqli': + $mesg = $result->num_rows.' results'.EOL; + break; + case 'mysql': + $mesg = mysql_num_rows($result).' results'.EOL; + break; } } @@ -293,7 +331,7 @@ class dba { } } - if (($result === true) || ($result === false)) { + if (is_bool($result)) { return $result; } if ($onlyquery) { @@ -302,18 +340,32 @@ class dba { } $r = array(); - if ($this->mysqli) { - if ($result->num_rows) { - while($x = $result->fetch_array(MYSQLI_ASSOC)) + switch ($this->driver) { + case 'pdo': + while ($x = $result->fetch(PDO::FETCH_ASSOC)) { $r[] = $x; + } + $result->closeCursor(); + break; + case 'mysqli': + while ($x = $result->fetch_array(MYSQLI_ASSOC)) { + $r[] = $x; + } $result->free_result(); - } - } else { - if (mysql_num_rows($result)) { - while($x = mysql_fetch_array($result, MYSQL_ASSOC)) + break; + case 'mysql': + while ($x = mysql_fetch_array($result, MYSQL_ASSOC)) { $r[] = $x; + } mysql_free_result($result); - } + break; + } + + // PDO doesn't return "true" on successful operations - like mysqli does + // Emulate this behaviour by checking if the query returned data and had columns + // This should be reliable enough + if (($this->driver == 'pdo') AND (count($r) == 0) AND ($columns == 0)) { + return true; } //$a->save_timestamp($stamp1, "database"); @@ -328,12 +380,16 @@ class dba { $x = false; if ($this->result) { - if ($this->mysqli) { - if ($this->result->num_rows) + switch ($this->driver) { + case 'pdo': + $x = $this->result->fetch(PDO::FETCH_ASSOC); + break; + case 'mysqli': $x = $this->result->fetch_array(MYSQLI_ASSOC); - } else { - if (mysql_num_rows($this->result)) + break; + case 'mysql': $x = mysql_fetch_array($this->result, MYSQL_ASSOC); + break; } } return($x); @@ -341,10 +397,16 @@ class dba { public function qclose() { if ($this->result) { - if ($this->mysqli) { - $this->result->free_result(); - } else { - mysql_free_result($this->result); + switch ($this->driver) { + case 'pdo': + $this->result->closeCursor(); + break; + case 'mysqli': + $this->result->free_result(); + break; + case 'mysql': + mysql_free_result($this->result); + break; } } } @@ -355,35 +417,65 @@ class dba { public function escape($str) { if ($this->db && $this->connected) { - if ($this->mysqli) { - return @$this->db->real_escape_string($str); - } else { - return @mysql_real_escape_string($str,$this->db); + switch ($this->driver) { + case 'pdo': + return substr(@$this->db->quote($str, PDO::PARAM_STR), 1, -1); + case 'mysqli': + return @$this->db->real_escape_string($str); + case 'mysql': + return @mysql_real_escape_string($str,$this->db); } } } function connected() { - if ($this->mysqli) { - $connected = $this->db->ping(); - } else { - $connected = mysql_ping($this->db); + switch ($this->driver) { + case 'pdo': + // Not sure if this really is working like expected + $connected = ($this->db->getAttribute(PDO::ATTR_CONNECTION_STATUS) != ""); + break; + case 'mysqli': + $connected = $this->db->ping(); + break; + case 'mysql': + $connected = mysql_ping($this->db); + break; } return $connected; } + function insert_id() { + switch ($this->driver) { + case 'pdo': + $id = $this->db->lastInsertId(); + break; + case 'mysqli': + $id = $this->db->insert_id; + break; + case 'mysql': + $id = mysql_insert_id($this->db); + break; + } + return $id; + } + function __destruct() { if ($this->db) { - if ($this->mysqli) { - $this->db->close(); - } else { - mysql_close($this->db); + switch ($this->driver) { + case 'pdo': + $this->db = null; + break; + case 'mysqli': + $this->db->close(); + break; + case 'mysql': + mysql_close($this->db); + break; } } } -}} +} -if (! function_exists('printable')) { function printable($s) { $s = preg_replace("~([\x01-\x08\x0E-\x0F\x10-\x1F\x7F-\xFF])~",".", $s); $s = str_replace("\x00",'.',$s); @@ -391,37 +483,32 @@ function printable($s) { $s = escape_tags($s); } return $s; -}} +} // Procedural functions -if (! function_exists('dbg')) { function dbg($state) { global $db; + if ($db) { $db->dbg($state); } -}} +} -if (! function_exists('dbesc')) { function dbesc($str) { global $db; + if ($db && $db->connected) { return($db->escape($str)); } else { return(str_replace("'","\\'",$str)); } -}} - - +} // Function: q($sql,$args); // Description: execute SQL query with printf style args. // Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d", // 'user', 1); - -if (! function_exists('q')) { function q($sql) { - global $db; $args = func_get_args(); unset($args[0]); @@ -445,8 +532,7 @@ function q($sql) { */ logger('dba: no database: ' . print_r($args,true)); return false; - -}} +} /** * @brief Performs a query with "dirty reads" @@ -458,8 +544,8 @@ function q($sql) { * @return array Query array */ function qu($sql) { - global $db; + $args = func_get_args(); unset($args[0]); @@ -484,7 +570,6 @@ function qu($sql) { */ logger('dba: no database: ' . print_r($args,true)); return false; - } /** @@ -492,40 +577,31 @@ function qu($sql) { * Raw db query, no arguments * */ - -if (! function_exists('dbq')) { function dbq($sql) { - global $db; + if ($db && $db->connected) { $ret = $db->q($sql); } else { $ret = false; } return $ret; -}} - +} // Caller is responsible for ensuring that any integer arguments to // dbesc_array are actually integers and not malformed strings containing // SQL injection vectors. All integer array elements should be specifically // cast to int to avoid trouble. - - -if (! function_exists('dbesc_array_cb')) { function dbesc_array_cb(&$item, $key) { if (is_string($item)) $item = dbesc($item); -}} +} - -if (! function_exists('dbesc_array')) { function dbesc_array(&$arr) { if (is_array($arr) && count($arr)) { array_walk($arr,'dbesc_array_cb'); } -}} - +} function dba_timer() { return microtime(true); diff --git a/include/dbclean.php b/include/dbclean.php index 8408ad1882..bff4ff2a24 100644 --- a/include/dbclean.php +++ b/include/dbclean.php @@ -5,26 +5,8 @@ */ use \Friendica\Core\Config; -use \Friendica\Core\PConfig; - -require_once("boot.php"); function dbclean_run(&$argv, &$argc) { - global $a, $db; - - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - Config::load(); - if (!Config::get('system', 'dbclean', false)) { return; } @@ -35,7 +17,7 @@ function dbclean_run(&$argv, &$argc) { $stage = 0; } - if (Config::get("system", "worker") AND ($stage == 0)) { + if ($stage == 0) { proc_run(PRIORITY_LOW, 'include/dbclean.php', 1); proc_run(PRIORITY_LOW, 'include/dbclean.php', 2); proc_run(PRIORITY_LOW, 'include/dbclean.php', 3); @@ -56,12 +38,8 @@ function remove_orphans($stage = 0) { $count = 0; - // With activated worker we split the deletion in many small tasks - if (Config::get("system", "worker")) { - $limit = 1000; - } else { - $limit = 10000; - } + // We split the deletion in many small tasks + $limit = 1000; if (($stage == 1) OR ($stage == 0)) { logger("Deleting old global item entries from item table without user copy"); @@ -159,14 +137,9 @@ function remove_orphans($stage = 0) { } // Call it again if not all entries were purged - if (($stage != 0) AND ($count > 0) AND Config::get("system", "worker")) { + if (($stage != 0) AND ($count > 0)) { proc_run(PRIORITY_MEDIUM, 'include/dbclean.php'); } } - -if (array_search(__file__,get_included_files())===0){ - dbclean_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} ?> diff --git a/include/dbm.php b/include/dbm.php index fedc2e4fdb..d28d49d63b 100644 --- a/include/dbm.php +++ b/include/dbm.php @@ -96,17 +96,10 @@ class dbm { public static function date($date = 'now') { $timestamp = strtotime($date); - // Workaround for 3.5.1 - if ($timestamp < -62135596800) { - return '0000-00-00 00:00:00'; - } - - // The above will be removed in 3.5.2 - // The following will then be enabled // Don't allow lower date strings as '0001-01-01 00:00:00' - //if ($timestamp < -62135596800) { - // $timestamp = -62135596800; - //} + if ($timestamp < -62135596800) { + $timestamp = -62135596800; + } return date('Y-m-d H:i:s', $timestamp); } diff --git a/include/dbstructure.php b/include/dbstructure.php index 4ad54e6ba2..146baff549 100644 --- a/include/dbstructure.php +++ b/include/dbstructure.php @@ -144,7 +144,8 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { global $a, $db; if ($action) { - set_config('system', 'maintenance', 1); + Config::set('system', 'maintenance', 1); + Config::set('system', 'maintenance_reason', 'Database update'); } if (isset($a->config["system"]["db_charset"])) { @@ -361,8 +362,10 @@ function update_structure($verbose, $action, $tables=null, $definition=null) { } } - if ($action) - set_config('system', 'maintenance', 0); + if ($action) { + Config::set('system', 'maintenance', 0); + Config::set('system', 'maintenance_reason', ''); + } return $errors; } @@ -536,8 +539,8 @@ function db_definition($charset) { "filetype" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "filesize" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "data" => array("type" => "longblob", "not null" => "1"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "allow_cid" => array("type" => "mediumtext"), "allow_gid" => array("type" => "mediumtext"), "deny_cid" => array("type" => "mediumtext"), @@ -564,7 +567,7 @@ function db_definition($charset) { "k" => array("type" => "varbinary(255)", "not null" => "1", "primary" => "1"), "v" => array("type" => "mediumtext"), "expire_mode" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("k"), @@ -613,7 +616,7 @@ function db_definition($charset) { "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "remote_self" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "rel" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -651,14 +654,14 @@ function db_definition($charset) { "usehub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "subhub" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "hub-verify" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "last-update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "success_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "failure_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "name-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "uri-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "avatar-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "term-date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "last-item" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "last-update" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "success_update" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "failure_update" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "name-date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "uri-date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "avatar-date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "term-date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "last-item" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "priority" => array("type" => "tinyint(3)", "not null" => "1", "default" => "0"), "blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "readonly" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -703,8 +706,8 @@ function db_definition($charset) { "recips" => array("type" => "text"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "creator" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "subject" => array("type" => "text"), ), "indexes" => array( @@ -712,18 +715,6 @@ function db_definition($charset) { "uid" => array("uid"), ) ); - $database["deliverq"] = array( - "fields" => array( - "id" => array("type" => "int(10) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), - "cmd" => array("type" => "varbinary(32)", "not null" => "1", "default" => ""), - "item" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "contact" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - ), - "indexes" => array( - "PRIMARY" => array("id"), - "cmd_item_contact" => array("UNIQUE", "cmd", "item", "contact"), - ) - ); $database["event"] = array( "fields" => array( "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), @@ -731,10 +722,10 @@ function db_definition($charset) { "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "start" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "finish" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "start" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "finish" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "summary" => array("type" => "text"), "desc" => array("type" => "text"), "location" => array("type" => "text"), @@ -770,7 +761,7 @@ function db_definition($charset) { "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "alias" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "pubkey" => array("type" => "text"), - "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -811,7 +802,7 @@ function db_definition($charset) { "request" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "note" => array("type" => "text"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -838,10 +829,10 @@ function db_definition($charset) { "nurl" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "connect" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "updated" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), - "last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), - "last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "updated" => array("type" => "datetime", "default" => NULL_DATE), + "last_contact" => array("type" => "datetime", "default" => NULL_DATE), + "last_failure" => array("type" => "datetime", "default" => NULL_DATE), "location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "about" => array("type" => "text"), "keywords" => array("type" => "text"), @@ -875,7 +866,7 @@ function db_definition($charset) { "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "gcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "zcid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "updated" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "updated" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -923,10 +914,10 @@ function db_definition($charset) { "noscrape" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "platform" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "last_poco_query" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), - "last_contact" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), - "last_failure" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "last_poco_query" => array("type" => "datetime", "default" => NULL_DATE), + "last_contact" => array("type" => "datetime", "default" => NULL_DATE), + "last_failure" => array("type" => "datetime", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -956,7 +947,7 @@ function db_definition($charset) { "duplex" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "note" => array("type" => "text"), "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "datetime" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "datetime" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "blocked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "1"), "ignore" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), ), @@ -979,11 +970,11 @@ function db_definition($charset) { "parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "extid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "thr-parent" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "commented" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "received" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "changed" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "changed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "owner-id" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "owner-name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "owner-link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1082,7 +1073,7 @@ function db_definition($charset) { "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "name" => array("type" => "varchar(128)", "not null" => "1", "default" => ""), "locked" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), - "created" => array("type" => "datetime", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1106,7 +1097,7 @@ function db_definition($charset) { "unknown" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "parent-uri" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1130,7 +1121,7 @@ function db_definition($charset) { "action" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "movetofolder" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "pubmail" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), - "last_check" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "last_check" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1155,7 +1146,7 @@ function db_definition($charset) { "name" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "photo" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "msg" => array("type" => "mediumtext"), "uid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "link" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1191,7 +1182,7 @@ function db_definition($charset) { "fields" => array( "url" => array("type" => "varbinary(255)", "not null" => "1", "primary" => "1"), "content" => array("type" => "mediumtext"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("url"), @@ -1204,7 +1195,7 @@ function db_definition($charset) { "guessing" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"), "oembed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0", "primary" => "1"), "content" => array("type" => "mediumtext"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("url", "guessing", "oembed"), @@ -1231,8 +1222,8 @@ function db_definition($charset) { "contact-id" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), "guid" => array("type" => "varchar(64)", "not null" => "1", "default" => ""), "resource-id" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "title" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "desc" => array("type" => "text"), "album" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1294,7 +1285,7 @@ function db_definition($charset) { "fields" => array( "pid" => array("type" => "int(10) unsigned", "not null" => "1", "primary" => "1"), "command" => array("type" => "varbinary(32)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("pid"), @@ -1320,7 +1311,7 @@ function db_definition($charset) { "gender" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "marital" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "with" => array("type" => "text"), - "howlong" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "howlong" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "sexual" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "politic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "religion" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1372,7 +1363,7 @@ function db_definition($charset) { "topic" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "nickname" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "push" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "last_update" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "last_update" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "secret" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), ), "indexes" => array( @@ -1384,8 +1375,8 @@ function db_definition($charset) { "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "cid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "network" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "last" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "last" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "content" => array("type" => "mediumtext"), "batch" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), ), @@ -1402,7 +1393,7 @@ function db_definition($charset) { "fields" => array( "id" => array("type" => "int(11) unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "hash" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "uid" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), "password" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "language" => array("type" => "varchar(16)", "not null" => "1", "default" => ""), @@ -1456,7 +1447,7 @@ function db_definition($charset) { "spam" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "ham" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), @@ -1475,8 +1466,8 @@ function db_definition($charset) { "term" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "url" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "guid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "received" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "global" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "aid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), "uid" => array("type" => "int(10) unsigned", "not null" => "1", "default" => "0"), @@ -1497,11 +1488,11 @@ function db_definition($charset) { "gcontact-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), "owner-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), "author-id" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "edited" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "commented" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "received" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "changed" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "edited" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "commented" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "received" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "changed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "wall" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "private" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "pubmail" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), @@ -1553,8 +1544,8 @@ function db_definition($charset) { "openid" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "timezone" => array("type" => "varchar(128)", "not null" => "1", "default" => ""), "language" => array("type" => "varchar(32)", "not null" => "1", "default" => "en"), - "register_date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "login_date" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "register_date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "login_date" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "default-location" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), "allow_location" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "theme" => array("type" => "varchar(255)", "not null" => "1", "default" => ""), @@ -1578,8 +1569,8 @@ function db_definition($charset) { "expire" => array("type" => "int(11) unsigned", "not null" => "1", "default" => "0"), "account_removed" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), "account_expired" => array("type" => "tinyint(1)", "not null" => "1", "default" => "0"), - "account_expires_on" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), - "expire_notification_sent" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "account_expires_on" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), + "expire_notification_sent" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "service_class" => array("type" => "varchar(32)", "not null" => "1", "default" => ""), "def_gid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), "allow_cid" => array("type" => "mediumtext"), @@ -1608,9 +1599,9 @@ function db_definition($charset) { "id" => array("type" => "int(11)", "not null" => "1", "extra" => "auto_increment", "primary" => "1"), "parameter" => array("type" => "text"), "priority" => array("type" => "tinyint(3) unsigned", "not null" => "1", "default" => "0"), - "created" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "created" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), "pid" => array("type" => "int(11)", "not null" => "1", "default" => "0"), - "executed" => array("type" => "datetime", "not null" => "1", "default" => "0000-00-00 00:00:00"), + "executed" => array("type" => "datetime", "not null" => "1", "default" => NULL_DATE), ), "indexes" => array( "PRIMARY" => array("id"), diff --git a/include/dbupdate.php b/include/dbupdate.php index 14709208fa..725eca7370 100644 --- a/include/dbupdate.php +++ b/include/dbupdate.php @@ -2,32 +2,12 @@ use \Friendica\Core\Config; -require_once("boot.php"); - function dbupdate_run(&$argv, &$argc) { - global $a, $db; - - if(is_null($a)){ - $a = new App; - } - - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - Config::load(); + global $a; // We are deleting the latest dbupdate entry. // This is done to avoid endless loops because the update was interupted. - Config::delete('database','dbupdate_'.DB_UPDATE_VERSION); + Config::delete('database', 'dbupdate_'.DB_UPDATE_VERSION); update_db($a); } - -if (array_search(__file__,get_included_files())===0){ - dbupdate_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/delivery.php b/include/delivery.php index 8ccb19cedc..faa1cad674 100644 --- a/include/delivery.php +++ b/include/delivery.php @@ -2,44 +2,25 @@ use \Friendica\Core\Config; -require_once("boot.php"); require_once('include/queue_fn.php'); require_once('include/html2plain.php'); -require_once("include/Scrape.php"); +require_once('include/Scrape.php'); require_once('include/diaspora.php'); -require_once("include/ostatus.php"); -require_once("include/dfrn.php"); +require_once('include/ostatus.php'); +require_once('include/dfrn.php'); function delivery_run(&$argv, &$argc){ - global $a, $db; + global $a; - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - require_once("include/session.php"); - require_once("include/datetime.php"); + require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/bbcode.php'); require_once('include/email.php'); - Config::load(); - - load_hooks(); - if ($argc < 3) { return; } - $a->set_baseurl(get_config('system','url')); - logger('delivery: invoked: '. print_r($argv,true), LOGGER_DEBUG); $cmd = $argv[1]; @@ -49,30 +30,6 @@ function delivery_run(&$argv, &$argc){ $contact_id = intval($argv[$x]); - /// @todo When switching completely to the worker we won't need this anymore - // Some other process may have delivered this item already. - - $r = q("SELECT * FROM `deliverq` WHERE `cmd` = '%s' AND `item` = %d AND `contact` = %d LIMIT 1", - dbesc($cmd), - dbesc($item_id), - dbesc($contact_id) - ); - if (!dbm::is_result($r)) { - continue; - } - - if ($a->maxload_reached()) { - return; - } - - // It's ours to deliver. Remove it from the queue. - - q("DELETE FROM `deliverq` WHERE `cmd` = '%s' AND `item` = %d AND `contact` = %d", - dbesc($cmd), - dbesc($item_id), - dbesc($contact_id) - ); - if (!$item_id || !$contact_id) { continue; } @@ -577,8 +534,3 @@ function delivery_run(&$argv, &$argc){ return; } - -if (array_search(__file__,get_included_files())===0){ - delivery_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/dfrn.php b/include/dfrn.php index 39372aef14..25f8c9358e 100644 --- a/include/dfrn.php +++ b/include/dfrn.php @@ -1094,7 +1094,7 @@ class dfrn { return 3; } - if($contact['term-date'] != '0000-00-00 00:00:00') { + if ($contact['term-date'] > NULL_DATE) { logger("dfrn_deliver: $url back from the dead - removing mark for death"); require_once('include/Contact.php'); unmark_for_death($contact); diff --git a/include/directory.php b/include/directory.php index 2ca367d369..088adbe789 100644 --- a/include/directory.php +++ b/include/directory.php @@ -1,36 +1,16 @@ set_baseurl(get_config('system','url')); - - $dir = get_config('system','directory'); - - if(! strlen($dir)) + if (!strlen($dir)) { return; + } $dir .= "/submit"; @@ -39,13 +19,8 @@ function directory_run(&$argv, &$argc){ call_hooks('globaldir_update', $arr); logger('Updating directory: ' . $arr['url'], LOGGER_DEBUG); - if(strlen($arr['url'])) + if (strlen($arr['url'])) { fetch_url($dir . '?url=' . bin2hex($arr['url'])); - + } return; } - -if (array_search(__file__,get_included_files())===0){ - directory_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/discover_poco.php b/include/discover_poco.php index 10c741ae5f..f0bfb646bd 100644 --- a/include/discover_poco.php +++ b/include/discover_poco.php @@ -2,62 +2,64 @@ use \Friendica\Core\Config; -require_once("boot.php"); -require_once("include/socgraph.php"); +require_once('include/socgraph.php'); +require_once('include/datetime.php'); -function discover_poco_run(&$argv, &$argc){ - global $a, $db; +function discover_poco_run(&$argv, &$argc) { - if(is_null($a)) { - $a = new App; - } + /* + This function can be called in these ways: + - dirsearch : Searches for "search pattern" in the directory. "search pattern" is url encoded. + - checkcontact: Updates gcontact entries + - suggestions: Discover other servers for their contacts. + - server : Searches for the poco server list. "poco url" is base64 encoded. + - update_server: Frequently check the first 250 servers for vitality. + */ - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/session.php'); - require_once('include/datetime.php'); - - Config::load(); - - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") - if ($a->maxload_reached()) - return; - - if(($argc > 2) && ($argv[1] == "dirsearch")) { + if (($argc > 2) && ($argv[1] == "dirsearch")) { $search = urldecode($argv[2]); $mode = 1; - } elseif(($argc == 2) && ($argv[1] == "checkcontact")) { + } elseif (($argc == 2) && ($argv[1] == "checkcontact")) { $mode = 2; - } elseif(($argc == 2) && ($argv[1] == "suggestions")) { + } elseif (($argc == 2) && ($argv[1] == "suggestions")) { $mode = 3; + } elseif (($argc == 3) && ($argv[1] == "server")) { + $mode = 4; + } elseif (($argc == 2) && ($argv[1] == "update_server")) { + $mode = 5; } elseif ($argc == 1) { $search = ""; $mode = 0; - } else + } else { die("Unknown or missing parameter ".$argv[1]."\n"); - - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") - if (App::is_already_running('discover_poco'.$mode.urlencode($search), 'include/discover_poco.php', 1140)) - return; - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); + } logger('start '.$search); - if ($mode==3) + if ($mode == 5) { + update_server(); + } elseif ($mode == 4) { + $server_url = base64_decode($argv[2]); + if ($server_url == "") { + return; + } + $server_url = filter_var($server_url, FILTER_SANITIZE_URL); + if (substr(normalise_link($server_url), 0, 7) != "http://") { + return; + } + $result = "Checking server ".$server_url." - "; + $ret = poco_check_server($server_url); + if ($ret) { + $result .= "success"; + } else { + $result .= "failed"; + } + logger($result, LOGGER_DEBUG); + } elseif ($mode == 3) { update_suggestions(); - elseif (($mode == 2) AND get_config('system','poco_completion')) + } elseif (($mode == 2) AND get_config('system','poco_completion')) { discover_users(); - elseif (($mode == 1) AND ($search != "") and get_config('system','poco_local_search')) { + } elseif (($mode == 1) AND ($search != "") and get_config('system','poco_local_search')) { discover_directory($search); gs_search_user($search); } elseif (($mode == 0) AND ($search == "") and (get_config('system','poco_discovery') > 0)) { @@ -74,6 +76,33 @@ function discover_poco_run(&$argv, &$argc){ return; } +/** + * @brief Updates the first 250 servers + * + */ +function update_server() { + $r = q("SELECT `url`, `created`, `last_failure`, `last_contact` FROM `gserver` ORDER BY rand()"); + + if (!dbm::is_result($r)) { + return; + } + + $updated = 0; + + foreach ($r AS $server) { + if (!poco_do_update($server["created"], "", $server["last_failure"], $server["last_contact"])) { + continue; + } + logger('Update server status for server '.$server["url"], LOGGER_DEBUG); + + proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode($server["url"])); + + if (++$updated > 250) { + return; + } + } +} + function discover_users() { logger("Discover users", LOGGER_DEBUG); @@ -84,9 +113,9 @@ function discover_users() { dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_FEED)); - if (!$users) + if (!$users) { return; - + } $checked = 0; foreach ($users AS $user) { @@ -111,27 +140,29 @@ function discover_users() { continue; } - if ($user["server_url"] != "") + if ($user["server_url"] != "") { $server_url = $user["server_url"]; - else + } else { $server_url = poco_detect_server($user["url"]); - + } if (($server_url == "") OR poco_check_server($server_url, $gcontacts[0]["network"])) { logger('Check user '.$user["url"]); poco_last_updated($user["url"], true); - if (++$checked > 100) + if (++$checked > 100) { return; - } else + } + } else { q("UPDATE `gcontact` SET `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc(normalise_link($user["url"]))); + } } } function discover_directory($search) { $data = Cache::get("dirsearch:".$search); - if (!is_null($data)){ + if (!is_null($data)) { // Only search for the same item every 24 hours if (time() < $data + (60 * 60 * 24)) { logger("Already searched for ".$search." in the last 24 hours", LOGGER_DEBUG); @@ -142,7 +173,7 @@ function discover_directory($search) { $x = fetch_url(get_server()."/lsearch?p=1&n=500&search=".urlencode($search)); $j = json_decode($x); - if(count($j->results)) + if (count($j->results)) { foreach($j->results as $jj) { // Check if the contact already exists $exists = q("SELECT `id`, `last_contact`, `last_failure`, `updated` FROM `gcontact` WHERE `nurl` = '%s'", normalise_link($jj->url)); @@ -150,32 +181,33 @@ function discover_directory($search) { logger("Profile ".$jj->url." already exists (".$search.")", LOGGER_DEBUG); if (($exists[0]["last_contact"] < $exists[0]["last_failure"]) AND - ($exists[0]["updated"] < $exists[0]["last_failure"])) + ($exists[0]["updated"] < $exists[0]["last_failure"])) { continue; - + } // Update the contact poco_last_updated($jj->url); continue; } - // Harcoded paths aren't so good. But in this case it is okay. - // First: We only will get Friendica contacts (which always are using this url schema) - // Second: There will be no further problems if we are doing a mistake - $server_url = preg_replace("=(https?://)(.*)/profile/(.*)=ism", "$1$2", $jj->url); - if ($server_url != $jj->url) + $server_url = poco_detect_server($jj->url); + if ($server_url != '') { if (!poco_check_server($server_url)) { logger("Friendica server ".$server_url." doesn't answer.", LOGGER_DEBUG); continue; } - logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG); + logger("Friendica server ".$server_url." seems to be okay.", LOGGER_DEBUG); + } - logger("Check if profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG); $data = probe_url($jj->url); if ($data["network"] == NETWORK_DFRN) { + logger("Profile ".$jj->url." is reachable (".$search.")", LOGGER_DEBUG); logger("Add profile ".$jj->url." to local directory (".$search.")", LOGGER_DEBUG); poco_check($data["url"], $data["name"], $data["network"], $data["photo"], "", "", "", $jj->tags, $data["addr"], "", 0); + } else { + logger("Profile ".$jj->url." is not responding or no Friendica contact - but network ".$data["network"], LOGGER_DEBUG); } } + } Cache::set("dirsearch:".$search, time(), CACHE_DAY); } @@ -195,14 +227,14 @@ function gs_search_user($search) { $url = "http://gstools.org/api/users_search/".urlencode($search); $result = z_fetch_url($url); - if (!$result["success"]) + if (!$result["success"]) { return false; - + } $contacts = json_decode($result["body"]); - if ($contacts->status == 'ERROR') + if ($contacts->status == 'ERROR') { return false; - + } foreach($contacts->data AS $user) { $contact = probe_url($user->site_address."/".$user->name); if ($contact["network"] != NETWORK_PHANTOM) { @@ -211,9 +243,3 @@ function gs_search_user($search) { } } } - - -if (array_search(__file__,get_included_files())===0){ - discover_poco_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/expire.php b/include/expire.php index 855d7fb5e4..35b109a50a 100644 --- a/include/expire.php +++ b/include/expire.php @@ -2,32 +2,13 @@ use \Friendica\Core\Config; -require_once("boot.php"); - function expire_run(&$argv, &$argc){ - global $a, $db; + global $a; - if(is_null($a)) { - $a = new App; - } - - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/session.php'); require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/Contact.php'); - Config::load(); - - $a->set_baseurl(get_config('system','url')); - - // physically remove anything that has been deleted for more than two months $r = q("delete from item where deleted = 1 and changed < UTC_TIMESTAMP() - INTERVAL 60 DAY"); @@ -53,8 +34,3 @@ function expire_run(&$argv, &$argc){ return; } - -if (array_search(__file__,get_included_files())===0){ - expire_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/gprobe.php b/include/gprobe.php index 4407fa6d6c..719cfce486 100644 --- a/include/gprobe.php +++ b/include/gprobe.php @@ -2,36 +2,14 @@ use \Friendica\Core\Config; -require_once("boot.php"); require_once('include/Scrape.php'); require_once('include/socgraph.php'); +require_once('include/datetime.php'); function gprobe_run(&$argv, &$argc){ - global $a, $db; - - if(is_null($a)) { - $a = new App; - } - - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/session.php'); - require_once('include/datetime.php'); - - Config::load(); - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); - - if($argc != 2) + if ($argc != 2) { return; - + } $url = hex2bin($argv[1]); $r = q("SELECT `id`, `url`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 1", @@ -74,8 +52,3 @@ function gprobe_run(&$argv, &$argc){ logger("gprobe end for ".normalise_link($url), LOGGER_DEBUG); return; } - -if (array_search(__file__,get_included_files())===0){ - gprobe_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/identity.php b/include/identity.php index ab80c71cea..8138e9b046 100644 --- a/include/identity.php +++ b/include/identity.php @@ -652,7 +652,7 @@ function advanced_profile(App $a) { $profile['marital']['with'] = $a->profile['with']; } - if (strlen($a->profile['howlong']) && $a->profile['howlong'] !== '0000-00-00 00:00:00') { + if (strlen($a->profile['howlong']) && $a->profile['howlong'] >= NULL_DATE) { $profile['howlong'] = relative_date($a->profile['howlong'], t('for %1$d %2$s')); } diff --git a/include/lock.php b/include/lock.php index b3d488a357..a48b0ad342 100644 --- a/include/lock.php +++ b/include/lock.php @@ -68,7 +68,8 @@ function block_on_function_lock($fn_name, $wait_sec = 2, $timeout = 30) { if(! function_exists('unlock_function')) { function unlock_function($fn_name) { - $r = q("UPDATE `locks` SET `locked` = 0, `created` = '0000-00-00 00:00:00' WHERE `name` = '%s'", + $r = q("UPDATE `locks` SET `locked` = 0, `created` = '%s' WHERE `name` = '%s'", + dbesc(NULL_DATE), dbesc($fn_name) ); diff --git a/include/network.php b/include/network.php index b0e71fab7f..f9d35c52c3 100644 --- a/include/network.php +++ b/include/network.php @@ -72,8 +72,9 @@ function z_fetch_url($url,$binary = false, &$redirects = 0, $opts=array()) { $a = get_app(); $ch = @curl_init($url); - if(($redirects > 8) || (! $ch)) - return false; + if(($redirects > 8) || (! $ch)) { + return $ret; + } @curl_setopt($ch, CURLOPT_HEADER, true); diff --git a/include/notifier.php b/include/notifier.php index 24830a11ab..e3d7d10d6b 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -2,12 +2,11 @@ use \Friendica\Core\Config; -require_once("boot.php"); require_once('include/queue_fn.php'); require_once('include/html2plain.php'); -require_once("include/Scrape.php"); +require_once('include/Scrape.php'); require_once('include/diaspora.php'); -require_once("include/ostatus.php"); +require_once('include/ostatus.php'); require_once('include/salmon.php'); /* @@ -44,35 +43,17 @@ require_once('include/salmon.php'); function notifier_run(&$argv, &$argc){ - global $a, $db; + global $a; - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - require_once("include/session.php"); - require_once("include/datetime.php"); + require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/bbcode.php'); require_once('include/email.php'); - Config::load(); - - load_hooks(); - if ($argc < 3) { return; } - $a->set_baseurl(get_config('system','url')); - logger('notifier: invoked: ' . print_r($argv,true), LOGGER_DEBUG); $cmd = $argv[1]; @@ -490,79 +471,22 @@ function notifier_run(&$argv, &$argc){ if ($relocate) { $r = $recipients_relocate; } else { - $r = q("SELECT * FROM `contact` WHERE `id` IN (%s) AND NOT `blocked` AND NOT `pending` AND NOT `archive`".$sql_extra, + $r = q("SELECT `id`, `url`, `network`, `self` FROM `contact` + WHERE `id` IN (%s) AND NOT `blocked` AND NOT `pending` AND NOT `archive`".$sql_extra, dbesc($recip_str) ); } - $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval'))); - - // If we are using the worker we don't need a delivery interval - if (get_config("system", "worker")) { - $interval = false; - } // delivery loop if (dbm::is_result($r)) { foreach ($r as $contact) { - if (!$contact['self']) { - if (($contact['network'] === NETWORK_DIASPORA) && ($public_message)) { - continue; - } - q("INSERT INTO `deliverq` (`cmd`,`item`,`contact`) VALUES ('%s', %d, %d)", - dbesc($cmd), - intval($item_id), - intval($contact['id']) - ); - } - } - - - // This controls the number of deliveries to execute with each separate delivery process. - // By default we'll perform one delivery per process. Assuming a hostile shared hosting - // provider, this provides the greatest chance of deliveries if processes start getting - // killed. We can also space them out with the delivery_interval to also help avoid them - // getting whacked. - - // If $deliveries_per_process > 1, we will chain this number of multiple deliveries - // together into a single process. This will reduce the overall number of processes - // spawned for each delivery, but they will run longer. - - // When using the workerqueue, we don't need this functionality. - - $deliveries_per_process = intval(get_config('system','delivery_batch_count')); - if (($deliveries_per_process <= 0) OR get_config("system", "worker")) { - $deliveries_per_process = 1; - } - - $this_batch = array(); - - for ($x = 0; $x < count($r); $x ++) { - $contact = $r[$x]; - if ($contact['self']) { continue; } logger("Deliver ".$target_item["guid"]." to ".$contact['url']." via network ".$contact['network'], LOGGER_DEBUG); - // potentially more than one recipient. Start a new process and space them out a bit. - // we will deliver single recipient types of message and email recipients here. - - $this_batch[] = $contact['id']; - - if (count($this_batch) >= $deliveries_per_process) { - proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$this_batch); - $this_batch = array(); - if ($interval) { - @time_sleep_until(microtime(true) + (float) $interval); - } - } - continue; - } - - // be sure to pick up any stragglers - if (count($this_batch)) { - proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$this_batch); + proc_run(PRIORITY_HIGH,'include/delivery.php', $cmd, $item_id, $contact['id']); } } @@ -614,18 +538,6 @@ function notifier_run(&$argv, &$argc){ if (dbm::is_result($r)) { logger('pubdeliver '.$target_item["guid"].': '.print_r($r,true), LOGGER_DEBUG); - // throw everything into the queue in case we get killed - - foreach ($r as $rr) { - if ((! $mail) && (! $fsuggest) && (! $followup)) { - q("INSERT INTO `deliverq` (`cmd`,`item`,`contact`) VALUES ('%s', %d, %d) - ON DUPLICATE KEY UPDATE `cmd` = '%s', `item` = %d, `contact` = %d", - dbesc($cmd), intval($item_id), intval($rr['id']), - dbesc($cmd), intval($item_id), intval($rr['id']) - ); - } - } - foreach ($r as $rr) { // except for Diaspora batch jobs @@ -639,9 +551,6 @@ function notifier_run(&$argv, &$argc){ if ((! $mail) && (! $fsuggest) && (! $followup)) { logger('notifier: delivery agent: '.$rr['name'].' '.$rr['id'].' '.$rr['network'].' '.$target_item["guid"]); proc_run(PRIORITY_HIGH,'include/delivery.php',$cmd,$item_id,$rr['id']); - if ($interval) { - @time_sleep_until(microtime(true) + (float) $interval); - } } } } @@ -694,9 +603,3 @@ function notifier_run(&$argv, &$argc){ return; } - - -if (array_search(__file__,get_included_files())===0){ - notifier_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/onepoll.php b/include/onepoll.php index 552fea36fa..5227b61a1a 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -2,8 +2,7 @@ use \Friendica\Core\Config; -require_once("boot.php"); -require_once("include/follow.php"); +require_once('include/follow.php'); function RemoveReply($subject) { while (in_array(strtolower(substr($subject, 0, 3)), array("re:", "aw:"))) @@ -13,20 +12,8 @@ function RemoveReply($subject) { } function onepoll_run(&$argv, &$argc){ - global $a, $db; + global $a; - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/session.php'); require_once('include/datetime.php'); require_once('include/items.php'); require_once('include/Contact.php'); @@ -34,12 +21,6 @@ function onepoll_run(&$argv, &$argc){ require_once('include/socgraph.php'); require_once('include/queue_fn.php'); - Config::load(); - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); - logger('onepoll: start'); $manual_id = 0; @@ -61,13 +42,6 @@ function onepoll_run(&$argv, &$argc){ return; } - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - if (App::is_already_running('onepoll'.$contact_id, '', 540)) { - return; - } - } - $d = datetime_convert(); // Only poll from those with suitable relationships, @@ -159,7 +133,7 @@ function onepoll_run(&$argv, &$argc){ logger("onepoll: poll: ({$contact['id']}) IMPORTER: {$importer['name']}, CONTACT: {$contact['name']}"); - $last_update = (($contact['last-update'] === '0000-00-00 00:00:00') + $last_update = (($contact['last-update'] <= NULL_DATE) ? datetime_convert('UTC','UTC','now - 7 days', ATOM_TIME) : datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME) ); @@ -265,7 +239,7 @@ function onepoll_run(&$argv, &$argc){ intval($contact['id']) ); mark_for_death($contact); - } elseif ($contact['term-date'] != '0000-00-00 00:00:00') { + } elseif ($contact['term-date'] > NULL_DATE) { logger("poller: $url back from the dead - removing mark for death"); unmark_for_death($contact); } @@ -697,8 +671,3 @@ function onepoll_run(&$argv, &$argc){ return; } - -if (array_search(__file__,get_included_files())===0) { - onepoll_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/include/poller.php b/include/poller.php index 82befae518..5560b3340e 100644 --- a/include/poller.php +++ b/include/poller.php @@ -35,6 +35,10 @@ function poller_run($argv, $argc){ return; } + $a->set_baseurl(Config::get('system', 'url')); + + load_hooks(); + $a->start_process(); if (poller_max_connections_reached()) { @@ -353,18 +357,18 @@ function poller_max_connections_reached() { * */ function poller_kill_stale_workers() { - $r = q("SELECT `pid`, `executed`, `priority`, `parameter` FROM `workerqueue` WHERE `executed` != '0000-00-00 00:00:00'"); + $r = q("SELECT `pid`, `executed`, `priority`, `parameter` FROM `workerqueue` WHERE `executed` > '%s'", dbesc(NULL_DATE)); if (!dbm::is_result($r)) { // No processing here needed return; } - foreach($r AS $pid) - if (!posix_kill($pid["pid"], 0)) - q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `pid` = 0 WHERE `pid` = %d", - intval($pid["pid"])); - else { + foreach ($r AS $pid) { + if (!posix_kill($pid["pid"], 0)) { + q("UPDATE `workerqueue` SET `executed` = '%s', `pid` = 0 WHERE `pid` = %d", + dbesc(NULL_DATE), intval($pid["pid"])); + } else { // Kill long running processes // Check if the priority is in a valid range @@ -387,14 +391,17 @@ function poller_kill_stale_workers() { // We killed the stale process. // To avoid a blocking situation we reschedule the process at the beginning of the queue. // Additionally we are lowering the priority. - q("UPDATE `workerqueue` SET `executed` = '0000-00-00 00:00:00', `created` = '%s', + q("UPDATE `workerqueue` SET `executed` = '%s', `created` = '%s', `priority` = %d, `pid` = 0 WHERE `pid` = %d", + dbesc(NULL_DATE), dbesc(datetime_convert()), intval(PRIORITY_NEGLIGIBLE), intval($pid["pid"])); - } else + } else { logger("Worker process ".$pid["pid"]." (".implode(" ", $argv).") now runs for ".round($duration)." of ".$max_duration." allowed minutes. That's okay.", LOGGER_DEBUG); + } } + } } /** @@ -421,15 +428,15 @@ function poller_too_much_workers() { $slope = $maxworkers / pow($maxsysload, $exponent); $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent)); - $s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00'"); + $s = q("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE `executed` <= '%s'", dbesc(NULL_DATE)); $entries = $s[0]["total"]; if (Config::get("system", "worker_fastlane", false) AND ($queues > 0) AND ($entries > 0) AND ($active >= $queues)) { - $s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00' ORDER BY `priority` LIMIT 1"); + $s = q("SELECT `priority` FROM `workerqueue` WHERE `executed` <= '%s' ORDER BY `priority` LIMIT 1", dbesc(NULL_DATE)); $top_priority = $s[0]["priority"]; - $s = q("SELECT `id` FROM `workerqueue` WHERE `priority` <= %d AND `executed` != '0000-00-00 00:00:00' LIMIT 1", - intval($top_priority)); + $s = q("SELECT `id` FROM `workerqueue` WHERE `priority` <= %d AND `executed` > '%s' LIMIT 1", + intval($top_priority), dbesc(NULL_DATE)); $high_running = dbm::is_result($s); if (!$high_running AND ($top_priority > PRIORITY_UNDEFINED) AND ($top_priority < PRIORITY_NEGLIGIBLE)) { @@ -464,7 +471,7 @@ function poller_too_much_workers() { // Are there fewer workers running as possible? Then fork a new one. if (!Config::get("system", "worker_dont_fork") AND ($queues > ($active + 1)) AND ($entries > 1)) { logger("Active workers: ".$active."/".$queues." Fork a new worker.", LOGGER_DEBUG); - $args = array("php", "include/poller.php", "no_cron"); + $args = array("include/poller.php", "no_cron"); $a = get_app(); $a->proc_run($args); } @@ -549,21 +556,25 @@ function poller_worker_process() { if (poller_passing_slow($highest_priority)) { // Are there waiting processes with a higher priority than the currently highest? $r = q("SELECT * FROM `workerqueue` - WHERE `executed` = '0000-00-00 00:00:00' AND `priority` < %d - ORDER BY `priority`, `created` LIMIT 1", dbesc($highest_priority)); - if (dbm::is_result($r)) + WHERE `executed` <= '%s' AND `priority` < %d + ORDER BY `priority`, `created` LIMIT 1", + dbesc(NULL_DATE), + intval($highest_priority)); + if (dbm::is_result($r)) { return $r; - + } // Give slower processes some processing time $r = q("SELECT * FROM `workerqueue` - WHERE `executed` = '0000-00-00 00:00:00' AND `priority` > %d - ORDER BY `priority`, `created` LIMIT 1", dbesc($highest_priority)); + WHERE `executed` <= '%s' AND `priority` > %d + ORDER BY `priority`, `created` LIMIT 1", + dbesc(NULL_DATE), + intval($highest_priority)); } // If there is no result (or we shouldn't pass lower processes) we check without priority limit - if (($highest_priority == 0) OR !dbm::is_result($r)) - $r = q("SELECT * FROM `workerqueue` WHERE `executed` = '0000-00-00 00:00:00' ORDER BY `priority`, `created` LIMIT 1"); - + if (($highest_priority == 0) OR !dbm::is_result($r)) { + $r = q("SELECT * FROM `workerqueue` WHERE `executed` <= '%s' ORDER BY `priority`, `created` LIMIT 1", dbesc(NULL_DATE)); + } return $r; } @@ -571,7 +582,7 @@ function poller_worker_process() { * @brief Call the front end worker */ function call_worker() { - if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { + if (!Config::get("system", "frontend_worker")) { return; } @@ -583,7 +594,7 @@ function call_worker() { * @brief Call the front end worker if there aren't any active */ function call_worker_if_idle() { - if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { + if (!Config::get("system", "frontend_worker")) { return; } @@ -610,7 +621,7 @@ function call_worker_if_idle() { logger('Call poller', LOGGER_DEBUG); - $args = array("php", "include/poller.php", "no_cron"); + $args = array("include/poller.php", "no_cron"); $a = get_app(); $a->proc_run($args); return; diff --git a/include/pubsubpublish.php b/include/pubsubpublish.php index 428103a971..3641bbcf74 100644 --- a/include/pubsubpublish.php +++ b/include/pubsubpublish.php @@ -1,12 +1,31 @@ 1) { + $pubsubpublish_id = intval($argv[1]); + } else { + // We'll push to each subscriber that has push > 0, + // i.e. there has been an update (set in notifier.php). + $r = q("SELECT `id`, `callback_url` FROM `push_subscriber` WHERE `push` > 0"); + + foreach ($r as $rr) { + logger("Publish feed to ".$rr["callback_url"], LOGGER_DEBUG); + proc_run(PRIORITY_HIGH, 'include/pubsubpublish.php', $rr["id"]); + } + } + + handle_pubsubhubbub($pubsubpublish_id); + + return; +} function handle_pubsubhubbub($id) { - global $a, $db; + global $a; $r = q("SELECT * FROM `push_subscriber` WHERE `id` = %d", intval($id)); if (!$r) @@ -54,70 +73,3 @@ function handle_pubsubhubbub($id) { intval($rr['id'])); } } - - -function pubsubpublish_run(&$argv, &$argc){ - global $a, $db; - - if(is_null($a)){ - $a = new App; - } - - if(is_null($db)){ - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once('include/items.php'); - - Config::load(); - - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") { - if (App::is_already_running("pubsubpublish", "include/pubsubpublish.php", 540)) { - return; - } - } - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); - - if ($argc > 1) { - $pubsubpublish_id = intval($argv[1]); - } - else { - // We'll push to each subscriber that has push > 0, - // i.e. there has been an update (set in notifier.php). - $r = q("SELECT `id`, `callback_url` FROM `push_subscriber` WHERE `push` > 0"); - - // Use the delivery interval that is also used for the notifier - $interval = Config::get("system", "delivery_interval", 2); - - // If we are using the worker we don't need a delivery interval - if (get_config("system", "worker")) { - $interval = false; - } - - foreach ($r as $rr) { - logger("Publish feed to ".$rr["callback_url"], LOGGER_DEBUG); - proc_run(PRIORITY_HIGH, 'include/pubsubpublish.php', $rr["id"]); - - if($interval) - @time_sleep_until(microtime(true) + (float) $interval); - } - } - - handle_pubsubhubbub($pubsubpublish_id); - - return; - -} - -if (array_search(__file__,get_included_files())===0){ - pubsubpublish_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} - diff --git a/include/queue.php b/include/queue.php index 7e2657fa54..c0c73cda61 100644 --- a/include/queue.php +++ b/include/queue.php @@ -2,41 +2,16 @@ use \Friendica\Core\Config; -require_once("boot.php"); require_once('include/queue_fn.php'); require_once('include/dfrn.php'); +require_once("include/datetime.php"); +require_once('include/items.php'); +require_once('include/bbcode.php'); +require_once('include/socgraph.php'); require_once('include/cache.php'); function queue_run(&$argv, &$argc){ - global $a, $db; - - if (is_null($a)){ - $a = new App; - } - - if (is_null($db)){ - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; - - require_once("include/session.php"); - require_once("include/datetime.php"); - require_once('include/items.php'); - require_once('include/bbcode.php'); - require_once('include/socgraph.php'); - - Config::load(); - - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") - if (App::is_already_running('queue', 'include/queue.php', 540)) - return; - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); + global $a; if ($argc > 1) { $queue_id = intval($argv[1]); @@ -54,30 +29,13 @@ function queue_run(&$argv, &$argc){ // Handling the pubsubhubbub requests proc_run(PRIORITY_HIGH,'include/pubsubpublish.php'); - $interval = ((get_config('system','delivery_interval') === false) ? 2 : intval(get_config('system','delivery_interval'))); - - // If we are using the worker we don't need a delivery interval - if (get_config("system", "worker")) - $interval = false; - - $r = q("select * from deliverq where 1"); - if ($r) { - foreach ($r as $rr) { - logger('queue: deliverq'); - proc_run(PRIORITY_HIGH,'include/delivery.php',$rr['cmd'],$rr['item'],$rr['contact']); - if ($interval) { - time_sleep_until(microtime(true) + (float) $interval); - } - } - } - $r = q("SELECT `queue`.*, `contact`.`name`, `contact`.`uid` FROM `queue` INNER JOIN `contact` ON `queue`.`cid` = `contact`.`id` WHERE `queue`.`created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); if ($r) { foreach ($r as $rr) { logger('Removing expired queue item for ' . $rr['name'] . ', uid=' . $rr['uid']); - logger('Expired queue data :' . $rr['content'], LOGGER_DATA); + logger('Expired queue data: ' . $rr['content'], LOGGER_DATA); } q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); } @@ -86,158 +44,137 @@ function queue_run(&$argv, &$argc){ // After that, we'll only attempt delivery once per hour. $r = q("SELECT `id` FROM `queue` WHERE ((`created` > UTC_TIMESTAMP() - INTERVAL 12 HOUR && `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE) OR (`last` < UTC_TIMESTAMP() - INTERVAL 1 HOUR)) ORDER BY `cid`, `created`"); - } else { - logger('queue: start for id '.$queue_id); - $r = q("SELECT `id` FROM `queue` WHERE `id` = %d LIMIT 1", - intval($queue_id) - ); - } + call_hooks('queue_predeliver', $a, $r); - if (!$r){ + if (dbm::is_result($r)) { + foreach ($r as $q_item) { + logger('Call queue for id '.$q_item['id']); + proc_run(PRIORITY_LOW, "include/queue.php", $q_item['id']); + } + } return; } - if (!$queue_id) - call_hooks('queue_predeliver', $a, $r); - - // delivery loop + // delivering require_once('include/salmon.php'); require_once('include/diaspora.php'); - foreach($r as $q_item) { + $r = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1", + intval($queue_id)); - // queue_predeliver hooks may have changed the queue db details, - // so check again if this entry still needs processing + if (!dbm::is_result($r)) { + return; + } - if ($queue_id) { - $qi = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1", - intval($queue_id)); - } elseif (get_config("system", "worker")) { - logger('Call queue for id '.$q_item['id']); - proc_run(PRIORITY_LOW, "include/queue.php", $q_item['id']); - continue; - } else - $qi = q("SELECT * FROM `queue` WHERE `id` = %d AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE ", - intval($q_item['id'])); + $q_item = $r[0]; - if (!dbm::is_result($qi)) { - continue; + $c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", + intval($q_item['cid']) + ); + + if (!dbm::is_result($c)) { + remove_queue_item($q_item['id']); + return; + } + + $dead = Cache::get($cachekey_deadguy.$c[0]['notify']); + + if (!is_null($dead) AND $dead) { + logger('queue: skipping known dead url: '.$c[0]['notify']); + update_queue_time($q_item['id']); + return; + } + + $server = poco_detect_server($c[0]['url']); + + if ($server != "") { + $vital = Cache::get($cachekey_server.$server); + + if (is_null($vital)) { + logger("Check server ".$server." (".$c[0]["network"].")"); + + $vital = poco_check_server($server, $c[0]["network"], true); + Cache::set($cachekey_server.$server, $vital, CACHE_QUARTER_HOUR); } - - $c = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", - intval($qi[0]['cid']) - ); - if (! dbm::is_result($c)) { - remove_queue_item($q_item['id']); - continue; - } - - $dead = Cache::get($cachekey_deadguy.$c[0]['notify']); - - if (!is_null($dead) AND $dead) { - logger('queue: skipping known dead url: '.$c[0]['notify']); + if (!is_null($vital) AND !$vital) { + logger('queue: skipping dead server: '.$server); update_queue_time($q_item['id']); - continue; + return; } + } - $server = poco_detect_server($c[0]['url']); + $u = q("SELECT `user`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey` + FROM `user` WHERE `uid` = %d LIMIT 1", + intval($c[0]['uid']) + ); + if (!dbm::is_result($u)) { + remove_queue_item($q_item['id']); + return; + } - if ($server != "") { - $vital = Cache::get($cachekey_server.$server); + $data = $q_item['content']; + $public = $q_item['batch']; + $contact = $c[0]; + $owner = $u[0]; - if (is_null($vital)) { - logger("Check server ".$server." (".$c[0]["network"].")"); + $deliver_status = 0; - $vital = poco_check_server($server, $c[0]["network"], true); - Cache::set($cachekey_server.$server, $vital, CACHE_QUARTER_HOUR); - } + switch ($contact['network']) { + case NETWORK_DFRN: + logger('queue: dfrndelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + $deliver_status = dfrn::deliver($owner, $contact, $data); - if (!is_null($vital) AND !$vital) { - logger('queue: skipping dead server: '.$server); + if ($deliver_status == (-1)) { update_queue_time($q_item['id']); - continue; + Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); + } else { + remove_queue_item($q_item['id']); } - } + break; + case NETWORK_OSTATUS: + if ($contact['notify']) { + logger('queue: slapdelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + $deliver_status = slapper($owner, $contact['notify'], $data); - $u = q("SELECT `user`.*, `user`.`pubkey` AS `upubkey`, `user`.`prvkey` AS `uprvkey` - FROM `user` WHERE `uid` = %d LIMIT 1", - intval($c[0]['uid']) - ); - if (! dbm::is_result($u)) { - remove_queue_item($q_item['id']); - continue; - } - - $data = $qi[0]['content']; - $public = $qi[0]['batch']; - $contact = $c[0]; - $owner = $u[0]; - - $deliver_status = 0; - - switch($contact['network']) { - case NETWORK_DFRN: - logger('queue: dfrndelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); - $deliver_status = dfrn::deliver($owner,$contact,$data); - - if ($deliver_status < 0) { + if ($deliver_status == (-1)) { update_queue_time($q_item['id']); Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); } else { remove_queue_item($q_item['id']); } - break; - case NETWORK_OSTATUS: - if ($contact['notify']) { - logger('queue: slapdelivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); - $deliver_status = slapper($owner,$contact['notify'],$data); + } + break; + case NETWORK_DIASPORA: + if ($contact['notify']) { + logger('queue: diaspora_delivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); + $deliver_status = Diaspora::transmit($owner, $contact, $data, $public, true); - if ($deliver_status == (-1)) { - update_queue_time($q_item['id']); - Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); - } else { - remove_queue_item($q_item['id']); - } - } - break; - case NETWORK_DIASPORA: - if ($contact['notify']) { - logger('queue: diaspora_delivery: item '.$q_item['id'].' for '.$contact['name'].' <'.$contact['url'].'>'); - $deliver_status = Diaspora::transmit($owner,$contact,$data,$public,true); - - if ($deliver_status == (-1)) { - update_queue_time($q_item['id']); - Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); - } else { - remove_queue_item($q_item['id']); - } - } - break; - - default: - $params = array('owner' => $owner, 'contact' => $contact, 'queue' => $q_item, 'result' => false); - call_hooks('queue_deliver', $a, $params); - - if ($params['result']) { - remove_queue_item($q_item['id']); - } else { + if ($deliver_status == (-1)) { update_queue_time($q_item['id']); + Cache::set($cachekey_deadguy.$contact['notify'], true, CACHE_QUARTER_HOUR); + } else { + remove_queue_item($q_item['id']); } - break; + } + break; + + default: + $params = array('owner' => $owner, 'contact' => $contact, 'queue' => $q_item, 'result' => false); + call_hooks('queue_deliver', $a, $params); + + if ($params['result']) { + remove_queue_item($q_item['id']); + } else { + update_queue_time($q_item['id']); + } + break; - } - logger('Deliver status '.(int)$deliver_status.' for item '.$q_item['id'].' to '.$contact['name'].' <'.$contact['url'].'>'); } + logger('Deliver status '.(int)$deliver_status.' for item '.$q_item['id'].' to '.$contact['name'].' <'.$contact['url'].'>'); return; - -} - -if (array_search(__file__,get_included_files())===0){ - queue_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); } diff --git a/include/remove_contact.php b/include/remove_contact.php index aa20621116..68bf2adfea 100644 --- a/include/remove_contact.php +++ b/include/remove_contact.php @@ -6,24 +6,7 @@ use \Friendica\Core\Config; -require_once("boot.php"); - function remove_contact_run($argv, $argc) { - global $a, $db; - - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - Config::load(); - if ($argc != 2) { return; } @@ -46,9 +29,4 @@ function remove_contact_run($argv, $argc) { q("DELETE FROM `queue` WHERE `cid` = %d", intval($id)); } - -if (array_search(__file__, get_included_files()) === 0) { - remove_contact_run($_SERVER["argv"], $_SERVER["argc"]); - killme(); -} ?> diff --git a/include/security.php b/include/security.php index afb37a72d8..05371f71ca 100644 --- a/include/security.php +++ b/include/security.php @@ -55,7 +55,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive $a->user = $user_record; if($interactive) { - if($a->user['login_date'] === '0000-00-00 00:00:00') { + if ($a->user['login_date'] <= NULL_DATE) { $_SESSION['return_url'] = 'profile_photo/new'; $a->module = 'profile_photo'; info( t("Welcome ") . $a->user['username'] . EOL); diff --git a/include/shadowupdate.php b/include/shadowupdate.php index 83a785fe1f..5b0a1b94b0 100644 --- a/include/shadowupdate.php +++ b/include/shadowupdate.php @@ -5,20 +5,26 @@ use \Friendica\Core\Config; require_once("boot.php"); require_once("include/threads.php"); -global $a, $db; +function shadowupdate_run(&$argv, &$argc){ + global $a, $db; -if(is_null($a)) - $a = new App; + if (is_null($a)) { + $a = new App; + } -if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); + if (is_null($db)) { + @include(".htconfig.php"); + require_once("include/dba.php"); + $db = new dba($db_host, $db_user, $db_pass, $db_data); + unset($db_host, $db_user, $db_pass, $db_data); + } + + Config::load(); + + update_shadow_copy(); } -Config::load(); - -update_shadow_copy(); -killme(); -?> +if (array_search(__file__,get_included_files())===0){ + shadowupdate_run($_SERVER["argv"],$_SERVER["argc"]); + killme(); +} diff --git a/include/socgraph.php b/include/socgraph.php index ac8068b4d7..67f9e8aa60 100644 --- a/include/socgraph.php +++ b/include/socgraph.php @@ -81,7 +81,7 @@ function poco_load($cid,$uid = 0,$zcid = 0,$url = null) { $connect_url = ''; $name = ''; $network = ''; - $updated = '0000-00-00 00:00:00'; + $updated = NULL_DATE; $location = ''; $about = ''; $keywords = ''; @@ -239,12 +239,12 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca ); if (count($x)) { - if (($network == "") AND ($x[0]["network"] != NETWORK_STATUSNET)) + if (($network == "") AND ($x[0]["network"] != NETWORK_STATUSNET)) { $network = $x[0]["network"]; - - if ($updated == "0000-00-00 00:00:00") + } + if ($updated <= NULL_DATE) { $updated = $x[0]["updated"]; - + } $created = $x[0]["created"]; $server_url = $x[0]["server_url"]; $nick = $x[0]["nick"]; @@ -252,7 +252,7 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca $alias = $x[0]["alias"]; $notify = $x[0]["notify"]; } else { - $created = "0000-00-00 00:00:00"; + $created = NULL_DATE; $server_url = ""; $urlparts = parse_url($profile_url); @@ -309,7 +309,18 @@ function poco_check($profile_url, $name, $network, $profile_photo, $about, $loca logger("profile-check generation: ".$generation." Network: ".$network." URL: ".$profile_url." name: ".$name." avatar: ".$profile_photo, LOGGER_DEBUG); - poco_check_server($server_url, $network); + // We check the server url to be sure that it is a real one + $server_url2 = poco_detect_server($profile_url); + + // We are no sure that it is a correct URL. So we use it in the future + if ($server_url2 != "") { + $server_url = $server_url2; + } + + // The server URL doesn't seem to be valid, so we don't store it. + if (!poco_check_server($server_url, $network)) { + $server_url = ""; + } $gcontact = array("url" => $profile_url, "addr" => $addr, @@ -401,13 +412,47 @@ function poco_detect_server($profile) { // Mastodon if ($server_url == "") { - $red = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile); - if ($red != $profile) { - $server_url = $red; + $mastodon = preg_replace("=(https?://)(.*)/users/(.*)=ism", "$1$2", $profile); + if ($mastodon != $profile) { + $server_url = $mastodon; $network = NETWORK_OSTATUS; } } + // Numeric OStatus variant + if ($server_url == "") { + $ostatus = preg_replace("=(https?://)(.*)/user/(.*)=ism", "$1$2", $profile); + if ($ostatus != $profile) { + $server_url = $ostatus; + $network = NETWORK_OSTATUS; + } + } + + // Wild guess + if ($server_url == "") { + $base = preg_replace("=(https?://)(.*?)/(.*)=ism", "$1$2", $profile); + if ($base != $profile) { + $server_url = $base; + $network = NETWORK_PHANTOM; + } + } + + if ($server_url == "") { + return ""; + } + + $r = q("SELECT `id` FROM `gserver` WHERE `nurl` = '%s' AND `last_contact` > `last_failure`", + dbesc(normalise_link($server_url))); + if (dbm::is_result($r)) { + return $server_url; + } + + // Fetch the host-meta to check if this really is a server + $serverret = z_fetch_url($server_url."/.well-known/host-meta"); + if (!$serverret["success"]) { + return ""; + } + return $server_url; } @@ -420,14 +465,16 @@ function poco_last_updated($profile, $force = false) { $gcontacts = q("SELECT * FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($profile))); - if ($gcontacts[0]["created"] == "0000-00-00 00:00:00") + if ($gcontacts[0]["created"] <= NULL_DATE) { q("UPDATE `gcontact` SET `created` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc(normalise_link($profile))); - - if ($gcontacts[0]["server_url"] != "") + } + if ($gcontacts[0]["server_url"] != "") { $server_url = $gcontacts[0]["server_url"]; - else + } + if (($server_url == '') OR ($gcontacts[0]["server_url"] == $gcontacts[0]["nurl"])) { $server_url = poco_detect_server($profile); + } if (!in_array($gcontacts[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_FEED, NETWORK_OSTATUS, ""))) { logger("Profile ".$profile.": Network type ".$gcontacts[0]["network"]." can't be checked", LOGGER_DEBUG); @@ -617,10 +664,11 @@ function poco_last_updated($profile, $force = false) { } // Maybe there aren't any entries. Then check if it is a valid feed - if ($last_updated == "") - if ($xpath->query('/atom:feed')->length > 0) - $last_updated = "0000-00-00 00:00:00"; - + if ($last_updated == "") { + if ($xpath->query('/atom:feed')->length > 0) { + $last_updated = NULL_DATE; + } + } q("UPDATE `gcontact` SET `updated` = '%s', `last_contact` = '%s' WHERE `nurl` = '%s'", dbesc(dbm::date($last_updated)), dbesc(dbm::date()), dbesc(normalise_link($profile))); @@ -680,6 +728,213 @@ function poco_to_boolean($val) { return ($val); } +/** + * @brief Detect server type (Hubzilla or Friendica) via the poco data + * + * @param object $data POCO data + * @return array Server data + */ +function poco_detect_poco_data($data) { + $server = false; + + if (!isset($data->entry)) { + return false; + } + + if (count($data->entry) == 0) { + return false; + } + + if (!isset($data->entry[0]->urls)) { + return false; + } + + if (count($data->entry[0]->urls) == 0) { + return false; + } + + foreach ($data->entry[0]->urls AS $url) { + if ($url->type == 'zot') { + $server = array(); + $server["platform"] = 'Hubzilla'; + $server["network"] = NETWORK_DIASPORA; + return $server; + } + } + return false; +} + +/** + * @brief Detect server type by using the nodeinfo data + * + * @param string $server_url address of the server + * @return array Server data + */ +function poco_fetch_nodeinfo($server_url) { + $serverret = z_fetch_url($server_url."/.well-known/nodeinfo"); + if (!$serverret["success"]) { + return false; + } + + $nodeinfo = json_decode($serverret['body']); + + if (!is_object($nodeinfo)) { + return false; + } + + if (!is_array($nodeinfo->links)) { + return false; + } + + $nodeinfo_url = ''; + + foreach ($nodeinfo->links AS $link) { + if ($link->rel == 'http://nodeinfo.diaspora.software/ns/schema/1.0') { + $nodeinfo_url = $link->href; + } + } + + if ($nodeinfo_url == '') { + return false; + } + + $serverret = z_fetch_url($nodeinfo_url); + if (!$serverret["success"]) { + return false; + } + + $nodeinfo = json_decode($serverret['body']); + + if (!is_object($nodeinfo)) { + return false; + } + + $server = array(); + + $server['register_policy'] = REGISTER_CLOSED; + + if (is_bool($nodeinfo->openRegistrations) AND $nodeinfo->openRegistrations) { + $server['register_policy'] = REGISTER_OPEN; + } + + if (is_object($nodeinfo->software)) { + if (isset($nodeinfo->software->name)) { + $server['platform'] = $nodeinfo->software->name; + } + + if (isset($nodeinfo->software->version)) { + $server['version'] = $nodeinfo->software->version; + // Version numbers on Nodeinfo are presented with additional info, e.g.: + // 0.6.3.0-p1702cc1c, 0.6.99.0-p1b9ab160 or 3.4.3-2-1191. + $server['version'] = preg_replace("=(.+)-(.{4,})=ism", "$1", $server['version']); + } + } + + if (is_object($nodeinfo->metadata)) { + if (isset($nodeinfo->metadata->nodeName)) { + $server['site_name'] = $nodeinfo->metadata->nodeName; + } + } + + $diaspora = false; + $friendica = false; + $gnusocial = false; + + if (is_array($nodeinfo->protocols->inbound)) { + foreach ($nodeinfo->protocols->inbound AS $inbound) { + if ($inbound == 'diaspora') { + $diaspora = true; + } + if ($inbound == 'friendica') { + $friendica = true; + } + if ($inbound == 'gnusocial') { + $gnusocial = true; + } + } + } + + if ($gnusocial) { + $server['network'] = NETWORK_OSTATUS; + } + if ($diaspora) { + $server['network'] = NETWORK_DIASPORA; + } + if ($friendica) { + $server['network'] = NETWORK_DFRN; + } + + if (!$server) { + return false; + } + + return $server; +} + +/** + * @brief Detect server type (Hubzilla or Friendica) via the front page body + * + * @param string $body Front page of the server + * @return array Server data + */ +function poco_detect_server_type($body) { + $server = false; + + $doc = new \DOMDocument(); + @$doc->loadHTML($body); + $xpath = new \DomXPath($doc); + + $list = $xpath->query("//meta[@name]"); + + foreach ($list as $node) { + $attr = array(); + if ($node->attributes->length) { + foreach ($node->attributes as $attribute) { + $attr[$attribute->name] = $attribute->value; + } + } + if ($attr['name'] == 'generator') { + $version_part = explode(" ", $attr['content']); + if (count($version_part) == 2) { + if (in_array($version_part[0], array("Friendika", "Friendica"))) { + $server = array(); + $server["platform"] = $version_part[0]; + $server["version"] = $version_part[1]; + $server["network"] = NETWORK_DFRN; + } + } + } + } + + if (!$server) { + $list = $xpath->query("//meta[@property]"); + + foreach ($list as $node) { + $attr = array(); + if ($node->attributes->length) { + foreach ($node->attributes as $attribute) { + $attr[$attribute->name] = $attribute->value; + } + } + if ($attr['property'] == 'generator') { + if (in_array($attr['content'], array("hubzilla", "BlaBlaNet"))) { + $server = array(); + $server["platform"] = $attr['content']; + $server["version"] = ""; + $server["network"] = NETWORK_DIASPORA; + } + } + } + } + + if (!$server) { + return false; + } + + $server["site_name"] = $xpath->evaluate($element."//head/title/text()", $context)->item(0)->nodeValue; + return $server; +} + function poco_check_server($server_url, $network = "", $force = false) { // Unify the server address @@ -692,10 +947,10 @@ function poco_check_server($server_url, $network = "", $force = false) { $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url))); if (dbm::is_result($servers)) { - if ($servers[0]["created"] == "0000-00-00 00:00:00") + if ($servers[0]["created"] <= NULL_DATE) { q("UPDATE `gserver` SET `created` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc(normalise_link($server_url))); - + } $poco = $servers[0]["poco"]; $noscrape = $servers[0]["noscrape"]; @@ -723,13 +978,15 @@ function poco_check_server($server_url, $network = "", $force = false) { $info = ""; $register_policy = -1; - $last_contact = "0000-00-00 00:00:00"; - $last_failure = "0000-00-00 00:00:00"; + $last_contact = NULL_DATE; + $last_failure = NULL_DATE; } logger("Server ".$server_url." is outdated or unknown. Start discovery. Force: ".$force." Created: ".$servers[0]["created"]." Failure: ".$last_failure." Contact: ".$last_contact, LOGGER_DEBUG); $failure = false; + $possible_failure = false; $orig_last_failure = $last_failure; + $orig_last_contact = $last_contact; // Check if the page is accessible via SSL. $orig_server_url = $server_url; @@ -769,18 +1026,58 @@ function poco_check_server($server_url, $network = "", $force = false) { $last_failure = datetime_convert(); $failure = true; } + $possible_failure = true; } elseif ($network == NETWORK_DIASPORA) $last_contact = datetime_convert(); + // If the server has no possible failure we reset the cached data + if (!$possible_failure) { + $version = ""; + $platform = ""; + $site_name = ""; + $info = ""; + $register_policy = -1; + } + + // Look for poco if (!$failure) { - // Test for Diaspora + $serverret = z_fetch_url($server_url."/poco"); + if ($serverret["success"]) { + $data = json_decode($serverret["body"]); + if (isset($data->totalResults)) { + $poco = $server_url."/poco"; + $last_contact = datetime_convert(); + + $server = poco_detect_poco_data($data); + if ($server) { + $platform = $server['platform']; + $network = $server['network']; + $version = ''; + $site_name = ''; + } + } + } + } + + if (!$failure) { + // Test for Diaspora, Hubzilla, Mastodon or older Friendica servers $serverret = z_fetch_url($server_url); - if (!$serverret["success"] OR ($serverret["body"] == "")) + if (!$serverret["success"] OR ($serverret["body"] == "")) { + $last_failure = datetime_convert(); $failure = true; - else { + } else { + $server = poco_detect_server_type($serverret["body"]); + if ($server) { + $platform = $server['platform']; + $network = $server['network']; + $version = $server['version']; + $site_name = $server['site_name']; + $last_contact = datetime_convert(); + } + $lines = explode("\n",$serverret["header"]); - if(count($lines)) + if(count($lines)) { foreach($lines as $line) { $line = trim($line); if(stristr($line,'X-Diaspora-Version:')) { @@ -790,6 +1087,7 @@ function poco_check_server($server_url, $network = "", $force = false) { $network = NETWORK_DIASPORA; $versionparts = explode("-", $version); $version = $versionparts[0]; + $last_contact = datetime_convert(); } if(stristr($line,'Server: Mastodon')) { @@ -797,12 +1095,14 @@ function poco_check_server($server_url, $network = "", $force = false) { $network = NETWORK_OSTATUS; // Mastodon doesn't reveal version numbers $version = ""; + $last_contact = datetime_convert(); } } + } } } - if (!$failure) { + if (!$failure AND ($poco == "")) { // Test for Statusnet // Will also return data for Friendica and GNU Social - but it will be overwritten later // The "not implemented" is a special treatment for really, really old Friendica versions @@ -810,8 +1110,11 @@ function poco_check_server($server_url, $network = "", $force = false) { if ($serverret["success"] AND ($serverret["body"] != '{"error":"not implemented"}') AND ($serverret["body"] != '') AND (strlen($serverret["body"]) < 30)) { $platform = "StatusNet"; - $version = trim($serverret["body"], '"'); + // Remove junk that some GNU Social servers return + $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]); + $version = trim($version, '"'); $network = NETWORK_OSTATUS; + $last_contact = datetime_convert(); } // Test for GNU Social @@ -819,17 +1122,32 @@ function poco_check_server($server_url, $network = "", $force = false) { if ($serverret["success"] AND ($serverret["body"] != '{"error":"not implemented"}') AND ($serverret["body"] != '') AND (strlen($serverret["body"]) < 30)) { $platform = "GNU Social"; - $version = trim($serverret["body"], '"'); + // Remove junk that some GNU Social servers return + $version = str_replace(chr(239).chr(187).chr(191), "", $serverret["body"]); + $version = trim($version, '"'); $network = NETWORK_OSTATUS; + $last_contact = datetime_convert(); } + } + if (!$failure) { + // Test for Hubzilla, Redmatrix or Friendica $serverret = z_fetch_url($server_url."/api/statusnet/config.json"); if ($serverret["success"]) { $data = json_decode($serverret["body"]); - if (isset($data->site->server)) { $last_contact = datetime_convert(); + if (isset($data->site->platform)) { + $platform = $data->site->platform->PLATFORM_NAME; + $version = $data->site->platform->STD_VERSION; + $network = NETWORK_DIASPORA; + } + if (isset($data->site->BlaBlaNet)) { + $platform = $data->site->BlaBlaNet->PLATFORM_NAME; + $version = $data->site->BlaBlaNet->STD_VERSION; + $network = NETWORK_DIASPORA; + } if (isset($data->site->hubzilla)) { $platform = $data->site->hubzilla->PLATFORM_NAME; $version = $data->site->hubzilla->RED_VERSION; @@ -866,32 +1184,66 @@ function poco_check_server($server_url, $network = "", $force = false) { } } + // Query statistics.json. Optional package for Diaspora, Friendica and Redmatrix if (!$failure) { $serverret = z_fetch_url($server_url."/statistics.json"); if ($serverret["success"]) { $data = json_decode($serverret["body"]); - if ($version == "") + if (isset($data->version)) { $version = $data->version; + // Version numbers on statistics.json are presented with additional info, e.g.: + // 0.6.3.0-p1702cc1c, 0.6.99.0-p1b9ab160 or 3.4.3-2-1191. + $version = preg_replace("=(.+)-(.{4,})=ism", "$1", $version); + } $site_name = $data->name; - if (isset($data->network) AND ($platform == "")) + if (isset($data->network)) { $platform = $data->network; + } - if ($platform == "Diaspora") + if ($platform == "Diaspora") { $network = NETWORK_DIASPORA; + } - if ($data->registrations_open) + if ($data->registrations_open) { $register_policy = REGISTER_OPEN; - else + } else { $register_policy = REGISTER_CLOSED; + } if (isset($data->version)) $last_contact = datetime_convert(); } } + // Query nodeinfo. Working for (at least) Diaspora and Friendica. + if (!$failure) { + $server = poco_fetch_nodeinfo($server_url); + if ($server) { + $register_policy = $server['register_policy']; + + if (isset($server['platform'])) { + $platform = $server['platform']; + } + + if (isset($server['network'])) { + $network = $server['network']; + } + + if (isset($server['version'])) { + $version = $server['version']; + } + + if (isset($server['site_name'])) { + $site_name = $server['site_name']; + } + + $last_contact = datetime_convert(); + } + } + // Check for noscrape // Friendica servers could be detected as OStatus servers if (!$failure AND in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS))) { @@ -929,16 +1281,21 @@ function poco_check_server($server_url, $network = "", $force = false) { } } - // Look for poco - if (!$failure) { - $serverret = z_fetch_url($server_url."/poco"); - if ($serverret["success"]) { - $data = json_decode($serverret["body"]); - if (isset($data->totalResults)) { - $poco = $server_url."/poco"; - $last_contact = datetime_convert(); - } - } + if ($possible_failure AND !$failure) { + $last_failure = datetime_convert(); + $failure = true; + } + + if ($failure) { + $last_contact = $orig_last_contact; + } else { + $last_failure = $orig_last_failure; + } + + if (($last_contact <= $last_failure) AND !$failure) { + logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG); + } else if (($last_contact >= $last_failure) AND $failure) { + logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG); } // Check again if the server exists @@ -949,7 +1306,7 @@ function poco_check_server($server_url, $network = "", $force = false) { $info = strip_tags($info); $platform = strip_tags($platform); - if ($servers) + if ($servers) { q("UPDATE `gserver` SET `url` = '%s', `version` = '%s', `site_name` = '%s', `info` = '%s', `register_policy` = %d, `poco` = '%s', `noscrape` = '%s', `network` = '%s', `platform` = '%s', `last_contact` = '%s', `last_failure` = '%s' WHERE `nurl` = '%s'", dbesc($server_url), @@ -965,7 +1322,7 @@ function poco_check_server($server_url, $network = "", $force = false) { dbesc($last_failure), dbesc(normalise_link($server_url)) ); - else + } elseif (!$failure) { q("INSERT INTO `gserver` (`url`, `nurl`, `version`, `site_name`, `info`, `register_policy`, `poco`, `noscrape`, `network`, `platform`, `created`, `last_contact`, `last_failure`) VALUES ('%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s')", dbesc($server_url), @@ -983,7 +1340,7 @@ function poco_check_server($server_url, $network = "", $force = false) { dbesc($last_failure), dbesc(datetime_convert()) ); - + } logger("End discovery for server ".$server_url, LOGGER_DEBUG); return !$failure; @@ -1147,7 +1504,7 @@ function suggestion_query($uid, $start = 0, $limit = 80) { where uid = %d and not gcontact.nurl in ( select nurl from contact where uid = %d ) AND NOT `gcontact`.`name` IN (SELECT `name` FROM `contact` WHERE `uid` = %d) AND NOT `gcontact`.`id` IN (SELECT `gcid` FROM `gcign` WHERE `uid` = %d) - AND `gcontact`.`updated` != '0000-00-00 00:00:00' + AND `gcontact`.`updated` >= '%s' AND `gcontact`.`last_contact` >= `gcontact`.`last_failure` AND `gcontact`.`network` IN (%s) GROUP BY `glink`.`gcid` ORDER BY `gcontact`.`updated` DESC,`total` DESC LIMIT %d, %d", @@ -1155,6 +1512,7 @@ function suggestion_query($uid, $start = 0, $limit = 80) { intval($uid), intval($uid), intval($uid), + dbesc(NULL_DATE), $sql_network, intval($start), intval($limit) @@ -1173,13 +1531,14 @@ function suggestion_query($uid, $start = 0, $limit = 80) { WHERE `glink`.`uid` = 0 AND `glink`.`cid` = 0 AND `glink`.`zcid` = 0 AND NOT `gcontact`.`nurl` IN (SELECT `nurl` FROM `contact` WHERE `uid` = %d) AND NOT `gcontact`.`name` IN (SELECT `name` FROM `contact` WHERE `uid` = %d) AND NOT `gcontact`.`id` IN (SELECT `gcid` FROM `gcign` WHERE `uid` = %d) - AND `gcontact`.`updated` != '0000-00-00 00:00:00' + AND `gcontact`.`updated` >= '%s' AND `gcontact`.`last_contact` >= `gcontact`.`last_failure` AND `gcontact`.`network` IN (%s) ORDER BY rand() LIMIT %d, %d", intval($uid), intval($uid), intval($uid), + dbesc(NULL_DATE), $sql_network, intval($start), intval($limit) @@ -1244,6 +1603,33 @@ function update_suggestions() { } } +/** + * @brief Fetch server list from remote servers and adds them when they are new. + * + * @param string $poco URL to the POCO endpoint + */ +function poco_fetch_serverlist($poco) { + $serverret = z_fetch_url($poco."/@server"); + if (!$serverret["success"]) { + return; + } + $serverlist = json_decode($serverret['body']); + + if (!is_array($serverlist)) { + return; + } + + foreach ($serverlist AS $server) { + $server_url = str_replace("/index.php", "", $server->url); + + $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url))); + if (!dbm::is_result($r)) { + logger("Call server check for server ".$server_url, LOGGER_DEBUG); + proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode($server_url)); + } + } +} + function poco_discover_federation() { $last = get_config('poco','last_federation_discovery'); @@ -1259,8 +1645,9 @@ function poco_discover_federation() { if ($serverdata) { $servers = json_decode($serverdata); - foreach($servers->pods AS $server) - poco_check_server("https://".$server->host); + foreach ($servers->pods AS $server) { + proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode("https://".$server->host)); + } } // Currently disabled, since the service isn't available anymore. @@ -1295,6 +1682,9 @@ function poco_discover_single_server($id) { return false; } + // Discover new servers out there + poco_fetch_serverlist($server["poco"]); + // Fetch all users from the other server $url = $server["poco"]."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation"; @@ -1411,7 +1801,7 @@ function poco_discover_server($data, $default_generation = 0) { $connect_url = ''; $name = ''; $network = ''; - $updated = '0000-00-00 00:00:00'; + $updated = NULL_DATE; $location = ''; $about = ''; $keywords = ''; @@ -1895,4 +2285,20 @@ function gs_discover() { q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"])); } } + +/** + * @brief Returns a list of all known servers + * @return array List of server urls + */ +function poco_serverlist() { + $r = q("SELECT `url`, `site_name` AS `displayName`, `network`, `platform`, `version` FROM `gserver` + WHERE `network` IN ('%s', '%s', '%s') AND `last_contact` > `last_failure` + ORDER BY `last_contact` + LIMIT 1000", + dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS)); + if (!dbm::is_result($r)) { + return false; + } + return $r; +} ?> diff --git a/include/spool_post.php b/include/spool_post.php index b4cce46b57..f64b39e4b6 100644 --- a/include/spool_post.php +++ b/include/spool_post.php @@ -6,24 +6,10 @@ use \Friendica\Core\Config; -require_once("boot.php"); require_once("include/items.php"); function spool_post_run($argv, $argc) { - global $a, $db; - - if (is_null($a)) { - $a = new App; - } - - if (is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - } - - Config::load(); + global $a; $path = get_spoolpath(); @@ -69,9 +55,4 @@ function spool_post_run($argv, $argc) { } } } - -if (array_search(__file__, get_included_files()) === 0) { - spool_post_run($_SERVER["argv"], $_SERVER["argc"]); - killme(); -} ?> diff --git a/include/tagupdate.php b/include/tagupdate.php index b4de121e9f..1e97135c5b 100644 --- a/include/tagupdate.php +++ b/include/tagupdate.php @@ -1,24 +1,6 @@ diff --git a/include/text.php b/include/text.php index 6619dec93a..4a23b7ac37 100644 --- a/include/text.php +++ b/include/text.php @@ -903,10 +903,10 @@ function contact_block() { intval($shown) ); if (dbm::is_result($r)) { - $contacts = ""; - foreach ($r AS $contact) + $contacts = array(); + foreach ($r AS $contact) { $contacts[] = $contact["id"]; - + } $r = q("SELECT `id`, `uid`, `addr`, `url`, `name`, `thumb`, `network` FROM `contact` WHERE `id` IN (%s)", dbesc(implode(",", $contacts))); diff --git a/include/threadupdate.php b/include/threadupdate.php index dc528c6b87..3a4028603e 100644 --- a/include/threadupdate.php +++ b/include/threadupdate.php @@ -1,25 +1,7 @@ diff --git a/include/uimport.php b/include/uimport.php index b774d78c6d..4cc5b6c04b 100644 --- a/include/uimport.php +++ b/include/uimport.php @@ -11,14 +11,11 @@ define("IMPORT_DEBUG", False); function last_insert_id() { global $db; + if (IMPORT_DEBUG) return 1; - if ($db->mysqli) { - $thedb = $db->getdb(); - return $thedb->insert_id; - } else { - return mysql_insert_id(); - } + + return $db->insert_id(); } function last_error() { @@ -186,8 +183,8 @@ function import_account(App $a, $file) { } } if ($contact['uid'] == $olduid && $contact['self'] == '0') { - // set contacts 'avatar-date' to "0000-00-00 00:00:00" to let poller to update urls - $contact["avatar-date"] = "0000-00-00 00:00:00" ; + // set contacts 'avatar-date' to NULL_DATE to let poller to update urls + $contact["avatar-date"] = NULL_DATE; switch ($contact['network']) { diff --git a/include/update_gcontact.php b/include/update_gcontact.php index 6aa8bcac29..08d4149a71 100644 --- a/include/update_gcontact.php +++ b/include/update_gcontact.php @@ -2,46 +2,23 @@ use \Friendica\Core\Config; -require_once("boot.php"); - function update_gcontact_run(&$argv, &$argc){ - global $a, $db; - - if(is_null($a)) { - $a = new App; - } - - if(is_null($db)) { - @include(".htconfig.php"); - require_once("include/dba.php"); - $db = new dba($db_host, $db_user, $db_pass, $db_data); - unset($db_host, $db_user, $db_pass, $db_data); - }; + global $a; require_once('include/Scrape.php'); - require_once("include/socgraph.php"); - - Config::load(); - - $a->set_baseurl(get_config('system','url')); - - load_hooks(); + require_once('include/socgraph.php'); logger('update_gcontact: start'); - if(($argc > 1) && (intval($argv[1]))) + if (($argc > 1) && (intval($argv[1]))) { $contact_id = intval($argv[1]); + } - if(!$contact_id) { + if (!$contact_id) { logger('update_gcontact: no contact'); return; } - // Don't check this stuff if the function is called by the poller - if (App::callstack() != "poller_run") - if (App::is_already_running('update_gcontact'.$contact_id, '', 540)) - return; - $r = q("SELECT * FROM `gcontact` WHERE `id` = %d", intval($contact_id)); if (!$r) @@ -98,8 +75,3 @@ function update_gcontact_run(&$argv, &$argc){ dbesc(normalise_link($data["url"])) ); } - -if (array_search(__file__,get_included_files())===0){ - update_gcontact_run($_SERVER["argv"],$_SERVER["argc"]); - killme(); -} diff --git a/library/Smarty/libs/plugins/modifier.date_format.php b/library/Smarty/libs/plugins/modifier.date_format.php index 5ad7540b15..c5992991de 100644 --- a/library/Smarty/libs/plugins/modifier.date_format.php +++ b/library/Smarty/libs/plugins/modifier.date_format.php @@ -36,7 +36,7 @@ function smarty_modifier_date_format($string, $format = null, $default_date = '' * Include the {@link shared.make_timestamp.php} plugin */ require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php'); - if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') { + if ($string != '' && $string > '0001-01-01' && $string > NULL_DATE) { $timestamp = smarty_make_timestamp($string); } elseif ($default_date != '') { $timestamp = smarty_make_timestamp($default_date); diff --git a/mod/admin.php b/mod/admin.php index e8c071113d..b1bc8de5f2 100644 --- a/mod/admin.php +++ b/mod/admin.php @@ -27,7 +27,7 @@ require_once("include/text.php"); function admin_post(App $a) { - if(!is_site_admin()) { + if (!is_site_admin()) { return; } @@ -39,7 +39,7 @@ function admin_post(App $a) { // urls if ($a->argc > 1) { - switch ($a->argv[1]){ + switch ($a->argv[1]) { case 'site': admin_page_site_post($a); break; @@ -47,10 +47,10 @@ function admin_post(App $a) { admin_page_users_post($a); break; case 'plugins': - if($a->argc > 2 && + if ($a->argc > 2 && is_file("addon/".$a->argv[2]."/".$a->argv[2].".php")) { @include_once("addon/".$a->argv[2]."/".$a->argv[2].".php"); - if(function_exists($a->argv[2].'_plugin_admin_post')) { + if (function_exists($a->argv[2].'_plugin_admin_post')) { $func = $a->argv[2].'_plugin_admin_post'; $func($a); } @@ -59,14 +59,16 @@ function admin_post(App $a) { return; // NOTREACHED break; case 'themes': - if($a->argc < 2) { - if(is_ajax()) return; + if ($a->argc < 2) { + if (is_ajax()) { + return; + } goaway('admin/'); return; } $theme = $a->argv[2]; - if(is_file("view/theme/$theme/config.php")){ + if (is_file("view/theme/$theme/config.php")) { function __call_theme_admin_post(App $a, $theme) { $orig_theme = $a->theme; $orig_page = $a->page; @@ -77,8 +79,10 @@ function admin_post(App $a) { $init = $theme."_init"; - if(function_exists($init)) $init($a); - if(function_exists("theme_admin_post")) { + if (function_exists($init)) { + $init($a); + } + if (function_exists("theme_admin_post")) { $admin_form = theme_admin_post($a); } @@ -90,8 +94,9 @@ function admin_post(App $a) { __call_theme_admin_post($a, $theme); } info(t('Theme settings updated.')); - if(is_ajax()) return; - + if (is_ajax()) { + return; + } goaway('admin/themes/'.$theme); return; break; @@ -130,7 +135,7 @@ function admin_post(App $a) { */ function admin_content(App $a) { - if(!is_site_admin()) { + if (!is_site_admin()) { return login(false); } @@ -168,7 +173,7 @@ function admin_content(App $a) { $r = q("SELECT `name` FROM `addon` WHERE `plugin_admin` = 1 ORDER BY `name`"); $aside_tools['plugins_admin']=array(); - foreach ($r as $h){ + foreach ($r as $h) { $plugin =$h['name']; $aside_tools['plugins_admin'][] = array("admin/plugins/".$plugin, $plugin, "plugin"); // temp plugins with admin @@ -199,8 +204,8 @@ function admin_content(App $a) { */ $o = ''; // urls - if($a->argc > 1) { - switch ($a->argv[1]){ + if ($a->argc > 1) { + switch ($a->argv[1]) { case 'site': $o = admin_page_site($a); break; @@ -238,7 +243,7 @@ function admin_content(App $a) { $o = admin_page_summary($a); } - if(is_ajax()) { + if (is_ajax()) { echo $o; killme(); return ''; @@ -270,8 +275,8 @@ function admin_page_federation(App $a) { // off one % two of them are needed in the query // Add more platforms if you like, when one returns 0 known nodes it is not // displayed on the stats page. - $platforms = array('Friendica', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon'); - $colors = array('Friendica' => '#ffc018', // orange from the logo + $platforms = array('Friendi%%a', 'Diaspora', '%%red%%', 'Hubzilla', 'BlaBlaNet', 'GNU Social', 'StatusNet', 'Mastodon'); + $colors = array('Friendi%%a' => '#ffc018', // orange from the logo 'Diaspora' => '#a1a1a1', // logo is black and white, makes a gray '%%red%%' => '#c50001', // fire red from the logo 'Hubzilla' => '#43488a', // blue from the logo @@ -310,19 +315,21 @@ function admin_page_federation(App $a) { // in the DB the Diaspora versions have the format x.x.x.x-xx the last // part (-xx) should be removed to clean up the versions from the "head // commit" information and combined into a single entry for x.x.x.x - if($p=='Diaspora') { + if ($p == 'Diaspora') { $newV = array(); $newVv = array(); - foreach($v as $vv) { + foreach ($v as $vv) { $newVC = $vv['total']; $newVV = $vv['version']; $posDash = strpos($newVV, '-'); - if($posDash) + if ($posDash) { $newVV = substr($newVV, 0, $posDash); - if(isset($newV[$newVV])) + } + if (isset($newV[$newVV])) { $newV[$newVV] += $newVC; - else + } else { $newV[$newVV] = $newVC; + } } foreach ($newV as $key => $value) { array_push($newVv, array('total'=>$value, 'version'=>$key)); @@ -333,7 +340,7 @@ function admin_page_federation(App $a) { // early friendica versions have the format x.x.xxxx where xxxx is the // DB version stamp; those should be operated out and versions be // conbined - if($p=='Friendica') { + if ($p == 'Friendi%%a') { $newV = array(); $newVv = array(); foreach ($v as $vv) { @@ -341,12 +348,14 @@ function admin_page_federation(App $a) { $newVV = $vv['version']; $lastDot = strrpos($newVV,'.'); $len = strlen($newVV)-1; - if(($lastDot == $len-4) && (!strrpos($newVV,'-rc')==$len-3)) + if (($lastDot == $len-4) && (!strrpos($newVV,'-rc') == $len-3)) { $newVV = substr($newVV, 0, $lastDot); - if(isset($newV[$newVV])) + } + if (isset($newV[$newVV])) { $newV[$newVV] += $newVC; - else + } else { $newV[$newVV] = $newVC; + } } foreach ($newV as $key => $value) { array_push($newVv, array('total'=>$value, 'version'=>$key)); @@ -455,7 +464,10 @@ function admin_page_summary(App $a) { ); $users=0; - foreach ($r as $u){ $accounts[$u['page-flags']][1] = $u['count']; $users+= $u['count']; } + foreach ($r as $u) { + $accounts[$u['page-flags']][1] = $u['count']; + $users+= $u['count']; + } logger('accounts: '.print_r($accounts,true),LOGGER_DATA); @@ -468,12 +480,8 @@ function admin_page_summary(App $a) { $r = qu("SELECT COUNT(*) AS `total` FROM `queue` WHERE 1"); $queue = (($r) ? $r[0]['total'] : 0); - if (get_config('system','worker')) { - $r = qu("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE 1"); - $workerqueue = (($r) ? $r[0]['total'] : 0); - } else { - $workerqueue = 0; - } + $r = qu("SELECT COUNT(*) AS `total` FROM `workerqueue` WHERE 1"); + $workerqueue = (($r) ? $r[0]['total'] : 0); // We can do better, but this is a quick queue status @@ -485,7 +493,6 @@ function admin_page_summary(App $a) { '$title' => t('Administration'), '$page' => t('Summary'), '$queues' => $queues, - '$workeractive' => get_config('system','worker'), '$users' => array(t('Registered users'), $users), '$accounts' => $accounts, '$pending' => array(t('Pending registrations'), $pending), @@ -506,19 +513,19 @@ function admin_page_summary(App $a) { * @param App $a */ function admin_page_site_post(App $a) { - if(!x($_POST,"page_site")) { + if (!x($_POST,"page_site")) { return; } check_form_security_token_redirectOnErr('/admin/site', 'admin_site'); // relocate - if(x($_POST,'relocate') && x($_POST,'relocate_url') && $_POST['relocate_url']!="") { + if (x($_POST,'relocate') && x($_POST,'relocate_url') && $_POST['relocate_url'] != "") { $new_url = $_POST['relocate_url']; $new_url = rtrim($new_url,"/"); $parsed = @parse_url($new_url); - if(!$parsed || (!x($parsed,'host') || !x($parsed,'scheme'))) { + if (!$parsed || (!x($parsed,'host') || !x($parsed,'scheme'))) { notice(t("Can not parse base url. Must have at least ://")); goaway('admin/site'); } @@ -551,7 +558,7 @@ function admin_page_site_post(App $a) { $q = sprintf("UPDATE %s SET %s;", $table_name, $upds); $r = q($q); - if(!$r) { + if (!$r) { notice("Failed updating '$table_name': ".$db->error); goaway('admin/site'); } @@ -630,8 +637,6 @@ function admin_page_site_post(App $a) { $proxyuser = ((x($_POST,'proxyuser')) ? notags(trim($_POST['proxyuser'])) : ''); $proxy = ((x($_POST,'proxy')) ? notags(trim($_POST['proxy'])) : ''); $timeout = ((x($_POST,'timeout')) ? intval(trim($_POST['timeout'])) : 60); - $delivery_interval = ((x($_POST,'delivery_interval')) ? intval(trim($_POST['delivery_interval'])) : 0); - $poll_interval = ((x($_POST,'poll_interval')) ? intval(trim($_POST['poll_interval'])) : 0); $maxloadavg = ((x($_POST,'maxloadavg')) ? intval(trim($_POST['maxloadavg'])) : 50); $maxloadavg_frontend = ((x($_POST,'maxloadavg_frontend')) ? intval(trim($_POST['maxloadavg_frontend'])) : 50); $optimize_max_tablesize = ((x($_POST,'optimize_max_tablesize')) ? intval(trim($_POST['optimize_max_tablesize'])): 100); @@ -655,7 +660,6 @@ function admin_page_site_post(App $a) { $itemcache = ((x($_POST,'itemcache')) ? notags(trim($_POST['itemcache'])) : ''); $itemcache_duration = ((x($_POST,'itemcache_duration')) ? intval($_POST['itemcache_duration']) : 0); $max_comments = ((x($_POST,'max_comments')) ? intval($_POST['max_comments']) : 0); - $lockpath = ((x($_POST,'lockpath')) ? notags(trim($_POST['lockpath'])) : ''); $temppath = ((x($_POST,'temppath')) ? notags(trim($_POST['temppath'])) : ''); $basepath = ((x($_POST,'basepath')) ? notags(trim($_POST['basepath'])) : ''); $singleuser = ((x($_POST,'singleuser')) ? notags(trim($_POST['singleuser'])) : ''); @@ -663,20 +667,19 @@ function admin_page_site_post(App $a) { $only_tag_search = ((x($_POST,'only_tag_search')) ? True : False); $rino = ((x($_POST,'rino')) ? intval($_POST['rino']) : 0); $embedly = ((x($_POST,'embedly')) ? notags(trim($_POST['embedly'])) : ''); - $worker = ((x($_POST,'worker')) ? True : False); $worker_queues = ((x($_POST,'worker_queues')) ? intval($_POST['worker_queues']) : 4); $worker_dont_fork = ((x($_POST,'worker_dont_fork')) ? True : False); $worker_fastlane = ((x($_POST,'worker_fastlane')) ? True : False); $worker_frontend = ((x($_POST,'worker_frontend')) ? True : False); - if($a->get_path() != "") + if ($a->get_path() != "") { $diaspora_enabled = false; - - if(!$thread_allow) + } + if (!$thread_allow) { $ostatus_disabled = true; - - if($ssl_policy != intval(get_config('system','ssl_policy'))) { - if($ssl_policy == SSL_POLICY_FULL) { + } + if ($ssl_policy != intval(get_config('system','ssl_policy'))) { + if ($ssl_policy == SSL_POLICY_FULL) { q("UPDATE `contact` SET `url` = REPLACE(`url` , 'http:' , 'https:'), `photo` = REPLACE(`photo` , 'http:' , 'https:'), @@ -694,8 +697,7 @@ function admin_page_site_post(App $a) { `thumb` = REPLACE(`thumb` , 'http:' , 'https:') WHERE 1 " ); - } - elseif($ssl_policy == SSL_POLICY_SELFSIGN) { + } elseif ($ssl_policy == SSL_POLICY_SELFSIGN) { q("UPDATE `contact` SET `url` = REPLACE(`url` , 'https:' , 'http:'), `photo` = REPLACE(`photo` , 'https:' , 'http:'), @@ -716,8 +718,6 @@ function admin_page_site_post(App $a) { } } set_config('system','ssl_policy',$ssl_policy); - set_config('system','delivery_interval',$delivery_interval); - set_config('system','poll_interval',$poll_interval); set_config('system','maxloadavg',$maxloadavg); set_config('system','maxloadavg_frontend',$maxloadavg_frontend); set_config('system','optimize_max_tablesize',$optimize_max_tablesize); @@ -735,7 +735,7 @@ function admin_page_site_post(App $a) { set_config('system','shortcut_icon',$shortcut_icon); set_config('system','touch_icon',$touch_icon); - if($banner=="") { + if ($banner == "") { // don't know why, but del_config doesn't work... q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1", dbesc("system"), @@ -745,7 +745,7 @@ function admin_page_site_post(App $a) { set_config('system','banner', $banner); } - if($info=="") { + if ($info == "") { del_config('config','info'); } else { set_config('config','info',$info); @@ -753,12 +753,12 @@ function admin_page_site_post(App $a) { set_config('system','language', $language); set_config('system','theme', $theme); - if($theme_mobile === '---') { + if ($theme_mobile === '---') { del_config('system','mobile-theme'); } else { set_config('system','mobile-theme', $theme_mobile); } - if($singleuser === '---') { + if ($singleuser === '---') { del_config('system','singleuser'); } else { set_config('system','singleuser', $singleuser); @@ -806,18 +806,16 @@ function admin_page_site_post(App $a) { set_config('system','itemcache', $itemcache); set_config('system','itemcache_duration', $itemcache_duration); set_config('system','max_comments', $max_comments); - set_config('system','lockpath', $lockpath); set_config('system','temppath', $temppath); set_config('system','basepath', $basepath); set_config('system','proxy_disabled', $proxy_disabled); set_config('system','only_tag_search', $only_tag_search); - set_config('system','worker', $worker); set_config('system','worker_queues', $worker_queues); set_config('system','worker_dont_fork', $worker_dont_fork); set_config('system','worker_fastlane', $worker_fastlane); set_config('system','frontend_worker', $worker_frontend); - if($rino==2 and !function_exists('mcrypt_create_iv')) { + if (($rino == 2) and !function_exists('mcrypt_create_iv')) { notice(t("RINO2 needs mcrypt php extension to work.")); } else { set_config('system','rino_encrypt', $rino); @@ -845,7 +843,7 @@ function admin_page_site(App $a) { /* Installed langs */ $lang_choices = get_available_languages(); - if(strlen(get_config('system','directory_submit_url')) AND + if (strlen(get_config('system','directory_submit_url')) AND !strlen(get_config('system','directory'))) { set_config('system','directory', dirname(get_config('system','directory_submit_url'))); del_config('system','directory_submit_url'); @@ -856,12 +854,12 @@ function admin_page_site(App $a) { $theme_choices_mobile = array(); $theme_choices_mobile["---"] = t("No special theme for mobile devices"); $files = glob('view/theme/*'); - if($files) { + if ($files) { $allowed_theme_list = Config::get('system', 'allowed_themes'); - foreach($files as $file) { - if(intval(file_exists($file.'/unsupported'))) + foreach ($files as $file) { + if (intval(file_exists($file.'/unsupported'))) continue; $f = basename($file); @@ -873,7 +871,7 @@ function admin_page_site(App $a) { $theme_name = ((file_exists($file.'/experimental')) ? sprintf("%s - \x28Experimental\x29", $f) : $f); - if(file_exists($file.'/mobile')) { + if (file_exists($file.'/mobile')) { $theme_choices_mobile[$f] = $theme_name; } else { $theme_choices[$f] = $theme_name; @@ -922,15 +920,15 @@ function admin_page_site(App $a) { /* Banner */ $banner = get_config('system','banner'); - if($banner == false) + if ($banner == false) { $banner = 'logoFriendica'; + } $banner = htmlspecialchars($banner); $info = get_config('config','info'); $info = htmlspecialchars($info); // Automatically create temporary paths get_temppath(); - get_lockpath(); get_itemcachepath(); //echo "
"; var_dump($lang_choices); die("
"); @@ -948,9 +946,9 @@ function admin_page_site(App $a) { SSL_POLICY_SELFSIGN => t("Self-signed certificate, use SSL for local links only (discouraged)") ); - if($a->config['hostname'] == "") + if ($a->config['hostname'] == "") { $a->config['hostname'] = $a->get_hostname(); - + } $diaspora_able = ($a->get_path() == ""); $optimize_max_tablesize = Config::get('system','optimize_max_tablesize', 100); @@ -1029,8 +1027,6 @@ function admin_page_site(App $a) { '$proxyuser' => array('proxyuser', t("Proxy user"), get_config('system','proxyuser'), ""), '$proxy' => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""), '$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")), - '$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")), - '$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")), '$maxloadavg' => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")), '$maxloadavg_frontend' => array('maxloadavg_frontend', t("Maximum Load Average (Frontend)"), ((intval(get_config('system','maxloadavg_frontend')) > 0)?get_config('system','maxloadavg_frontend'):50), t("Maximum system load before the frontend quits service - default 50.")), '$optimize_max_tablesize'=> array('optimize_max_tablesize', t("Maximum table size for optimization"), $optimize_max_tablesize, t("Maximum table size (in MB) for the automatic optimization - default 100 MB. Enter -1 to disable it.")), @@ -1049,7 +1045,6 @@ function admin_page_site(App $a) { '$itemcache' => array('itemcache', t("Path to item cache"), get_config('system','itemcache'), t("The item caches buffers generated bbcode and external images.")), '$itemcache_duration' => array('itemcache_duration', t("Cache duration in seconds"), get_config('system','itemcache_duration'), t("How long should the cache files be hold? Default value is 86400 seconds (One day). To disable the item cache, set the value to -1.")), '$max_comments' => array('max_comments', t("Maximum numbers of comments per post"), get_config('system','max_comments'), t("How much comments should be shown for each post? Default value is 100.")), - '$lockpath' => array('lockpath', t("Path for lock file"), get_config('system','lockpath'), t("The lock file is used to avoid multiple pollers at one time. Only define a folder here.")), '$temppath' => array('temppath', t("Temp path"), get_config('system','temppath'), t("If you have a restricted system where the webserver can't access the system temp path, enter another path here.")), '$basepath' => array('basepath', t("Base path to installation"), get_config('system','basepath'), t("If the system cannot detect the correct path to your installation, enter the correct path here. This setting should only be set if you are using a restricted system and symbolic links to your webroot.")), '$proxy_disabled' => array('proxy_disabled', t("Disable picture proxy"), get_config('system','proxy_disabled'), t("The picture proxy increases performance and privacy. It shouldn't be used on systems with very low bandwith.")), @@ -1060,7 +1055,6 @@ function admin_page_site(App $a) { '$rino' => array('rino', t("RINO Encryption"), intval(get_config('system','rino_encrypt')), t("Encryption layer between nodes."), array("Disabled", "RINO1 (deprecated)", "RINO2")), '$embedly' => array('embedly', t("Embedly API key"), get_config('system','embedly'), t("Embedly is used to fetch additional data for web pages. This is an optional parameter.")), - '$worker' => array('worker', t("Enable 'worker' background processing"), get_config('system','worker'), t("The worker background processing limits the number of parallel background jobs to a maximum number and respects the system load.")), '$worker_queues' => array('worker_queues', t("Maximum number of parallel workers"), get_config('system','worker_queues'), t("On shared hosters set this to 2. On larger systems, values of 10 are great. Default value is 4.")), '$worker_dont_fork' => array('worker_dont_fork', t("Don't use 'proc_open' with the worker"), get_config('system','worker_dont_fork'), t("Enable this if your system doesn't allow the use of 'proc_open'. This can happen on shared hosters. If this is enabled you should increase the frequency of poller calls in your crontab.")), '$worker_fastlane' => array('worker_fastlane', t("Enable fastlane"), get_config('system','worker_fastlane'), t("When enabed, the fastlane mechanism starts an additional worker if processes with higher priority are blocked by processes of lower priority.")), @@ -1088,42 +1082,45 @@ function admin_page_dbsync(App $a) { $o = ''; - if($a->argc > 3 && intval($a->argv[3]) && $a->argv[2] === 'mark') { + if ($a->argc > 3 && intval($a->argv[3]) && $a->argv[2] === 'mark') { set_config('database', 'update_'.intval($a->argv[3]), 'success'); $curr = get_config('system','build'); - if(intval($curr) == intval($a->argv[3])) + if (intval($curr) == intval($a->argv[3])) { set_config('system','build',intval($curr) + 1); + } info(t('Update has been marked successful').EOL); goaway('admin/dbsync'); } - if(($a->argc > 2) AND (intval($a->argv[2]) OR ($a->argv[2] === 'check'))) { + if (($a->argc > 2) AND (intval($a->argv[2]) OR ($a->argv[2] === 'check'))) { require_once("include/dbstructure.php"); $retval = update_structure(false, true); - if(!$retval) { + if (!$retval) { $o .= sprintf(t("Database structure update %s was successfully applied."), DB_UPDATE_VERSION)."
"; set_config('database', 'dbupdate_'.DB_UPDATE_VERSION, 'success'); - } else + } else { $o .= sprintf(t("Executing of database structure update %s failed with error: %s"), DB_UPDATE_VERSION, $retval)."
"; - if($a->argv[2] === 'check') + } + if ($a->argv[2] === 'check') { return $o; + } } - if($a->argc > 2 && intval($a->argv[2])) { + if ($a->argc > 2 && intval($a->argv[2])) { require_once('update.php'); $func = 'update_'.intval($a->argv[2]); - if(function_exists($func)) { + if (function_exists($func)) { $retval = $func(); - if($retval === UPDATE_FAILED) { + if ($retval === UPDATE_FAILED) { $o .= sprintf(t("Executing %s failed with error: %s"), $func, $retval); } - elseif($retval === UPDATE_SUCCESS) { + elseif ($retval === UPDATE_SUCCESS) { $o .= sprintf(t('Update %s was successfully applied.', $func)); set_config('database',$func, 'success'); - } - else + } else { $o .= sprintf(t('Update %s did not return a status. Unknown if it succeeded.'), $func); + } } else { $o .= sprintf(t('There was no additional update function %s that needed to be called.'), $func)."
"; set_config('database',$func, 'success'); @@ -1136,8 +1133,9 @@ function admin_page_dbsync(App $a) { if (dbm::is_result($r)) { foreach ($r as $rr) { $upd = intval(substr($rr['k'],7)); - if($upd < 1139 || $rr['v'] === 'success') + if ($upd < 1139 || $rr['v'] === 'success') { continue; + } $failed[] = $upd; } } @@ -1177,7 +1175,7 @@ function admin_page_users_post(App $a) { check_form_security_token_redirectOnErr('/admin/users', 'admin_users'); - if (!($nu_name==="") && !($nu_email==="") && !($nu_nickname==="")) { + if (!($nu_name === "") && !($nu_email === "") && !($nu_nickname === "")) { require_once('include/user.php'); $result = create_user(array('username'=>$nu_name, 'email'=>$nu_email, @@ -1228,31 +1226,31 @@ function admin_page_users_post(App $a) { } - if(x($_POST,'page_users_block')) { - foreach($users as $uid){ + if (x($_POST,'page_users_block')) { + foreach ($users as $uid) { q("UPDATE `user` SET `blocked` = 1-`blocked` WHERE `uid` = %s", intval($uid) ); } notice(sprintf(tt("%s user blocked/unblocked", "%s users blocked/unblocked", count($users)), count($users))); } - if(x($_POST,'page_users_delete')) { + if (x($_POST,'page_users_delete')) { require_once("include/Contact.php"); - foreach($users as $uid){ + foreach ($users as $uid) { user_remove($uid); } notice(sprintf(tt("%s user deleted", "%s users deleted", count($users)), count($users))); } - if(x($_POST,'page_users_approve')) { + if (x($_POST,'page_users_approve')) { require_once("mod/regmod.php"); - foreach($pending as $hash){ + foreach ($pending as $hash) { user_allow($hash); } } - if(x($_POST,'page_users_deny')) { + if (x($_POST,'page_users_deny')) { require_once("mod/regmod.php"); - foreach($pending as $hash){ + foreach ($pending as $hash) { user_deny($hash); } } @@ -1273,31 +1271,31 @@ function admin_page_users_post(App $a) { * @return string */ function admin_page_users(App $a) { - if($a->argc>2) { + if ($a->argc>2) { $uid = $a->argv[3]; $user = q("SELECT `username`, `blocked` FROM `user` WHERE `uid` = %d", intval($uid)); - if(count($user)==0) { + if (count($user) == 0) { notice('User not found'.EOL); goaway('admin/users'); return ''; // NOTREACHED } - switch($a->argv[2]){ - case "delete":{ + switch($a->argv[2]) { + case "delete": check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); // delete user require_once("include/Contact.php"); user_remove($uid); notice(sprintf(t("User '%s' deleted"), $user[0]['username']).EOL); - }; break; - case "block":{ + break; + case "block": check_form_security_token_redirectOnErr('/admin/users', 'admin_users', 't'); q("UPDATE `user` SET `blocked` = %d WHERE `uid` = %s", intval(1-$user[0]['blocked']), intval($uid) ); notice(sprintf(($user[0]['blocked']?t("User '%s' unblocked"):t("User '%s' blocked")) , $user[0]['username']).EOL); - }; break; + break; } goaway('admin/users'); return ''; // NOTREACHED @@ -1313,7 +1311,7 @@ function admin_page_users(App $a) { /* get users */ $total = qu("SELECT COUNT(*) AS `total` FROM `user` WHERE 1"); - if(count($total)) { + if (count($total)) { $a->set_pager_total($total[0]['total']); $a->set_pager_itemspage(100); } @@ -1330,22 +1328,22 @@ function admin_page_users(App $a) { $order = "contact.name"; $order_direction = "+"; - if (x($_GET,'o')){ + if (x($_GET,'o')) { $new_order = $_GET['o']; - if ($new_order[0]==="-") { + if ($new_order[0] === "-") { $order_direction = "-"; $new_order = substr($new_order,1); } - if (in_array($new_order, $valid_orders)){ + if (in_array($new_order, $valid_orders)) { $order = $new_order; } - if (x($_GET,'d')){ + if (x($_GET,'d')) { $new_direction = $_GET['d']; } } $sql_order = "`".str_replace('.','`.`',$order)."`"; - $sql_order_direction = ($order_direction==="+")?"ASC":"DESC"; + $sql_order_direction = ($order_direction === "+")?"ASC":"DESC"; $users = qu("SELECT `user`.*, `contact`.`name`, `contact`.`url`, `contact`.`micro`, `user`.`account_expired`, `contact`.`last-item` AS `lastitem_date` FROM `user` @@ -1359,7 +1357,7 @@ function admin_page_users(App $a) { //echo "
$users"; killme();
 
 	$adminlist = explode(",", str_replace(" ", "", $a->config['admin_email']));
-	$_setup_users = function ($e) use ($adminlist){
+	$_setup_users = function ($e) use ($adminlist) {
 		$accounts = array(
 			t('Normal Account'),
 			t('Soapbox Account'),
@@ -1385,22 +1383,21 @@ function admin_page_users(App $a) {
 	$tmp_users = array();
 	$deleted = array();
 
-	while(count($users)) {
+	while (count($users)) {
 		$new_user = array();
-		foreach(array_pop($users) as $k => $v) {
+		foreach (array_pop($users) as $k => $v) {
 			$k = str_replace('-','_',$k);
 			$new_user[$k] = $v;
 		}
-		if($new_user['deleted']) {
+		if ($new_user['deleted']) {
 			array_push($deleted, $new_user);
-		}
-		else {
+		} else {
 			array_push($tmp_users, $new_user);
 		}
 	}
 	//Reversing the two array, and moving $tmp_users to $users
 	array_reverse($deleted);
-	while(count($tmp_users)) {
+	while (count($tmp_users)) {
 		array_push($users, array_pop($tmp_users));
 	}
 
@@ -1477,19 +1474,19 @@ function admin_page_plugins(App $a) {
 	/*
 	 * Single plugin
 	 */
-	if($a->argc == 3) {
+	if ($a->argc == 3) {
 		$plugin = $a->argv[2];
-		if(!is_file("addon/$plugin/$plugin.php")) {
+		if (!is_file("addon/$plugin/$plugin.php")) {
 			notice(t("Item not found."));
 			return '';
 		}
 
-		if(x($_GET,"a") && $_GET['a']=="t") {
+		if (x($_GET,"a") && $_GET['a']=="t") {
 			check_form_security_token_redirectOnErr('/admin/plugins', 'admin_themes', 't');
 
 			// Toggle plugin status
 			$idx = array_search($plugin, $a->plugins);
-			if($idx !== false) {
+			if ($idx !== false) {
 				unset($a->plugins[$idx]);
 				uninstall_plugin($plugin);
 				info(sprintf(t("Plugin %s disabled."), $plugin));
@@ -1506,22 +1503,22 @@ function admin_page_plugins(App $a) {
 		// display plugin details
 		require_once('library/markdown.php');
 
-		if(in_array($plugin, $a->plugins)) {
+		if (in_array($plugin, $a->plugins)) {
 			$status="on"; $action= t("Disable");
 		} else {
 			$status="off"; $action= t("Enable");
 		}
 
 		$readme=Null;
-		if(is_file("addon/$plugin/README.md")) {
+		if (is_file("addon/$plugin/README.md")) {
 			$readme = file_get_contents("addon/$plugin/README.md");
 			$readme = Markdown($readme);
-		} elseif(is_file("addon/$plugin/README")) {
+		} elseif (is_file("addon/$plugin/README")) {
 			$readme = "
". file_get_contents("addon/$plugin/README") ."
"; } $admin_form=""; - if(is_array($a->plugins_admin) && in_array($plugin, $a->plugins_admin)) { + if (is_array($a->plugins_admin) && in_array($plugin, $a->plugins_admin)) { @require_once("addon/$plugin/$plugin.php"); $func = $plugin.'_plugin_admin'; $func($a, $admin_form); @@ -1613,8 +1610,8 @@ function admin_page_plugins(App $a) { */ function toggle_theme(&$themes,$th,&$result) { for($x = 0; $x < count($themes); $x ++) { - if($themes[$x]['name'] === $th) { - if($themes[$x]['allowed']) { + if ($themes[$x]['name'] === $th) { + if ($themes[$x]['allowed']) { $themes[$x]['allowed'] = 0; $result = 0; } @@ -1633,8 +1630,8 @@ function toggle_theme(&$themes,$th,&$result) { */ function theme_status($themes,$th) { for($x = 0; $x < count($themes); $x ++) { - if($themes[$x]['name'] === $th) { - if($themes[$x]['allowed']) { + if ($themes[$x]['name'] === $th) { + if ($themes[$x]['allowed']) { return 1; } else { @@ -1652,11 +1649,12 @@ function theme_status($themes,$th) { */ function rebuild_theme_table($themes) { $o = ''; - if(count($themes)) { - foreach($themes as $th) { - if($th['allowed']) { - if(strlen($o)) + if (count($themes)) { + foreach ($themes as $th) { + if ($th['allowed']) { + if (strlen($o)) { $o .= ','; + } $o .= $th['name']; } } @@ -1686,15 +1684,18 @@ function admin_page_themes(App $a) { $allowed_themes_str = get_config('system','allowed_themes'); $allowed_themes_raw = explode(',',$allowed_themes_str); $allowed_themes = array(); - if(count($allowed_themes_raw)) - foreach($allowed_themes_raw as $x) - if(strlen(trim($x))) + if (count($allowed_themes_raw)) { + foreach ($allowed_themes_raw as $x) { + if (strlen(trim($x))) { $allowed_themes[] = trim($x); + } + } + } $themes = array(); $files = glob('view/theme/*'); - if($files) { - foreach($files as $file) { + if ($files) { + foreach ($files as $file) { $f = basename($file); // Is there a style file? @@ -1709,12 +1710,13 @@ function admin_page_themes(App $a) { $is_supported = 1-(intval(file_exists($file.'/unsupported'))); $is_allowed = intval(in_array($f,$allowed_themes)); - if($is_allowed OR $is_supported OR get_config("system", "show_unsupported_themes")) + if ($is_allowed OR $is_supported OR get_config("system", "show_unsupported_themes")) { $themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed); + } } } - if(! count($themes)) { + if (! count($themes)) { notice(t('No themes found.')); return ''; } @@ -1723,25 +1725,24 @@ function admin_page_themes(App $a) { * Single theme */ - if($a->argc == 3) { + if ($a->argc == 3) { $theme = $a->argv[2]; - if(! is_dir("view/theme/$theme")) { + if (! is_dir("view/theme/$theme")) { notice(t("Item not found.")); return ''; } - if(x($_GET,"a") && $_GET['a']=="t") { + if (x($_GET,"a") && $_GET['a']=="t") { check_form_security_token_redirectOnErr('/admin/themes', 'admin_themes', 't'); // Toggle theme status toggle_theme($themes,$theme,$result); $s = rebuild_theme_table($themes); - if($result) { + if ($result) { install_theme($theme); info(sprintf('Theme %s enabled.',$theme)); - } - else { + } else { uninstall_theme($theme); info(sprintf('Theme %s disabled.',$theme)); } @@ -1754,22 +1755,22 @@ function admin_page_themes(App $a) { // display theme details require_once('library/markdown.php'); - if(theme_status($themes,$theme)) { + if (theme_status($themes,$theme)) { $status="on"; $action= t("Disable"); } else { $status="off"; $action= t("Enable"); } - $readme=Null; - if(is_file("view/theme/$theme/README.md")) { + $readme = Null; + if (is_file("view/theme/$theme/README.md")) { $readme = file_get_contents("view/theme/$theme/README.md"); $readme = Markdown($readme); - } elseif(is_file("view/theme/$theme/README")) { + } elseif (is_file("view/theme/$theme/README")) { $readme = "
". file_get_contents("view/theme/$theme/README") ."
"; } - $admin_form=""; - if(is_file("view/theme/$theme/config.php")) { + $admin_form = ""; + if (is_file("view/theme/$theme/config.php")) { function __get_theme_admin_form(App $a, $theme) { $orig_theme = $a->theme; $orig_page = $a->page; @@ -1780,8 +1781,10 @@ function admin_page_themes(App $a) { $init = $theme."_init"; - if(function_exists($init)) $init($a); - if(function_exists("theme_admin")) { + if (function_exists($init)) { + $init($a); + } + if (function_exists("theme_admin")) { $admin_form = theme_admin($a); } @@ -1794,9 +1797,9 @@ function admin_page_themes(App $a) { } $screenshot = array(get_theme_screenshot($theme), t('Screenshot')); - if(! stristr($screenshot[0],$theme)) + if (! stristr($screenshot[0],$theme)) { $screenshot = null; - + } $t = get_markup_template("admin_plugins_details.tpl"); return replace_macros($t, array( @@ -1842,7 +1845,7 @@ function admin_page_themes(App $a) { $xthemes = array(); if ($themes) { - foreach($themes as $th) { + foreach ($themes as $th) { $xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name'])); } } @@ -1967,25 +1970,25 @@ function admin_page_viewlogs(App $a) { $f = get_config('system','logfile'); $data = ''; - if(!file_exists($f)) { + if (!file_exists($f)) { $data = t("Error trying to open $f log file.\r\n
Check to see if file $f exist and is readable."); - } - else { + } else { $fp = fopen($f, 'r'); - if(!$fp) { + if (!$fp) { $data = t("Couldn't open $f log file.\r\n
Check to see if file $f is readable."); - } - else { + } else { $fstat = fstat($fp); $size = $fstat['size']; - if($size != 0) { - if($size > 5000000 || $size < 0) + if ($size != 0) { + if ($size > 5000000 || $size < 0) { $size = 5000000; + } $seek = fseek($fp,0-$size,SEEK_END); - if($seek === 0) { + if ($seek === 0) { $data = escape_tags(fread($fp,$size)); - while(! feof($fp)) + while (! feof($fp)) { $data .= escape_tags(fread($fp,4096)); + } } } fclose($fp); @@ -2013,22 +2016,24 @@ function admin_page_features_post(App $a) { $arr = array(); $features = get_features(false); - foreach($features as $fname => $fdata) { - foreach(array_slice($fdata,1) as $f) { + foreach ($features as $fname => $fdata) { + foreach (array_slice($fdata,1) as $f) { $feature = $f[0]; $feature_state = 'feature_'.$feature; $featurelock = 'featurelock_'.$feature; - if(x($_POST[$feature_state])) + if (x($_POST[$feature_state])) { $val = intval($_POST['feature_'.$feature]); - else + } else { $val = 0; + } set_config('feature',$feature,$val); - if(x($_POST[$featurelock])) + if (x($_POST[$featurelock])) { set_config('feature_lock',$feature,$val); - else + } else { del_config('feature_lock',$feature); + } } } @@ -2052,18 +2057,19 @@ function admin_page_features_post(App $a) { */ function admin_page_features(App $a) { - if((argc() > 1) && (argv(1) === 'features')) { + if ((argc() > 1) && (argv(1) === 'features')) { $arr = array(); $features = get_features(false); - foreach($features as $fname => $fdata) { + foreach ($features as $fname => $fdata) { $arr[$fname] = array(); $arr[$fname][0] = $fdata[0]; - foreach(array_slice($fdata,1) as $f) { + foreach (array_slice($fdata,1) as $f) { $set = get_config('feature',$f[0]); - if($set === false) + if ($set === false) { $set = $f[3]; + } $arr[$fname][1][] = array( array('feature_' .$f[0],$f[1],$set,$f[2],array(t('Off'),t('On'))), array('featurelock_' .$f[0],sprintf(t('Lock feature %s'),$f[1]),(($f[4] !== false) ? "1" : ''),'',array(t('Off'),t('On'))) diff --git a/mod/contacts.php b/mod/contacts.php index a2a77e2a5c..f2500099c3 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -534,13 +534,13 @@ function contacts_content(App $a) { $insecure = t('Private communications are not available for this contact.'); - $last_update = (($contact['last-update'] == '0000-00-00 00:00:00') + $last_update = (($contact['last-update'] <= NULL_DATE) ? t('Never') : datetime_convert('UTC',date_default_timezone_get(),$contact['last-update'],'D, j M Y, g:i A')); - if($contact['last-update'] !== '0000-00-00 00:00:00') + if ($contact['last-update'] > NULL_DATE) { $last_update .= ' ' . (($contact['last-update'] <= $contact['success_update']) ? t("\x28Update was successful\x29") : t("\x28Update was not successful\x29")); - + } $lblsuggest = (($contact['network'] === NETWORK_DFRN) ? t('Suggest friends') : ''); $poll_enabled = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_OSTATUS, NETWORK_FEED, NETWORK_MAIL, NETWORK_MAIL2)); @@ -558,12 +558,12 @@ function contacts_content(App $a) { // tabs $tab_str = contacts_tab($a, $contact_id, 2); - $lost_contact = (($contact['archive'] && $contact['term-date'] != '0000-00-00 00:00:00' && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : ''); + $lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : ''); - if ($contact['network'] == NETWORK_FEED) + if ($contact['network'] == NETWORK_FEED) { $fetch_further_information = array('fetch_further_information', t('Fetch further information for feeds'), $contact['fetch_further_information'], t('Fetch further information for feeds'), array('0'=>t('Disabled'), '1'=>t('Fetch information'), '2'=>t('Fetch information and keywords'))); - + } if (in_array($contact['network'], array(NETWORK_FEED, NETWORK_MAIL, NETWORK_MAIL2))) $poll_interval = contact_poll_interval($contact['priority'],(! $poll_enabled)); diff --git a/mod/events.php b/mod/events.php index ac0c444cb5..2b84d903e1 100644 --- a/mod/events.php +++ b/mod/events.php @@ -60,7 +60,7 @@ function events_post(App $a) { } if ($nofinish) { - $finish = '0000-00-00 00:00:00'; + $finish = NULL_DATE; } if ($finish_text) { diff --git a/mod/maintenance.php b/mod/maintenance.php index dcdc44194e..98155b93ad 100644 --- a/mod/maintenance.php +++ b/mod/maintenance.php @@ -1,11 +1,14 @@ t('System down for maintenance') + '$sysdown' => t('System down for maintenance'), + '$reason' => Config::get('system', 'maintenance_reason') )); } diff --git a/mod/poco.php b/mod/poco.php index 4ce075301c..30648acab6 100644 --- a/mod/poco.php +++ b/mod/poco.php @@ -7,14 +7,14 @@ function poco_init(App $a) { $system_mode = false; - if(intval(get_config('system','block_public')) || (get_config('system','block_local_dir'))) + if (intval(get_config('system','block_public')) || (get_config('system','block_local_dir'))) { http_status_exit(401); + } - - if($a->argc > 1) { + if ($a->argc > 1) { $user = notags(trim($a->argv[1])); } - if(! x($user)) { + if (! x($user)) { $c = q("SELECT * FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1"); if (! dbm::is_result($c)) { http_status_exit(401); @@ -27,42 +27,55 @@ function poco_init(App $a) { $justme = false; $global = false; - if($a->argc > 1 && $a->argv[1] === '@global') { + if ($a->argc > 1 && $a->argv[1] === '@server') { + // List of all servers that this server knows + $ret = poco_serverlist(); + header('Content-type: application/json'); + echo json_encode($ret); + killme(); + } + if ($a->argc > 1 && $a->argv[1] === '@global') { + // List of all profiles that this server recently had data from $global = true; $update_limit = date("Y-m-d H:i:s", time() - 30 * 86400); } - if($a->argc > 2 && $a->argv[2] === '@me') + if ($a->argc > 2 && $a->argv[2] === '@me') { $justme = true; - if($a->argc > 3 && $a->argv[3] === '@all') + } + if ($a->argc > 3 && $a->argv[3] === '@all') { $justme = false; - if($a->argc > 3 && $a->argv[3] === '@self') + } + if ($a->argc > 3 && $a->argv[3] === '@self') { $justme = true; - if($a->argc > 4 && intval($a->argv[4]) && $justme == false) + } + if ($a->argc > 4 && intval($a->argv[4]) && $justme == false) { $cid = intval($a->argv[4]); + } - - if(!$system_mode AND !$global) { + if (!$system_mode AND !$global) { $r = q("SELECT `user`.*,`profile`.`hide-friends` from user left join profile on `user`.`uid` = `profile`.`uid` where `user`.`nickname` = '%s' and `profile`.`is-default` = 1 limit 1", dbesc($user) ); - if(! dbm::is_result($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) + if (! dbm::is_result($r) || $r[0]['hidewall'] || $r[0]['hide-friends']) { http_status_exit(404); + } $user = $r[0]; } - if($justme) + if ($justme) { $sql_extra = " AND `contact`.`self` = 1 "; + } // else // $sql_extra = " AND `contact`.`self` = 0 "; - if($cid) + if ($cid) { $sql_extra = sprintf(" AND `contact`.`id` = %d ",intval($cid)); - - if(x($_GET,'updatedSince')) + } + if (x($_GET,'updatedSince')) { $update_limit = date("Y-m-d H:i:s",strtotime($_GET['updatedSince'])); - + } if ($global) { $r = q("SELECT count(*) AS `total` FROM `gcontact` WHERE `updated` >= '%s' AND `updated` >= `last_failure` AND NOT `hide` AND `network` IN ('%s', '%s', '%s')", dbesc($update_limit), @@ -70,7 +83,7 @@ function poco_init(App $a) { dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS) ); - } elseif($system_mode) { + } elseif ($system_mode) { $r = q("SELECT count(*) AS `total` FROM `contact` WHERE `self` = 1 AND `uid` IN (SELECT `uid` FROM `pconfig` WHERE `cat` = 'system' AND `k` = 'suggestme' AND `v` = 1) "); } else { @@ -84,14 +97,15 @@ function poco_init(App $a) { dbesc(NETWORK_STATUSNET) ); } - if (dbm::is_result($r)) + if (dbm::is_result($r)) { $totalResults = intval($r[0]['total']); - else + } else { $totalResults = 0; - + } $startIndex = intval($_GET['startIndex']); - if(! $startIndex) + if (! $startIndex) { $startIndex = 0; + } $itemsPerPage = ((x($_GET,'count') && intval($_GET['count'])) ? intval($_GET['count']) : $totalResults); if ($global) { @@ -105,7 +119,7 @@ function poco_init(App $a) { intval($startIndex), intval($itemsPerPage) ); - } elseif($system_mode) { + } elseif ($system_mode) { logger("Start system mode query", LOGGER_DEBUG); $r = q("SELECT `contact`.*, `profile`.`about` AS `pabout`, `profile`.`locality` AS `plocation`, `profile`.`pub_keywords`, `profile`.`gender` AS `pgender`, `profile`.`address` AS `paddress`, `profile`.`region` AS `pregion`, @@ -134,13 +148,15 @@ function poco_init(App $a) { logger("Query done", LOGGER_DEBUG); $ret = array(); - if(x($_GET,'sorted')) + if (x($_GET,'sorted')) { $ret['sorted'] = false; - if(x($_GET,'filtered')) + } + if (x($_GET,'filtered')) { $ret['filtered'] = false; - if(x($_GET,'updatedSince') AND !$global) + } + if (x($_GET,'updatedSince') AND !$global) { $ret['updatedSince'] = false; - + } $ret['startIndex'] = (int) $startIndex; $ret['itemsPerPage'] = (int) $itemsPerPage; $ret['totalResults'] = (int) $totalResults; @@ -164,58 +180,61 @@ function poco_init(App $a) { 'generation' => false ); - if((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) - foreach($fields_ret as $k => $v) + if ((! x($_GET,'fields')) || ($_GET['fields'] === '@all')) { + foreach ($fields_ret as $k => $v) { $fields_ret[$k] = true; - else { + } + } else { $fields_req = explode(',',$_GET['fields']); - foreach($fields_req as $f) + foreach ($fields_req as $f) { $fields_ret[trim($f)] = true; + } } - if(is_array($r)) { + if (is_array($r)) { if (dbm::is_result($r)) { foreach ($r as $rr) { if (!isset($rr['generation'])) { - if ($global) + if ($global) { $rr['generation'] = 3; - elseif ($system_mode) + } elseif ($system_mode) { $rr['generation'] = 1; - else + } else { $rr['generation'] = 2; + } } - if (($rr['about'] == "") AND isset($rr['pabout'])) + if (($rr['about'] == "") AND isset($rr['pabout'])) { $rr['about'] = $rr['pabout']; - + } if ($rr['location'] == "") { - if (isset($rr['plocation'])) + if (isset($rr['plocation'])) { $rr['location'] = $rr['plocation']; - + } if (isset($rr['pregion']) AND ($rr['pregion'] != "")) { - if ($rr['location'] != "") + if ($rr['location'] != "") { $rr['location'] .= ", "; - + } $rr['location'] .= $rr['pregion']; } if (isset($rr['pcountry']) AND ($rr['pcountry'] != "")) { - if ($rr['location'] != "") + if ($rr['location'] != "") { $rr['location'] .= ", "; - + } $rr['location'] .= $rr['pcountry']; } } - if (($rr['gender'] == "") AND isset($rr['pgender'])) + if (($rr['gender'] == "") AND isset($rr['pgender'])) { $rr['gender'] = $rr['pgender']; - - if (($rr['keywords'] == "") AND isset($rr['pub_keywords'])) + } + if (($rr['keywords'] == "") AND isset($rr['pub_keywords'])) { $rr['keywords'] = $rr['pub_keywords']; - - if (isset($rr['account-type'])) + } + if (isset($rr['account-type'])) { $rr['contact-type'] = $rr['account-type']; - + } $about = Cache::get("about:".$rr['updated'].":".$rr['nurl']); if (is_null($about)) { $about = bbcode($rr['about'], false, false); @@ -230,111 +249,122 @@ function poco_init(App $a) { } $entry = array(); - if($fields_ret['id']) + if ($fields_ret['id']) { $entry['id'] = (int)$rr['id']; - if($fields_ret['displayName']) - $entry['displayName'] = $rr['name']; - if($fields_ret['aboutMe']) - $entry['aboutMe'] = $about; - if($fields_ret['currentLocation']) - $entry['currentLocation'] = $rr['location']; - if($fields_ret['gender']) - $entry['gender'] = $rr['gender']; - if($fields_ret['generation']) - $entry['generation'] = (int)$rr['generation']; - if($fields_ret['urls']) { - $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile')); - if($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) - $entry['urls'][] = array('value' => 'acct:' . $rr['addr'], 'type' => 'webfinger'); } - if($fields_ret['preferredUsername']) + if ($fields_ret['displayName']) { + $entry['displayName'] = $rr['name']; + } + if ($fields_ret['aboutMe']) { + $entry['aboutMe'] = $about; + } + if ($fields_ret['currentLocation']) { + $entry['currentLocation'] = $rr['location']; + } + if ($fields_ret['gender']) { + $entry['gender'] = $rr['gender']; + } + if ($fields_ret['generation']) { + $entry['generation'] = (int)$rr['generation']; + } + if ($fields_ret['urls']) { + $entry['urls'] = array(array('value' => $rr['url'], 'type' => 'profile')); + if ($rr['addr'] && ($rr['network'] !== NETWORK_MAIL)) { + $entry['urls'][] = array('value' => 'acct:' . $rr['addr'], 'type' => 'webfinger'); + } + } + if ($fields_ret['preferredUsername']) { $entry['preferredUsername'] = $rr['nick']; - if($fields_ret['updated']) { + } + if ($fields_ret['updated']) { if (!$global) { $entry['updated'] = $rr['success_update']; - if ($rr['name-date'] > $entry['updated']) + if ($rr['name-date'] > $entry['updated']) { $entry['updated'] = $rr['name-date']; - - if ($rr['uri-date'] > $entry['updated']) + } + if ($rr['uri-date'] > $entry['updated']) { $entry['updated'] = $rr['uri-date']; - - if ($rr['avatar-date'] > $entry['updated']) + } + if ($rr['avatar-date'] > $entry['updated']) { $entry['updated'] = $rr['avatar-date']; - } else + } + } else { $entry['updated'] = $rr['updated']; - + } $entry['updated'] = date("c", strtotime($entry['updated'])); } - if($fields_ret['photos']) + if ($fields_ret['photos']) { $entry['photos'] = array(array('value' => $rr['photo'], 'type' => 'profile')); - if($fields_ret['network']) { - $entry['network'] = $rr['network']; - if ($entry['network'] == NETWORK_STATUSNET) - $entry['network'] = NETWORK_OSTATUS; - if (($entry['network'] == "") AND ($rr['self'])) - $entry['network'] = NETWORK_DFRN; } - if($fields_ret['tags']) { + if ($fields_ret['network']) { + $entry['network'] = $rr['network']; + if ($entry['network'] == NETWORK_STATUSNET) { + $entry['network'] = NETWORK_OSTATUS; + } + if (($entry['network'] == "") AND ($rr['self'])) { + $entry['network'] = NETWORK_DFRN; + } + } + if ($fields_ret['tags']) { $tags = str_replace(","," ",$rr['keywords']); $tags = explode(" ", $tags); $cleaned = array(); foreach ($tags as $tag) { $tag = trim(strtolower($tag)); - if ($tag != "") + if ($tag != "") { $cleaned[] = $tag; + } } $entry['tags'] = array($cleaned); } - if($fields_ret['address']) { + if ($fields_ret['address']) { $entry['address'] = array(); // Deactivated. It just reveals too much data. (Although its from the default profile) //if (isset($rr['paddress'])) // $entry['address']['streetAddress'] = $rr['paddress']; - if (isset($rr['plocation'])) + if (isset($rr['plocation'])) { $entry['address']['locality'] = $rr['plocation']; - - if (isset($rr['pregion'])) + } + if (isset($rr['pregion'])) { $entry['address']['region'] = $rr['pregion']; - + } // See above //if (isset($rr['ppostalcode'])) // $entry['address']['postalCode'] = $rr['ppostalcode']; - if (isset($rr['pcountry'])) + if (isset($rr['pcountry'])) { $entry['address']['country'] = $rr['pcountry']; + } } - if($fields_ret['contactType']) + if ($fields_ret['contactType']) { $entry['contactType'] = intval($rr['contact-type']); - + } $ret['entry'][] = $entry; } - } - else + } else { $ret['entry'][] = array(); - } - else + } + } else { http_status_exit(500); - + } logger("End of poco", LOGGER_DEBUG); - if($format === 'xml') { + if ($format === 'xml') { header('Content-type: text/xml'); echo replace_macros(get_markup_template('poco_xml.tpl'),array_xmlify(array('$response' => $ret))); killme(); } - if($format === 'json') { + if ($format === 'json') { header('Content-type: application/json'); echo json_encode($ret); killme(); - } - else + } else { http_status_exit(500); - - + } } diff --git a/mod/profiles.php b/mod/profiles.php index 4c6ff926b6..4e82ceaacd 100644 --- a/mod/profiles.php +++ b/mod/profiles.php @@ -233,11 +233,11 @@ function profiles_post(App $a) { $with = ((x($_POST,'with')) ? notags(trim($_POST['with'])) : ''); - if(! strlen($howlong)) - $howlong = '0000-00-00 00:00:00'; - else + if(! strlen($howlong)) { + $howlong = NULL_DATE; + } else { $howlong = datetime_convert(date_default_timezone_get(),'UTC',$howlong); - + } // linkify the relationship target if applicable $withchanged = false; @@ -721,7 +721,7 @@ function profiles_content(App $a) { '$gender' => gender_selector($r[0]['gender']), '$marital' => marital_selector($r[0]['marital']), '$with' => array('with', t("Who: \x28if applicable\x29"), strip_tags($r[0]['with']), t('Examples: cathy123, Cathy Williams, cathy@example.com')), - '$howlong' => array('howlong', t('Since [date]:'), ($r[0]['howlong'] === '0000-00-00 00:00:00' ? '' : datetime_convert('UTC',date_default_timezone_get(),$r[0]['howlong']))), + '$howlong' => array('howlong', t('Since [date]:'), ($r[0]['howlong'] <= NULL_DATE ? '' : datetime_convert('UTC',date_default_timezone_get(),$r[0]['howlong']))), '$sexual' => sexpref_selector($r[0]['sexual']), '$about' => array('about', t('Tell us about yourself...'), $r[0]['about']), '$xmpp' => array('xmpp', t('XMPP (Jabber) address:'), $r[0]['xmpp'], t("The XMPP address will be propagated to your contacts so that they can follow you.")), diff --git a/mod/settings.php b/mod/settings.php index 32ccaf541a..5c9c439e0a 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -872,7 +872,7 @@ function settings_content(App $a) { $mail_pubmail = ((dbm::is_result($r)) ? $r[0]['pubmail'] : 0); $mail_action = ((dbm::is_result($r)) ? $r[0]['action'] : 0); $mail_movetofolder = ((dbm::is_result($r)) ? $r[0]['movetofolder'] : ''); - $mail_chk = ((dbm::is_result($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00'); + $mail_chk = ((dbm::is_result($r)) ? $r[0]['last_check'] : NULL_DATE); $tpl = get_markup_template("settings_connectors.tpl"); diff --git a/mod/worker.php b/mod/worker.php index c202a28d64..4949b830f4 100644 --- a/mod/worker.php +++ b/mod/worker.php @@ -10,7 +10,7 @@ use \Friendica\Core\PConfig; function worker_init($a){ - if (!Config::get("system", "frontend_worker") OR !Config::get("system", "worker")) { + if (!Config::get("system", "frontend_worker")) { return; } diff --git a/update.php b/update.php index 64259bbb1d..3bce492682 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ 1) +if ($argc > 1) { $maint_mode = intval($argv[1]); -set_config('system', 'maintenance', $maint_mode); +} -if($maint_mode) +Config::set('system', 'maintenance', $maint_mode); + +if ($maint_mode AND ($argc > 2)) { + $reason_arr = $argv; + array_shift($reason_arr); + array_shift($reason_arr); + + $reason = implode(' ', $reason_arr); + Config::set('system', 'maintenance_reason', $reason); +} else { + Config::set('system', 'maintenance_reason', ''); +} + +if ($maint_mode) { $mode_str = "maintenance mode"; -else +} else { $mode_str = "normal mode"; +} + +echo "\n\tSystem set in $mode_str\n"; + +if ($reason != '') { + echo "\tMaintenance reason: $reason\n\n"; +} else { + echo "\n"; +} -echo "\n\tSystem set in $mode_str\n\n"; echo "Usage:\n\n"; -echo "\tphp {$argv[0]} [1]\tSet the system in maintenance mode\n"; +echo "\tphp {$argv[0]} [1] [Maintenance reason]\tSet the system in maintenance mode\n"; echo "\tphp {$argv[0]} 0 \tSet the system in normal mode\n\n"; - diff --git a/view/templates/admin_site.tpl b/view/templates/admin_site.tpl index e670222d4d..fdba195f17 100644 --- a/view/templates/admin_site.tpl +++ b/view/templates/admin_site.tpl @@ -119,16 +119,11 @@ {{include file="field_input.tpl" field=$proxy}} {{include file="field_input.tpl" field=$proxyuser}} {{include file="field_input.tpl" field=$timeout}} - {{if NOT $worker.2}} - {{include file="field_input.tpl" field=$delivery_interval}} - {{include file="field_input.tpl" field=$poll_interval}} - {{/if}} {{include file="field_input.tpl" field=$maxloadavg}} {{include file="field_input.tpl" field=$maxloadavg_frontend}} {{include file="field_input.tpl" field=$optimize_max_tablesize}} {{include file="field_input.tpl" field=$optimize_fragmentation}} {{include file="field_input.tpl" field=$abandon_days}} - {{include file="field_input.tpl" field=$lockpath}} {{include file="field_input.tpl" field=$temppath}} {{include file="field_input.tpl" field=$basepath}} {{include file="field_checkbox.tpl" field=$suppress_tags}} @@ -154,13 +149,10 @@

{{$worker_title}}

- {{include file="field_checkbox.tpl" field=$worker}} - {{if $worker.2}} - {{include file="field_input.tpl" field=$worker_queues}} - {{include file="field_checkbox.tpl" field=$worker_dont_fork}} - {{include file="field_checkbox.tpl" field=$worker_fastlane}} - {{include file="field_checkbox.tpl" field=$worker_frontend}} - {{/if}} + {{include file="field_input.tpl" field=$worker_queues}} + {{include file="field_checkbox.tpl" field=$worker_dont_fork}} + {{include file="field_checkbox.tpl" field=$worker_fastlane}} + {{include file="field_checkbox.tpl" field=$worker_frontend}}
diff --git a/view/templates/admin_summary.tpl b/view/templates/admin_summary.tpl index c8e8af2294..a8243b6149 100644 --- a/view/templates/admin_summary.tpl +++ b/view/templates/admin_summary.tpl @@ -11,7 +11,7 @@
{{$queues.label}}
-
{{$queues.deliverq}} - {{$queues.queue}}{{if $workeractive}} - {{$queues.workerq}}{{/if}}
+
{{$queues.deliverq}} - {{$queues.queue}} - {{$queues.workerq}}
{{$pending.0}}
diff --git a/view/templates/maintenance.tpl b/view/templates/maintenance.tpl index f43da542f8..e26af299f8 100644 --- a/view/templates/maintenance.tpl +++ b/view/templates/maintenance.tpl @@ -1,2 +1,3 @@ -
{{$sysdown}}
+

{{$sysdown}}

+
{{$reason}}
diff --git a/view/theme/frio/js/textedit.js b/view/theme/frio/js/textedit.js index 02191f33de..d212ee0038 100644 --- a/view/theme/frio/js/textedit.js +++ b/view/theme/frio/js/textedit.js @@ -181,7 +181,7 @@ function dropItem(url, elementId) { $el.fadeTo('fast', 0.33, function () { $.get(url).then(function() { $el.remove(); - }).error(function() { + }).fail(function() { // @todo Show related error message $el.show(); }).always(function() {