Coding Standards

Guess who got phpcs configured.
Updated phpcs.xml based on Developer_Intro document.
This commit is contained in:
Adam Magness 2017-11-08 17:02:50 -05:00
parent ca5d5acb7e
commit d7dc51ecc1
7 changed files with 1404 additions and 1008 deletions

View file

@ -1,16 +1,16 @@
<?php <?php
/**
* System Configuration Class
*
* @file include/Core/Config.php
*
* @brief Contains the class with methods for system configuration
*/
namespace Friendica\Core; namespace Friendica\Core;
use Friendica\Database\DBM; use Friendica\Database\DBM;
use dba; use dba;
/**
* @file include/Core/Config.php
*
* @brief Contains the class with methods for system configuration
*/
/** /**
* @brief Arbitrary sytem configuration storage * @brief Arbitrary sytem configuration storage
* Note: * Note:
@ -87,7 +87,6 @@ class Config {
$a = get_app(); $a = get_app();
if (!$refresh) { if (!$refresh) {
// Do we have the cached value? Then return it // Do we have the cached value? Then return it
if (isset(self::$cache[$family][$key])) { if (isset(self::$cache[$family][$key])) {
if (self::$cache[$family][$key] === '!<unset>!') { if (self::$cache[$family][$key] === '!<unset>!') {
@ -108,7 +107,6 @@ class Config {
self::$in_db[$family][$key] = true; self::$in_db[$family][$key] = true;
return $val; return $val;
} elseif (isset($a->config[$family][$key])) { } elseif (isset($a->config[$family][$key])) {
// Assign the value (mostly) from the .htconfig.php to the cache // Assign the value (mostly) from the .htconfig.php to the cache
self::$cache[$family][$key] = $a->config[$family][$key]; self::$cache[$family][$key] = $a->config[$family][$key];
self::$in_db[$family][$key] = false; self::$in_db[$family][$key] = false;

View file

@ -1,10 +1,10 @@
<?php <?php
namespace Friendica\Core;
/** /**
* @file src/Core/NotificationsManager.php * @file src/Core/NotificationsManager.php
* @brief Methods for read and write notifications from/to database * @brief Methods for read and write notifications from/to database
* or for formatting notifications * or for formatting notifications
*/ */
namespace Friendica\Core;
use Friendica\Core\Pconfig; use Friendica\Core\Pconfig;
use Friendica\Core\System; use Friendica\Core\System;
@ -19,10 +19,15 @@ require_once 'include/Contact.php';
* @brief Methods for read and write notifications from/to database * @brief Methods for read and write notifications from/to database
* or for formatting notifications * or for formatting notifications
*/ */
class NotificationsManager { class NotificationsManager
{
private $a; private $a;
public function __construct() { /**
* Constructor
*/
public function __construct()
{
$this->a = get_app(); $this->a = get_app();
} }
@ -38,14 +43,15 @@ class NotificationsManager {
* - msg_html: message as html string * - msg_html: message as html string
* - msg_plain: message as plain text string * - msg_plain: message as plain text string
*/ */
private function _set_extra($notes) { private function _set_extra($notes)
{
$rets = array(); $rets = array();
foreach($notes as $n) { foreach ($notes as $n) {
$local_time = datetime_convert('UTC',date_default_timezone_get(),$n['date']); $local_time = datetime_convert('UTC', date_default_timezone_get(), $n['date']);
$n['timestamp'] = strtotime($local_time); $n['timestamp'] = strtotime($local_time);
$n['date_rel'] = relative_date($n['date']); $n['date_rel'] = relative_date($n['date']);
$n['msg_html'] = bbcode($n['msg'], false, false, false, false); $n['msg_html'] = bbcode($n['msg'], false, false, false, false);
$n['msg_plain'] = explode("\n",trim(html2plain($n['msg_html'], 0)))[0]; $n['msg_plain'] = explode("\n", trim(html2plain($n['msg_html'], 0)))[0];
$rets[] = $n; $rets[] = $n;
} }
@ -56,16 +62,18 @@ class NotificationsManager {
/** /**
* @brief Get all notifications for local_user() * @brief Get all notifications for local_user()
* *
* @param array $filter optional Array "column name"=>value: filter query by columns values * @param array $filter optional Array "column name"=>value: filter query by columns values
* @param string $order optional Space separated list of column to sort by. prepend name with "+" to sort ASC, "-" to sort DESC. Default to "-date" * @param string $order optional Space separated list of column to sort by.
* @param string $limit optional Query limits * Prepend name with "+" to sort ASC, "-" to sort DESC. Default to "-date"
* @param string $limit optional Query limits
* *
* @return array of results or false on errors * @return array of results or false on errors
*/ */
public function getAll($filter = array(), $order="-date", $limit="") { public function getAll($filter = array(), $order = "-date", $limit = "")
{
$filter_str = array(); $filter_str = array();
$filter_sql = ""; $filter_sql = "";
foreach($filter as $column => $value) { foreach ($filter as $column => $value) {
$filter_str[] = sprintf("`%s` = '%s'", $column, dbesc($value)); $filter_str[] = sprintf("`%s` = '%s'", $column, dbesc($value));
} }
if (count($filter_str)>0) { if (count($filter_str)>0) {
@ -74,29 +82,31 @@ class NotificationsManager {
$aOrder = explode(" ", $order); $aOrder = explode(" ", $order);
$asOrder = array(); $asOrder = array();
foreach($aOrder as $o) { foreach ($aOrder as $o) {
$dir = "asc"; $dir = "asc";
if ($o[0]==="-") { if ($o[0]==="-") {
$dir = "desc"; $dir = "desc";
$o = substr($o,1); $o = substr($o, 1);
} }
if ($o[0]==="+") { if ($o[0]==="+") {
$dir = "asc"; $dir = "asc";
$o = substr($o,1); $o = substr($o, 1);
} }
$asOrder[] = "$o $dir"; $asOrder[] = "$o $dir";
} }
$order_sql = implode(", ", $asOrder); $order_sql = implode(", ", $asOrder);
if($limit!="") if ($limit != "") {
$limit = " LIMIT ".$limit; $limit = " LIMIT ".$limit;
}
$r = q("SELECT * FROM `notify` WHERE `uid` = %d $filter_sql ORDER BY $order_sql $limit", $r = q(
"SELECT * FROM `notify` WHERE `uid` = %d $filter_sql ORDER BY $order_sql $limit",
intval(local_user()) intval(local_user())
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $this->_set_extra($r); return $this->_set_extra($r);
}
return false; return false;
} }
@ -104,11 +114,13 @@ class NotificationsManager {
/** /**
* @brief Get one note for local_user() by $id value * @brief Get one note for local_user() by $id value
* *
* @param int $id * @param int $id identity
* @return array note values or null if not found * @return array note values or null if not found
*/ */
public function getByID($id) { public function getByID($id)
$r = q("SELECT * FROM `notify` WHERE `id` = %d AND `uid` = %d LIMIT 1", {
$r = q(
"SELECT * FROM `notify` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($id), intval($id),
intval(local_user()) intval(local_user())
); );
@ -121,12 +133,14 @@ class NotificationsManager {
/** /**
* @brief set seen state of $note of local_user() * @brief set seen state of $note of local_user()
* *
* @param array $note * @param array $note note array
* @param bool $seen optional true or false, default true * @param bool $seen optional true or false, default true
* @return bool true on success, false on errors * @return bool true on success, false on errors
*/ */
public function setSeen($note, $seen = true) { public function setSeen($note, $seen = true)
return q("UPDATE `notify` SET `seen` = %d WHERE ( `link` = '%s' OR ( `parent` != 0 AND `parent` = %d AND `otype` = '%s' )) AND `uid` = %d", {
return q(
"UPDATE `notify` SET `seen` = %d WHERE ( `link` = '%s' OR ( `parent` != 0 AND `parent` = %d AND `otype` = '%s' )) AND `uid` = %d",
intval($seen), intval($seen),
dbesc($note['link']), dbesc($note['link']),
intval($note['parent']), intval($note['parent']),
@ -141,8 +155,10 @@ class NotificationsManager {
* @param bool $seen optional true or false. default true * @param bool $seen optional true or false. default true
* @return bool true on success, false on error * @return bool true on success, false on error
*/ */
public function setAllSeen($seen = true) { public function setAllSeen($seen = true)
return q("UPDATE `notify` SET `seen` = %d WHERE `uid` = %d", {
return q(
"UPDATE `notify` SET `seen` = %d WHERE `uid` = %d",
intval($seen), intval($seen),
intval(local_user()) intval(local_user())
); );
@ -153,7 +169,8 @@ class NotificationsManager {
* *
* @return array with with notifications TabBar data * @return array with with notifications TabBar data
*/ */
public function getTabs() { public function getTabs()
{
$tabs = array( $tabs = array(
array( array(
'label' => t('System'), 'label' => t('System'),
@ -198,8 +215,8 @@ class NotificationsManager {
/** /**
* @brief Format the notification query in an usable array * @brief Format the notification query in an usable array
* *
* @param array $notifs The array from the db query * @param array $notifs The array from the db query
* @param string $ident The notifications identifier (e.g. network) * @param string $ident The notifications identifier (e.g. network)
* @return array * @return array
* string 'label' => The type of the notification * string 'label' => The type of the notification
* string 'link' => URL to the source * string 'link' => URL to the source
@ -210,13 +227,12 @@ class NotificationsManager {
* string 'ago' => T relative date of the notification * string 'ago' => T relative date of the notification
* bool 'seen' => Is the notification marked as "seen" * bool 'seen' => Is the notification marked as "seen"
*/ */
private function formatNotifs($notifs, $ident = "") { private function formatNotifs($notifs, $ident = "")
{
$notif = array(); $notif = array();
$arr = array(); $arr = array();
if (DBM::is_result($notifs)) { if (DBM::is_result($notifs)) {
foreach ($notifs as $it) { foreach ($notifs as $it) {
// Because we use different db tables for the notification query // Because we use different db tables for the notification query
// we have sometimes $it['unseen'] and sometimes $it['seen]. // we have sometimes $it['unseen'] and sometimes $it['seen].
@ -257,11 +273,10 @@ class NotificationsManager {
: sprintf(t("%s commented on %s's post"), $it['author-name'], $it['pname'])); : sprintf(t("%s commented on %s's post"), $it['author-name'], $it['pname']));
$default_item_when = datetime_convert('UTC', date_default_timezone_get(), $it['created'], 'r'); $default_item_when = datetime_convert('UTC', date_default_timezone_get(), $it['created'], 'r');
$default_item_ago = relative_date($it['created']); $default_item_ago = relative_date($it['created']);
} }
// Transform the different types of notification in an usable array // Transform the different types of notification in an usable array
switch ($it['verb']){ switch ($it['verb']) {
case ACTIVITY_LIKE: case ACTIVITY_LIKE:
$notif = array( $notif = array(
'label' => 'like', 'label' => 'like',
@ -362,7 +377,6 @@ class NotificationsManager {
} }
return $arr; return $arr;
} }
/** /**
@ -372,13 +386,16 @@ class NotificationsManager {
* which aren't marked as "seen" * which aren't marked as "seen"
* @return int Number of network notifications * @return int Number of network notifications
*/ */
private function networkTotal($seen = 0) { private function networkTotal($seen = 0)
{
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT COUNT(*) AS `total` $r = q(
"SELECT COUNT(*) AS `total`
FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
WHERE `item`.`visible` = 1 AND `pitem`.`parent` != 0 AND WHERE `item`.`visible` = 1 AND `pitem`.`parent` != 0 AND
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
@ -386,8 +403,9 @@ class NotificationsManager {
intval(local_user()) intval(local_user())
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
@ -398,25 +416,28 @@ class NotificationsManager {
* @param int|string $seen * @param int|string $seen
* If 0 only include notifications into the query * If 0 only include notifications into the query
* which aren't marked as "seen" * which aren't marked as "seen"
* @param int $start Start the query at this point * @param int $start Start the query at this point
* @param int $limit Maximum number of query results * @param int $limit Maximum number of query results
* *
* @return array with * @return array with
* string 'ident' => Notification identifier * string 'ident' => Notification identifier
* int 'total' => Total number of available network notifications * int 'total' => Total number of available network notifications
* array 'notifications' => Network notifications * array 'notifications' => Network notifications
*/ */
public function networkNotifs($seen = 0, $start = 0, $limit = 80) { public function networkNotifs($seen = 0, $start = 0, $limit = 80)
{
$ident = 'network'; $ident = 'network';
$total = $this->networkTotal($seen); $total = $this->networkTotal($seen);
$notifs = array(); $notifs = array();
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, $r = q(
"SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`,
`item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`,
`pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid`
FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
@ -424,13 +445,14 @@ class NotificationsManager {
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
$sql_seen $sql_seen
ORDER BY `item`.`created` DESC LIMIT %d, %d ", ORDER BY `item`.`created` DESC LIMIT %d, %d ",
intval(local_user()), intval(local_user()),
intval($start), intval($start),
intval($limit) intval($limit)
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
$notifs = $this->formatNotifs($r, $ident); $notifs = $this->formatNotifs($r, $ident);
}
$arr = array ( $arr = array (
'notifications' => $notifs, 'notifications' => $notifs,
@ -448,18 +470,22 @@ class NotificationsManager {
* which aren't marked as "seen" * which aren't marked as "seen"
* @return int Number of system notifications * @return int Number of system notifications
*/ */
private function systemTotal($seen = 0) { private function systemTotal($seen = 0)
{
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `seen` = 0 "; $sql_seen = " AND `seen` = 0 ";
}
$r = q("SELECT COUNT(*) AS `total` FROM `notify` WHERE `uid` = %d $sql_seen", $r = q(
"SELECT COUNT(*) AS `total` FROM `notify` WHERE `uid` = %d $sql_seen",
intval(local_user()) intval(local_user())
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
@ -470,32 +496,36 @@ class NotificationsManager {
* @param int|string $seen * @param int|string $seen
* If 0 only include notifications into the query * If 0 only include notifications into the query
* which aren't marked as "seen" * which aren't marked as "seen"
* @param int $start Start the query at this point * @param int $start Start the query at this point
* @param int $limit Maximum number of query results * @param int $limit Maximum number of query results
* *
* @return array with * @return array with
* string 'ident' => Notification identifier * string 'ident' => Notification identifier
* int 'total' => Total number of available system notifications * int 'total' => Total number of available system notifications
* array 'notifications' => System notifications * array 'notifications' => System notifications
*/ */
public function systemNotifs($seen = 0, $start = 0, $limit = 80) { public function systemNotifs($seen = 0, $start = 0, $limit = 80)
{
$ident = 'system'; $ident = 'system';
$total = $this->systemTotal($seen); $total = $this->systemTotal($seen);
$notifs = array(); $notifs = array();
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `seen` = 0 "; $sql_seen = " AND `seen` = 0 ";
}
$r = q("SELECT `id`, `url`, `photo`, `msg`, `date`, `seen` FROM `notify` $r = q(
"SELECT `id`, `url`, `photo`, `msg`, `date`, `seen` FROM `notify`
WHERE `uid` = %d $sql_seen ORDER BY `date` DESC LIMIT %d, %d ", WHERE `uid` = %d $sql_seen ORDER BY `date` DESC LIMIT %d, %d ",
intval(local_user()), intval(local_user()),
intval($start), intval($start),
intval($limit) intval($limit)
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
$notifs = $this->formatNotifs($r, $ident); $notifs = $this->formatNotifs($r, $ident);
}
$arr = array ( $arr = array (
'notifications' => $notifs, 'notifications' => $notifs,
@ -511,12 +541,14 @@ class NotificationsManager {
* *
* @return string The additional sql query * @return string The additional sql query
*/ */
private function _personal_sql_extra() { private function _personal_sql_extra()
{
$myurl = System::baseUrl(true) . '/profile/'. $this->a->user['nickname']; $myurl = System::baseUrl(true) . '/profile/'. $this->a->user['nickname'];
$myurl = substr($myurl,strpos($myurl,'://')+3); $myurl = substr($myurl, strpos($myurl, '://') + 3);
$myurl = str_replace(array('www.','.'),array('','\\.'),$myurl); $myurl = str_replace(array('www.','.'), array('','\\.'), $myurl);
$diasp_url = str_replace('/profile/','/u/',$myurl); $diasp_url = str_replace('/profile/', '/u/', $myurl);
$sql_extra = sprintf(" AND ( `item`.`author-link` regexp '%s' OR `item`.`tag` regexp '%s' OR `item`.`tag` regexp '%s' ) ", $sql_extra = sprintf(
" AND ( `item`.`author-link` regexp '%s' OR `item`.`tag` regexp '%s' OR `item`.`tag` regexp '%s' ) ",
dbesc($myurl . '$'), dbesc($myurl . '$'),
dbesc($myurl . '\\]'), dbesc($myurl . '\\]'),
dbesc($diasp_url . '\\]') dbesc($diasp_url . '\\]')
@ -532,14 +564,17 @@ class NotificationsManager {
* which aren't marked as "seen" * which aren't marked as "seen"
* @return int Number of personal notifications * @return int Number of personal notifications
*/ */
private function personalTotal($seen = 0) { private function personalTotal($seen = 0)
{
$sql_seen = ""; $sql_seen = "";
$sql_extra = $this->_personal_sql_extra(); $sql_extra = $this->_personal_sql_extra();
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT COUNT(*) AS `total` $r = q(
"SELECT COUNT(*) AS `total`
FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
WHERE `item`.`visible` = 1 WHERE `item`.`visible` = 1
$sql_extra $sql_extra
@ -548,8 +583,9 @@ class NotificationsManager {
intval(local_user()) intval(local_user())
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
@ -560,25 +596,28 @@ class NotificationsManager {
* @param int|string $seen * @param int|string $seen
* If 0 only include notifications into the query * If 0 only include notifications into the query
* which aren't marked as "seen" * which aren't marked as "seen"
* @param int $start Start the query at this point * @param int $start Start the query at this point
* @param int $limit Maximum number of query results * @param int $limit Maximum number of query results
* *
* @return array with * @return array with
* string 'ident' => Notification identifier * string 'ident' => Notification identifier
* int 'total' => Total number of available personal notifications * int 'total' => Total number of available personal notifications
* array 'notifications' => Personal notifications * array 'notifications' => Personal notifications
*/ */
public function personalNotifs($seen = 0, $start = 0, $limit = 80) { public function personalNotifs($seen = 0, $start = 0, $limit = 80)
{
$ident = 'personal'; $ident = 'personal';
$total = $this->personalTotal($seen); $total = $this->personalTotal($seen);
$sql_extra = $this->_personal_sql_extra(); $sql_extra = $this->_personal_sql_extra();
$notifs = array(); $notifs = array();
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, $r = q(
"SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`,
`item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`,
`pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid`
FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
@ -586,14 +625,15 @@ class NotificationsManager {
$sql_extra $sql_extra
$sql_seen $sql_seen
AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 AND `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
ORDER BY `item`.`created` DESC LIMIT %d, %d " , ORDER BY `item`.`created` DESC LIMIT %d, %d ",
intval(local_user()), intval(local_user()),
intval($start), intval($start),
intval($limit) intval($limit)
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
$notifs = $this->formatNotifs($r, $ident); $notifs = $this->formatNotifs($r, $ident);
}
$arr = array ( $arr = array (
'notifications' => $notifs, 'notifications' => $notifs,
@ -611,21 +651,25 @@ class NotificationsManager {
* which aren't marked as "seen" * which aren't marked as "seen"
* @return int Number of home notifications * @return int Number of home notifications
*/ */
private function homeTotal($seen = 0) { private function homeTotal($seen = 0)
{
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT COUNT(*) AS `total` FROM `item` $r = q(
"SELECT COUNT(*) AS `total` FROM `item`
WHERE `item`.`visible` = 1 AND WHERE `item`.`visible` = 1 AND
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1 `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1
$sql_seen", $sql_seen",
intval(local_user()) intval(local_user())
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
@ -636,24 +680,27 @@ class NotificationsManager {
* @param int|string $seen * @param int|string $seen
* If 0 only include notifications into the query * If 0 only include notifications into the query
* which aren't marked as "seen" * which aren't marked as "seen"
* @param int $start Start the query at this point * @param int $start Start the query at this point
* @param int $limit Maximum number of query results * @param int $limit Maximum number of query results
* *
* @return array with * @return array with
* string 'ident' => Notification identifier * string 'ident' => Notification identifier
* int 'total' => Total number of available home notifications * int 'total' => Total number of available home notifications
* array 'notifications' => Home notifications * array 'notifications' => Home notifications
*/ */
public function homeNotifs($seen = 0, $start = 0, $limit = 80) { public function homeNotifs($seen = 0, $start = 0, $limit = 80)
{
$ident = 'home'; $ident = 'home';
$total = $this->homeTotal($seen); $total = $this->homeTotal($seen);
$notifs = array(); $notifs = array();
$sql_seen = ""; $sql_seen = "";
if($seen === 0) if ($seen === 0) {
$sql_seen = " AND `item`.`unseen` = 1 "; $sql_seen = " AND `item`.`unseen` = 1 ";
}
$r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`, $r = q(
"SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`unseen`,
`item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` AS `object`,
`pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid` `pitem`.`author-name` AS `pname`, `pitem`.`author-link` AS `plink`, `pitem`.`guid` AS `pguid`
FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent` FROM `item` INNER JOIN `item` AS `pitem` ON `pitem`.`id`=`item`.`parent`
@ -661,13 +708,14 @@ class NotificationsManager {
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1 `item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1
$sql_seen $sql_seen
ORDER BY `item`.`created` DESC LIMIT %d, %d ", ORDER BY `item`.`created` DESC LIMIT %d, %d ",
intval(local_user()), intval(local_user()),
intval($start), intval($start),
intval($limit) intval($limit)
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
$notifs = $this->formatNotifs($r, $ident); $notifs = $this->formatNotifs($r, $ident);
}
$arr = array ( $arr = array (
'notifications' => $notifs, 'notifications' => $notifs,
@ -685,19 +733,23 @@ class NotificationsManager {
* which aren't marked as ignored * which aren't marked as ignored
* @return int Number of introductions * @return int Number of introductions
*/ */
private function introTotal($all = false) { private function introTotal($all = false)
{
$sql_extra = ""; $sql_extra = "";
if(!$all) if (!$all) {
$sql_extra = " AND `ignore` = 0 "; $sql_extra = " AND `ignore` = 0 ";
}
$r = q("SELECT COUNT(*) AS `total` FROM `intro` $r = q(
"SELECT COUNT(*) AS `total` FROM `intro`
WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ", WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 ",
intval($_SESSION['uid']) intval($_SESSION['uid'])
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
@ -722,11 +774,13 @@ class NotificationsManager {
$notifs = array(); $notifs = array();
$sql_extra = ""; $sql_extra = "";
if(!$all) if (!$all) {
$sql_extra = " AND `ignore` = 0 "; $sql_extra = " AND `ignore` = 0 ";
}
/// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact /// @todo Fetch contact details by "get_contact_details_by_url" instead of queries to contact, fcontact and gcontact
$r = q("SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*, $r = q(
"SELECT `intro`.`id` AS `intro_id`, `intro`.*, `contact`.*,
`fcontact`.`name` AS `fname`, `fcontact`.`url` AS `furl`, `fcontact`.`name` AS `fname`, `fcontact`.`url` AS `furl`,
`fcontact`.`photo` AS `fphoto`, `fcontact`.`request` AS `frequest`, `fcontact`.`photo` AS `fphoto`, `fcontact`.`request` AS `frequest`,
`gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`, `gcontact`.`location` AS `glocation`, `gcontact`.`about` AS `gabout`,
@ -738,13 +792,14 @@ class NotificationsManager {
LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0 WHERE `intro`.`uid` = %d $sql_extra AND `intro`.`blocked` = 0
LIMIT %d, %d", LIMIT %d, %d",
intval($_SESSION['uid']), intval($_SESSION['uid']),
intval($start), intval($start),
intval($limit) intval($limit)
); );
if (DBM::is_result($r)) if (DBM::is_result($r)) {
$notifs = $this->formatIntros($r); $notifs = $this->formatIntros($r);
}
$arr = array ( $arr = array (
'ident' => $ident, 'ident' => $ident,
@ -761,16 +816,16 @@ class NotificationsManager {
* @param array $intros The array from the db query * @param array $intros The array from the db query
* @return array with the introductions * @return array with the introductions
*/ */
private function formatIntros($intros) { private function formatIntros($intros)
{
$knowyou = ''; $knowyou = '';
foreach($intros as $it) { foreach ($intros as $it) {
// There are two kind of introduction. Contacts suggested by other contacts and normal connection requests. // There are two kind of introduction. Contacts suggested by other contacts and normal connection requests.
// We have to distinguish between these two because they use different data. // We have to distinguish between these two because they use different data.
// Contact suggestions // Contact suggestions
if($it['fid']) { if ($it['fid']) {
$return_addr = bin2hex($this->a->user['nickname'] . '@' . $this->a->get_hostname() . (($this->a->path) ? '/' . $this->a->path : '')); $return_addr = bin2hex($this->a->user['nickname'] . '@' . $this->a->get_hostname() . (($this->a->path) ? '/' . $this->a->path : ''));
$intro = array( $intro = array(
@ -779,25 +834,23 @@ class NotificationsManager {
'intro_id' => $it['intro_id'], 'intro_id' => $it['intro_id'],
'madeby' => $it['name'], 'madeby' => $it['name'],
'contact_id' => $it['contact-id'], 'contact_id' => $it['contact-id'],
'photo' => ((x($it,'fphoto')) ? proxy_url($it['fphoto'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"), 'photo' => ((x($it, 'fphoto')) ? proxy_url($it['fphoto'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"),
'name' => $it['fname'], 'name' => $it['fname'],
'url' => zrl($it['furl']), 'url' => zrl($it['furl']),
'hidden' => $it['hidden'] == 1, 'hidden' => $it['hidden'] == 1,
'post_newfriend' => (intval(PConfig::get(local_user(),'system','post_newfriend')) ? '1' : 0), 'post_newfriend' => (intval(PConfig::get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
'knowyou' => $knowyou, 'knowyou' => $knowyou,
'note' => $it['note'], 'note' => $it['note'],
'request' => $it['frequest'] . '?addr=' . $return_addr, 'request' => $it['frequest'] . '?addr=' . $return_addr,
); );
// Normal connection requests // Normal connection requests
} else { } else {
$it = $this->getMissingIntroData($it); $it = $this->getMissingIntroData($it);
// Don't show these data until you are connected. Diaspora is doing the same. // Don't show these data until you are connected. Diaspora is doing the same.
if($it['gnetwork'] === NETWORK_DIASPORA) { if ($it['gnetwork'] === NETWORK_DIASPORA) {
$it['glocation'] = ""; $it['glocation'] = "";
$it['gabout'] = ""; $it['gabout'] = "";
$it['ggender'] = ""; $it['ggender'] = "";
@ -809,14 +862,14 @@ class NotificationsManager {
'uid' => $_SESSION['uid'], 'uid' => $_SESSION['uid'],
'intro_id' => $it['intro_id'], 'intro_id' => $it['intro_id'],
'contact_id' => $it['contact-id'], 'contact_id' => $it['contact-id'],
'photo' => ((x($it,'photo')) ? proxy_url($it['photo'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"), 'photo' => ((x($it, 'photo')) ? proxy_url($it['photo'], false, PROXY_SIZE_SMALL) : "images/person-175.jpg"),
'name' => $it['name'], 'name' => $it['name'],
'location' => bbcode($it['glocation'], false, false), 'location' => bbcode($it['glocation'], false, false),
'about' => bbcode($it['gabout'], false, false), 'about' => bbcode($it['gabout'], false, false),
'keywords' => $it['gkeywords'], 'keywords' => $it['gkeywords'],
'gender' => $it['ggender'], 'gender' => $it['ggender'],
'hidden' => $it['hidden'] == 1, 'hidden' => $it['hidden'] == 1,
'post_newfriend' => (intval(PConfig::get(local_user(),'system','post_newfriend')) ? '1' : 0), 'post_newfriend' => (intval(PConfig::get(local_user(), 'system', 'post_newfriend')) ? '1' : 0),
'url' => $it['url'], 'url' => $it['url'],
'zrl' => zrl($it['url']), 'zrl' => zrl($it['url']),
'addr' => $it['gaddr'], 'addr' => $it['gaddr'],
@ -840,7 +893,8 @@ class NotificationsManager {
* *
* @return array The array with the intro data * @return array The array with the intro data
*/ */
private function getMissingIntroData($arr) { private function getMissingIntroData($arr)
{
// If the network and the addr isn't available from the gcontact // If the network and the addr isn't available from the gcontact
// table entry, take the one of the contact table entry // table entry, take the one of the contact table entry
if ($arr['gnetwork'] == "") { if ($arr['gnetwork'] == "") {

View file

@ -1,13 +1,18 @@
<?php <?php
/**
* @file src/Database/DBM.php
*/
namespace Friendica\Database; namespace Friendica\Database;
use dba; use dba;
/** /**
* @brief This class contain functions for the database management * @brief This class contain functions for the database management
* *
* This class contains functions that doesn't need to know if pdo, mysqli or whatever is used. * This class contains functions that doesn't need to know if pdo, mysqli or whatever is used.
*/ */
class DBM { class DBM
{
/** /**
* @brief Return a list of database processes * @brief Return a list of database processes
* *
@ -15,7 +20,8 @@ class DBM {
* 'list' => List of processes, separated in their different states * 'list' => List of processes, separated in their different states
* 'amount' => Number of concurrent database processes * 'amount' => Number of concurrent database processes
*/ */
public static function processlist() { public static function processlist()
{
$r = q("SHOW PROCESSLIST"); $r = q("SHOW PROCESSLIST");
$s = array(); $s = array();
@ -33,8 +39,9 @@ class DBM {
$statelist = ""; $statelist = "";
foreach ($states AS $state => $usage) { foreach ($states AS $state => $usage) {
if ($statelist != "") if ($statelist != "") {
$statelist .= ", "; $statelist .= ", ";
}
$statelist .= $state.": ".$usage; $statelist .= $state.": ".$usage;
} }
return(array("list" => $statelist, "amount" => $processes)); return(array("list" => $statelist, "amount" => $processes));
@ -43,10 +50,12 @@ class DBM {
/** /**
* Checks if $array is a filled array with at least one entry. * Checks if $array is a filled array with at least one entry.
* *
* @param $array mixed A filled array with at least one entry * @param mixed $array A filled array with at least one entry
* @return Whether $array is a filled array or an object with rows *
* @return boolean Whether $array is a filled array or an object with rows
*/ */
public static function is_result($array) { public static function is_result($array)
{
// It could be a return value from an update statement // It could be a return value from an update statement
if (is_bool($array)) { if (is_bool($array)) {
return $array; return $array;
@ -62,12 +71,12 @@ class DBM {
/** /**
* @brief Callback function for "esc_array" * @brief Callback function for "esc_array"
* *
* @param mixed $value Array value * @param mixed $value Array value
* @param string $key Array key * @param string $key Array key
* @param boolean $add_quotation add quotation marks for string values * @param boolean $add_quotation add quotation marks for string values
*/ */
private static function esc_array_callback(&$value, $key, $add_quotation) { private static function esc_array_callback(&$value, $key, $add_quotation)
{
if (!$add_quotation) { if (!$add_quotation) {
if (is_bool($value)) { if (is_bool($value)) {
$value = ($value ? '1' : '0'); $value = ($value ? '1' : '0');
@ -89,10 +98,11 @@ class DBM {
/** /**
* @brief Escapes a whole array * @brief Escapes a whole array
* *
* @param mixed $arr Array with values to be escaped * @param mixed $arr Array with values to be escaped
* @param boolean $add_quotation add quotation marks for string values * @param boolean $add_quotation add quotation marks for string values
*/ */
public static function esc_array(&$arr, $add_quotation = false) { public static function esc_array(&$arr, $add_quotation = false)
{
array_walk($arr, 'self::esc_array_callback', $add_quotation); array_walk($arr, 'self::esc_array_callback', $add_quotation);
} }
@ -100,9 +110,11 @@ class DBM {
* Checks Converts any date string into a SQL compatible date string * Checks Converts any date string into a SQL compatible date string
* *
* @param string $date a date string in any format * @param string $date a date string in any format
*
* @return string SQL style date string * @return string SQL style date string
*/ */
public static function date($date = 'now') { public static function date($date = 'now')
{
$timestamp = strtotime($date); $timestamp = strtotime($date);
// Don't allow lower date strings as '0001-01-01 00:00:00' // Don't allow lower date strings as '0001-01-01 00:00:00'

View file

@ -1,10 +1,8 @@
<?php <?php
/** /**
* @file include/ParseUrl.php * @file include/ParseUrl.php
* @brief Get informations about a given URL * @brief Get informations about a given URL
*/ */
namespace Friendica; namespace Friendica;
use Friendica\Core\Config; use Friendica\Core\Config;
@ -15,24 +13,23 @@ use dba;
use DomXPath; use DomXPath;
use DOMDocument; use DOMDocument;
require_once("include/network.php"); require_once "include/network.php";
require_once("include/Photo.php"); require_once "include/Photo.php";
require_once("include/oembed.php"); require_once "include/oembed.php";
require_once("include/xml.php");
/** /**
* @brief Class with methods for extracting certain content from an url * @brief Class with methods for extracting certain content from an url
*/ */
class ParseUrl { class ParseUrl
{
/** /**
* @brief Search for chached embeddable data of an url otherwise fetch it * @brief Search for chached embeddable data of an url otherwise fetch it
* *
* @param type $url The url of the page which should be scraped * @param type $url The url of the page which should be scraped
* @param type $no_guessing If true the parse doens't search for * @param type $no_guessing If true the parse doens't search for
* preview pictures * preview pictures
* @param type $do_oembed The false option is used by the function fetch_oembed() * @param type $do_oembed The false option is used by the function fetch_oembed()
* to avoid endless loops * to avoid endless loops
* *
* @return array which contains needed data for embedding * @return array which contains needed data for embedding
* string 'url' => The url of the parsed page * string 'url' => The url of the parsed page
@ -47,14 +44,18 @@ class ParseUrl {
* @see ParseUrl::getSiteinfo() for more information about scraping * @see ParseUrl::getSiteinfo() for more information about scraping
* embeddable content * embeddable content
*/ */
public static function getSiteinfoCached($url, $no_guessing = false, $do_oembed = true) { public static function getSiteinfoCached($url, $no_guessing = false, $do_oembed = true)
{
if ($url == "") { if ($url == "") {
return false; return false;
} }
$r = q("SELECT * FROM `parsed_url` WHERE `url` = '%s' AND `guessing` = %d AND `oembed` = %d", $r = q(
dbesc(normalise_link($url)), intval(!$no_guessing), intval($do_oembed)); "SELECT * FROM `parsed_url` WHERE `url` = '%s' AND `guessing` = %d AND `oembed` = %d",
dbesc(normalise_link($url)),
intval(!$no_guessing),
intval($do_oembed)
);
if ($r) { if ($r) {
$data = $r[0]["content"]; $data = $r[0]["content"];
@ -67,9 +68,14 @@ class ParseUrl {
$data = self::getSiteinfo($url, $no_guessing, $do_oembed); $data = self::getSiteinfo($url, $no_guessing, $do_oembed);
dba::insert('parsed_url', array('url' => normalise_link($url), 'guessing' => !$no_guessing, dba::insert(
'parsed_url',
array(
'url' => normalise_link($url), 'guessing' => !$no_guessing,
'oembed' => $do_oembed, 'content' => serialize($data), 'oembed' => $do_oembed, 'content' => serialize($data),
'created' => datetime_convert()), true); 'created' => datetime_convert()),
true
);
return $data; return $data;
} }
@ -83,12 +89,12 @@ class ParseUrl {
* like \<title\>Awesome Title\</title\> or * like \<title\>Awesome Title\</title\> or
* \<meta name="description" content="An awesome description"\> * \<meta name="description" content="An awesome description"\>
* *
* @param type $url The url of the page which should be scraped * @param type $url The url of the page which should be scraped
* @param type $no_guessing If true the parse doens't search for * @param type $no_guessing If true the parse doens't search for
* preview pictures * preview pictures
* @param type $do_oembed The false option is used by the function fetch_oembed() * @param type $do_oembed The false option is used by the function fetch_oembed()
* to avoid endless loops * to avoid endless loops
* @param type $count Internal counter to avoid endless loops * @param type $count Internal counter to avoid endless loops
* *
* @return array which contains needed data for embedding * @return array which contains needed data for embedding
* string 'url' => The url of the parsed page * string 'url' => The url of the parsed page
@ -113,8 +119,8 @@ class ParseUrl {
* </body> * </body>
* @endverbatim * @endverbatim
*/ */
public static function getSiteinfo($url, $no_guessing = false, $do_oembed = true, $count = 1) { public static function getSiteinfo($url, $no_guessing = false, $do_oembed = true, $count = 1)
{
$a = get_app(); $a = get_app();
$siteinfo = array(); $siteinfo = array();
@ -158,7 +164,6 @@ class ParseUrl {
$body = $data["body"]; $body = $data["body"];
if ($do_oembed) { if ($do_oembed) {
$oembed_data = oembed_fetch_url($url); $oembed_data = oembed_fetch_url($url);
if (!in_array($oembed_data->type, array("error", "rich", ""))) { if (!in_array($oembed_data->type, array("error", "rich", ""))) {
@ -364,8 +369,7 @@ class ParseUrl {
"width" => $photodata[0], "width" => $photodata[0],
"height" => $photodata[1]); "height" => $photodata[1]);
} }
}
}
} elseif ($siteinfo["image"] != "") { } elseif ($siteinfo["image"] != "") {
$src = self::completeUrl($siteinfo["image"], $url); $src = self::completeUrl($siteinfo["image"], $url);
@ -433,7 +437,8 @@ class ParseUrl {
* @param string $string Tags * @param string $string Tags
* @return array with formatted Hashtags * @return array with formatted Hashtags
*/ */
public static function convertTagsToArray($string) { public static function convertTagsToArray($string)
{
$arr_tags = str_getcsv($string); $arr_tags = str_getcsv($string);
if (count($arr_tags)) { if (count($arr_tags)) {
// add the # sign to every tag // add the # sign to every tag
@ -449,9 +454,10 @@ class ParseUrl {
* This method is used as callback function * This method is used as callback function
* *
* @param string $tag The pure tag name * @param string $tag The pure tag name
* @param int $k Counter for internal use * @param int $k Counter for internal use
*/ */
private static function arrAddHashes(&$tag, $k) { private static function arrAddHashes(&$tag, $k)
{
$tag = "#" . $tag; $tag = "#" . $tag;
} }
@ -462,14 +468,15 @@ class ParseUrl {
* can miss the scheme so we need to add the correct * can miss the scheme so we need to add the correct
* scheme * scheme
* *
* @param string $url The url which possibly does have * @param string $url The url which possibly does have
* a missing scheme (a link to an image) * a missing scheme (a link to an image)
* @param string $scheme The url with a correct scheme * @param string $scheme The url with a correct scheme
* (e.g. the url from the webpage which does contain the image) * (e.g. the url from the webpage which does contain the image)
* *
* @return string The url with a scheme * @return string The url with a scheme
*/ */
private static function completeUrl($url, $scheme) { private static function completeUrl($url, $scheme)
{
$urlarr = parse_url($url); $urlarr = parse_url($url);
// If the url does allready have an scheme // If the url does allready have an scheme
@ -486,7 +493,7 @@ class ParseUrl {
$complete .= ":".$schemearr["port"]; $complete .= ":".$schemearr["port"];
} }
if (strpos($urlarr["path"],"/") !== 0) { if (strpos($urlarr["path"], "/") !== 0) {
$complete .= "/"; $complete .= "/";
} }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -4,5 +4,22 @@
<!-- we keep the old php4-style variable names for now --> <!-- we keep the old php4-style variable names for now -->
<exclude name="PEAR.NamingConventions.ValidFunctionName.PublicUnderscore"/> <exclude name="PEAR.NamingConventions.ValidFunctionName.PublicUnderscore"/>
<exclude name="PEAR.NamingConventions.ValidVariableName.PublicUnderscore"/> <exclude name="PEAR.NamingConventions.ValidVariableName.PublicUnderscore"/>
<exclude name="PEAR.NamingConventions.ValidVariableName.PrivateNoUnderscore"/>
<exclude name="PEAR.NamingConventions.ValidFunctionName.PrivateNoUnderscore"/>
<exclude name="PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps"/>
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps"/>
</rule>
<description>PSR2 with tabs instead of spaces.</description>
<arg name="tab-width" value="4"/>
<rule ref="PSR2">
<exclude name="Generic.WhiteSpace.DisallowTabIndent"/>
<exclude name="Generic.Commenting.DocComment.MissingShort"/>
</rule>
<rule ref="Generic.WhiteSpace.DisallowSpaceIndent"/>
<rule ref="Generic.WhiteSpace.ScopeIndent">
<properties>
<property name="indent" value="4"/>
<property name="tabIndent" value="true"/>
</properties>
</rule> </rule>
</ruleset> </ruleset>