define ( 'FRIENDICA_CODENAME', 'Asparagus');
define ( 'FRIENDICA_VERSION', '3.5-dev' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
-define ( 'DB_UPDATE_VERSION', 1191 );
+define ( 'DB_UPDATE_VERSION', 1194 );
+
+/**
+ * @brief Constant with a HTML line break.
+ *
+ * Contains a HTML line break (br) element and a real carriage return with line
+ * feed for the source.
+ * This can be used in HTML and JavaScript where needed a line break.
+ */
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
/**
- *
- * Image storage quality. Lower numbers save space at cost of image detail.
+ * @brief Image storage quality.
+ *
+ * Lower numbers save space at cost of image detail.
* For ease of upgrade, please do not change here. Change jpeg quality with
* $a->config['system']['jpeg_quality'] = n;
* in .htconfig.php, where n is netween 1 and 100, and with very poor results
define ( 'DEFAULT_DB_ENGINE', 'MyISAM' );
/**
+ * @name SSL Policy
+ *
* SSL redirection policies
+ * @{
*/
-
define ( 'SSL_POLICY_NONE', 0 );
define ( 'SSL_POLICY_FULL', 1 );
define ( 'SSL_POLICY_SELFSIGN', 2 );
-
+/* @}*/
/**
+ * @name Logger
+ *
* log levels
+ * @{
*/
-
define ( 'LOGGER_NORMAL', 0 );
define ( 'LOGGER_TRACE', 1 );
define ( 'LOGGER_DEBUG', 2 );
define ( 'LOGGER_DATA', 3 );
define ( 'LOGGER_ALL', 4 );
+/* @}*/
/**
- * cache levels
+ * @name Cache
+ *
+ * Cache levels
+ * @{
*/
-
define ( 'CACHE_MONTH', 0 );
define ( 'CACHE_WEEK', 1 );
define ( 'CACHE_DAY', 2 );
define ( 'CACHE_HOUR', 3 );
+/* @}*/
/**
- * registration policies
+ * @name Register
+ *
+ * Registration policies
+ * @{
*/
-
define ( 'REGISTER_CLOSED', 0 );
define ( 'REGISTER_APPROVE', 1 );
define ( 'REGISTER_OPEN', 2 );
+/** @}*/
/**
- * relationship types
+ * @name Contact_is
+ *
+ * Relationship types
+ * @{
*/
-
define ( 'CONTACT_IS_FOLLOWER', 1);
define ( 'CONTACT_IS_SHARING', 2);
define ( 'CONTACT_IS_FRIEND', 3);
-
+/** @}*/
/**
+ * @name Update
+ *
* DB update return values
+ * @{
*/
-
define ( 'UPDATE_SUCCESS', 0);
define ( 'UPDATE_FAILED', 1);
+/** @}*/
/**
- *
- * page/profile types
+ * @name page/profile types
*
* PAGE_NORMAL is a typical personal profile account
* PAGE_SOAPBOX automatically approves all friend requests as CONTACT_IS_SHARING, (readonly)
* write access to wall and comments (no email and not included in page owner's ACL lists)
* PAGE_FREELOVE automatically approves all friend requests as full friends (CONTACT_IS_FRIEND).
*
+ * @{
*/
-
define ( 'PAGE_NORMAL', 0 );
define ( 'PAGE_SOAPBOX', 1 );
define ( 'PAGE_COMMUNITY', 2 );
define ( 'PAGE_FREELOVE', 3 );
define ( 'PAGE_BLOG', 4 );
define ( 'PAGE_PRVGROUP', 5 );
+/** @}*/
-// Type of the community page
+/**
+ * @name CP
+ *
+ * Type of the community page
+ * @{
+ */
define ( 'CP_NO_COMMUNITY_PAGE', -1 );
define ( 'CP_USERS_ON_SERVER', 0 );
define ( 'CP_GLOBAL_COMMUNITY', 1 );
+/** @}*/
/**
+ * @name Network
+ *
* Network and protocol family types
+ * @{
*/
-
define ( 'NETWORK_DFRN', 'dfrn'); // Friendica, Mistpark, other DFRN implementations
define ( 'NETWORK_ZOT', 'zot!'); // Zot!
define ( 'NETWORK_OSTATUS', 'stat'); // status.net, identi.ca, GNU-social, other OStatus implementations
define ( 'NETWORK_NEWS', 'nntp'); // Network News Transfer Protocol
define ( 'NETWORK_ICALENDAR', 'ical'); // iCalendar
define ( 'NETWORK_PHANTOM', 'unkn'); // Place holder
+/** @}*/
/**
* These numbers are used in stored permissions
/**
- * email notification options
+ * @name Notify
+ *
+ * Email notification options
+ * @{
*/
-
define ( 'NOTIFY_INTRO', 0x0001 );
define ( 'NOTIFY_CONFIRM', 0x0002 );
define ( 'NOTIFY_WALL', 0x0004 );
define ( 'NOTIFY_SHARE', 0x0400 );
define ( 'NOTIFY_SYSTEM', 0x8000 );
+/* @}*/
/**
+ * @name Term
+ *
* Tag/term types
+ * @{
*/
-
define ( 'TERM_UNKNOWN', 0 );
define ( 'TERM_HASHTAG', 1 );
define ( 'TERM_MENTION', 2 );
/**
- * various namespaces we may need to parse
+ * @name Namespaces
+ *
+ * Various namespaces we may need to parse
+ * @{
*/
-
define ( 'NAMESPACE_ZOT', 'http://purl.org/zot' );
define ( 'NAMESPACE_DFRN' , 'http://purl.org/macgirvin/dfrn/1.0' );
define ( 'NAMESPACE_THREAD' , 'http://purl.org/syndication/thread/1.0' );
define ( 'NAMESPACE_OSTATUS', 'http://ostatus.org/schema/1.0' );
define ( 'NAMESPACE_STATUSNET', 'http://status.net/schema/api/1/' );
define ( 'NAMESPACE_ATOM1', 'http://www.w3.org/2005/Atom' );
+/* @}*/
+
/**
- * activity stream defines
+ * @name Activity
+ *
+ * Activity stream defines
+ * @{
*/
-
define ( 'ACTIVITY_LIKE', NAMESPACE_ACTIVITY_SCHEMA . 'like' );
define ( 'ACTIVITY_DISLIKE', NAMESPACE_DFRN . '/dislike' );
define ( 'ACTIVITY_ATTEND', NAMESPACE_ZOT . '/activity/attendyes' );
define ( 'ACTIVITY_OBJ_TAGTERM', NAMESPACE_DFRN . '/tagterm' );
define ( 'ACTIVITY_OBJ_PROFILE', NAMESPACE_DFRN . '/profile' );
define ( 'ACTIVITY_OBJ_QUESTION', 'http://activityschema.org/object/question' );
+/* @}*/
/**
- * item weight for query ordering
+ * @name Gravity
+ *
+ * Item weight for query ordering
+ * @{
*/
-
define ( 'GRAVITY_PARENT', 0);
define ( 'GRAVITY_LIKE', 3);
define ( 'GRAVITY_COMMENT', 6);
+/* @}*/
+
/**
*
public $is_tablet;
public $is_friendica_app;
public $performance = array();
+ public $callstack = array();
public $nav_sel;
private $cached_profile_image;
private $cached_profile_picdate;
+ private static $a;
+
/**
- * App constructor.
+ * @brief App constructor.
*/
function __construct() {
$this->performance["marktime"] = 0;
$this->performance["markstart"] = microtime(true);
+ $this->callstack["database"] = array();
+ $this->callstack["network"] = array();
+ $this->callstack["file"] = array();
+ $this->callstack["rendering"] = array();
+ $this->callstack["parser"] = array();
+
$this->config = array();
$this->page = array();
$this->pager= array();
if(x($_SERVER,'SERVER_PORT') && $_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443)
$this->hostname .= ':' . $_SERVER['SERVER_PORT'];
- /**
+ /*
* Figure out if we are running at the top of a domain
* or in a sub-directory and adjust accordingly
*/
$this->cmd = 'profile/' . substr($this->cmd,2);
- /**
+ /*
*
* Break the URL path into C style argc/argv style arguments for our
* modules. Given "http://example.com/module/arg1/arg2", $this->argc
$this->module = 'home';
}
- /**
+ /*
* See if there is any page number information, and initialise
* pagination
*/
$this->pager['start'] = 0;
$this->pager['total'] = 0;
- /**
+ /*
* Detect mobile devices
*/
// Friendica-Client
$this->is_friendica_app = ($_SERVER['HTTP_USER_AGENT'] == "Apache-HttpClient/UNAVAILABLE (java 1.4)");
- /**
+ /*
* register template engines
*/
$dc = get_declared_classes();
}
}
+ self::$a = $this;
+
}
function get_basepath() {
function get_baseurl($ssl = false) {
+ // Is the function called statically?
+ if (!is_object($this))
+ return(self::$a->get_baseurl($ssl));
+
$scheme = $this->scheme;
if((x($this->config,'system')) && (x($this->config['system'],'ssl_policy'))) {
}
function get_cached_avatar_image($avatar_image){
+ return $avatar_image;
+
+ // The following code is deactivated. It doesn't seem to make any sense and it slows down the system.
+ /*
if($this->cached_profile_image[$avatar_image])
return $this->cached_profile_image[$avatar_image];
}
}
return $this->cached_profile_image[$avatar_image];
+ */
}
$this->performance[$value] += (float)$duration;
$this->performance["marktime"] += (float)$duration;
+
+ // Trace the different functions with their timestamps
+ $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 5);
+
+ array_shift($trace);
+
+ $function = array();
+ foreach ($trace AS $func)
+ $function[] = $func["function"];
+
+ $function = implode(", ", $function);
+
+ $this->callstack[$value][$function] += (float)$duration;
+
}
function mark_timestamp($mark) {
return true;
}
-
-function check_plugins(&$a) {
-
- /**
- *
- * Synchronise plugins:
- *
- * $a->config['system']['addon'] contains a comma-separated list of names
- * of plugins/addons which are used on this system.
- * Go through the database list of already installed addons, and if we have
- * an entry, but it isn't in the config list, call the uninstall procedure
- * and mark it uninstalled in the database (for now we'll remove it).
- * Then go through the config list and if we have a plugin that isn't installed,
- * call the install procedure and add it to the database.
- *
+/**
+ * @brief Synchronise plugins:
+ *
+ * $a->config['system']['addon'] contains a comma-separated list of names
+ * of plugins/addons which are used on this system.
+ * Go through the database list of already installed addons, and if we have
+ * an entry, but it isn't in the config list, call the uninstall procedure
+ * and mark it uninstalled in the database (for now we'll remove it).
+ * Then go through the config list and if we have a plugin that isn't installed,
+ * call the install procedure and add it to the database.
+ *
+ * @param App $a
+ *
*/
+function check_plugins(&$a) {
$r = q("SELECT * FROM `addon` WHERE `installed` = 1");
if(count($r))
$prefix = substr($prefix, 0, $size - 22);
return(str_replace(".", "", uniqid($prefix, true)));
} else {
- $prefix = substr($prefix, 0, $size - 13);
+ $prefix = substr($prefix, 0, max($size - 13, 0));
return(uniqid($prefix));
}
}
*
* @return string
* Returns the complete html for inserting into the page
+ *
+ * @hooks 'login_hook'
+ * string $o
*/
function login($register = false, $hiddens=false) {
$a = get_app();
}
/**
+ * @brief Wrap calls to proc_close(proc_open()) and call hook
+ * so plugins can take part in process :)
*
- * Wrap calls to proc_close(proc_open()) and call hook
- * so plugins can take part in process :)
- *
- * args:
- * $cmd program to run
- * next args are passed as $cmd command line
- *
+ * @param string $cmd program to run
+ *
+ * next args are passed as $cmd command line
* e.g.: proc_run("ls","-la","/tmp");
*
- * $cmd and string args are surrounded with ""
+ * @note $cmd and string args are surrounded with ""
+ *
+ * @hooks 'proc_run'
+ * array $arr
*/
function proc_run($cmd){
}
function set_template_engine(&$a, $engine = 'internal') {
-// This function is no longer necessary, but keep it as a wrapper to the class method
-// to avoid breaking themes again unnecessarily
+/// @note This function is no longer necessary, but keep it as a wrapper to the class method
+/// to avoid breaking themes again unnecessarily
$a->set_template_engine($engine);
}
return max($load_arr);
}
+
+/**
+ * @brief get c-style args
+ *
+ * @return int
+ */
+function argc() {
+ return get_app()->argc;
+}
+
+/**
+ * @brief Returns the value of a argv key
+ *
+ * @param int $x argv key
+ * @return string Value of the argv key
+ */
+function argv($x) {
+ if(array_key_exists($x,get_app()->argv))
+ return get_app()->argv[$x];
+
+ return '';
+}