1
0
Fork 0

Merge pull request #3473 from Quix0r/rewrites/coding-convention-split2-6-2

Coding convention applied split 2-6-2 (of 2-14-2)
This commit is contained in:
Hypolite Petovan 2017-06-18 18:44:34 -04:00 committed by GitHub
commit ea88e15a8c
19 changed files with 748 additions and 621 deletions

View file

@ -9,37 +9,37 @@ Account - Basics
Nicht alle Friendica-Knoten bieten die Möglichkeit zur Registrierung. Nicht alle Friendica-Knoten bieten die Möglichkeit zur Registrierung.
Wenn die Registrierung möglich ist, wird ein "Registrieren"-Link unter dem Login-Feld auf der Startseite angezeigt, der zur Registrierungsseite führt. Wenn die Registrierung möglich ist, wird ein "Registrieren"-Link unter dem Login-Feld auf der Startseite angezeigt, der zur Registrierungsseite führt.
Die Stärke unseres Netzwerks ist, dass die verschiedenen Knoten komplett kompatibel zueinander sind. Die Stärke unseres Netzwerks ist, dass die verschiedenen Knoten komplett kompatibel zueinander sind.
Wenn der Knoten, den Du besuchst, keine Registrierung anbietet, oder wenn Du glaubst, dass Dir eine andere Seite möglicherweise besser gefällt, dann kannst Du hier eine <a href="https://dir.friendica.social/servers">Liste von öffentlichen Servern (Knoten)</a> finden und den Knoten heraus suchen, der am Besten zu Deinen Anforderungen passt. Wenn der Knoten, den Du besuchst, keine Registrierung anbietet, oder wenn Du glaubst, dass Dir eine andere Seite möglicherweise besser gefällt, dann kannst Du hier eine <a href="https://dir.friendica.social/servers">Liste von öffentlichen Servern (Knoten)</a> finden und den Knoten heraus suchen, der am Besten zu Deinen Anforderungen passt.
Wenn Du Deinen eigenen Server aufsetzen willst, kannst Du das ebenfalls machen. Wenn Du Deinen eigenen Server aufsetzen willst, kannst Du das ebenfalls machen.
Besuche <a href="http://friendi.ca">die Friendica-Webseite</a>, um den Code mit den Installationsanleitungen herunterzuladen. Besuche <a href="http://friendi.ca">die Friendica-Webseite</a>, um den Code mit den Installationsanleitungen herunterzuladen.
Es ist ein einfacher Installationsprozess, den jeder mit ein wenig Erfahrungen im Webseiten-Hosting oder mit grundlegenden Linux-Erfahrungen einfach handhaben kann. Es ist ein einfacher Installationsprozess, den jeder mit ein wenig Erfahrungen im Webseiten-Hosting oder mit grundlegenden Linux-Erfahrungen einfach handhaben kann.
*OpenID* *OpenID*
Das erste Feld auf der Registrierungsseite ist für eine OpenID-Adresse. Das erste Feld auf der Registrierungsseite ist für eine OpenID-Adresse.
Wenn Du keine OpenID-Adresse hast oder nicht wünschst, diese zu nutzen, dann lasse das Feld frei. Wenn Du keine OpenID-Adresse hast oder nicht wünschst, diese zu nutzen, dann lasse das Feld frei.
Wenn Du einen OpenID-Account hast und diesen nutzen willst, gib die Adresse in das Feld ein und klicke auf "Registrieren". Wenn Du einen OpenID-Account hast und diesen nutzen willst, gib die Adresse in das Feld ein und klicke auf "Registrieren".
Friendica wird versuchen, so viele Informationen wie möglich von Deinem OpenID-Provider zu übernehmen, um diese in Dein Profil auf dieser Seite einzutragen. Friendica wird versuchen, so viele Informationen wie möglich von Deinem OpenID-Provider zu übernehmen, um diese in Dein Profil auf dieser Seite einzutragen.
*Dein vollständiger Name* *Dein vollständiger Name*
Bitte trage Deinen vollständigen Namen **so ein, wie Du ihn im System anzeigen lassen willst**. Bitte trage Deinen vollständigen Namen **so ein, wie Du ihn im System anzeigen lassen willst**.
Viele Leute nutzen ihren richtigen Namen hierfür, allerdings besteht für dich keine Pflicht, das auch so zu machen. Viele Leute nutzen ihren richtigen Namen hierfür, allerdings besteht für dich keine Pflicht, das auch so zu machen.
*Email-Adresse* *Email-Adresse*
Bitte trage eine richtige Email-Adresse ein. Bitte trage eine richtige Email-Adresse ein.
Deine Email-Adresse wird **niemals** veröffentlicht. Deine Email-Adresse wird **niemals** veröffentlicht.
Wir benötigen diese, um Dir Account-Informationen und die Login-Daten zu schicken. Wir benötigen diese, um Dir Account-Informationen und die Login-Daten zu schicken.
Du erhältst zudem von Zeit zu Zeit Benachrichtigungen über eingegangene Nachrichten oder Punkte, die Deine Aufmerksamkeit benötigen. Du erhältst zudem von Zeit zu Zeit Benachrichtigungen über eingegangene Nachrichten oder Punkte, die Deine Aufmerksamkeit benötigen.
Du hast aber auch die Möglichkeit, diese Nachrichten in Deinen Account-Einstellungen komplett abzuschalten. Du hast aber auch die Möglichkeit, diese Nachrichten in Deinen Account-Einstellungen komplett abzuschalten.
Du musst nicht Deine Haupt-Email-Adresse sein, jedoch wird eine funktionierende Adresse benötigt. Du musst nicht Deine Haupt-Email-Adresse sein, jedoch wird eine funktionierende Adresse benötigt.
Ohne dieses kannst Du weder Dein Initialpasswort erhalten, noch Dein Passwort zurücksetzen. Ohne dieses kannst Du weder Dein Initialpasswort erhalten, noch Dein Passwort zurücksetzen.
Dies ist die einzige persönliche Information, die korrekt sein muss. Dies ist die einzige persönliche Information, die korrekt sein muss.
@ -85,7 +85,7 @@ Falls Du Schwierigkeiten beim Login hast, prüfe bitte, ob z. B. Deine Feststell
**Passwort ändern** **Passwort ändern**
Besuche nach Deinem ersten Login bitte die Einstellungsseite und wechsle das Passwort in eines, dass Du Dir merken kannst. Besuche nach Deinem ersten Login bitte die Einstellungsseite und wechsle das Passwort in eines, dass Du Dir merken kannst.
**Der Anfang** **Der Anfang**
@ -95,7 +95,7 @@ Ein ['Tipp für neue Mitglieder'](newmember)-Link zeigt sich in den ersten beide
**Persönliche Daten exportieren** **Persönliche Daten exportieren**
Du kannst eine Kopie Deiner persönlichen Daten in einer XML-Datei exportieren. Du kannst eine Kopie Deiner persönlichen Daten in einer XML-Datei exportieren.
Gehe hierzu in Deinen Einstellungen auf "Persönliche Daten exportieren". Gehe hierzu in Deinen Einstellungen auf "Persönliche Daten exportieren".

View file

@ -14,18 +14,19 @@ $objDDDBLResultHandler = new DataObjectPool('Result-Handler');
* *
**/ **/
$cloPDOStatementResultHandler = function(Queue $objQueue) { $cloPDOStatementResultHandler = function(Queue $objQueue) {
$objPDO = $objQueue->getState()->get('PDOStatement');
$objQueue->getState()->update(array('result' => $objPDO));
$objPDO = $objQueue->getState()->get('PDOStatement'); /*
$objQueue->getState()->update(array('result' => $objPDO)); * delete handler which closes the PDOStatement-cursor
* this will be done manual if using this handler
# delete handler which closes the PDOStatement-cursor */
# this will be done manual if using this handler $objQueue->deleteHandler(QUEUE_CLOSE_CURSOR_POSITION);
$objQueue->deleteHandler(QUEUE_CLOSE_CURSOR_POSITION);
}; };
$objDDDBLResultHandler->add('PDOStatement', array('HANDLER' => $cloPDOStatementResultHandler)); $objDDDBLResultHandler->add('PDOStatement', array('HANDLER' => $cloPDOStatementResultHandler));
if (! class_exists('dba')) {
/** /**
* *
* MySQL database class * MySQL database class
@ -36,8 +37,6 @@ $objDDDBLResultHandler->add('PDOStatement', array('HANDLER' => $cloPDOStatementR
* the debugging stream is safe to view within both terminals and web pages. * the debugging stream is safe to view within both terminals and web pages.
* *
*/ */
if (! class_exists('dba')) {
class dba { class dba {
private $debug = 0; private $debug = 0;
@ -146,16 +145,17 @@ class dba {
$a->save_timestamp($stamp1, "database"); $a->save_timestamp($stamp1, "database");
/// @TODO really check $a->config for 'system'? it is very generic and should be there /*
if (x($a->config, 'system') && x($a->config['system'], 'db_log')) { * Check if the configuration group 'system' and db_log is there. The
if (($duration > $a->config["system"]["db_loglimit"])) { * extra first check needs to be done to avoid endless loop.
$duration = round($duration, 3); */
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); if (x($a->config, 'system') && x($a->config['system'], 'db_log') && ($duration > $a->config["system"]["db_loglimit"])) {
@file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t". $duration = round($duration, 3);
basename($backtrace[1]["file"])."\t". $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t". @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t".
substr($sql, 0, 2000)."\n", FILE_APPEND); basename($backtrace[1]["file"])."\t".
} $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
substr($sql, 0, 2000)."\n", FILE_APPEND);
} }
if ($intErrorCode) { if ($intErrorCode) {
@ -202,8 +202,11 @@ class dba {
} }
if ($onlyquery) { if ($onlyquery) {
$this->result = $r; # this will store an PDOStatement Object in result // this will store an PDOStatement Object in result
$this->result->execute(); # execute the Statement, to get its result $this->result = $r;
// execute the Statement, to get its result
$this->result->execute();
return true; return true;
} }
@ -262,7 +265,8 @@ function printable($s) {
return $s; return $s;
}} }}
// Procedural functions // --- Procedural functions ---
if (! function_exists('dbg')) { if (! function_exists('dbg')) {
function dbg($state) { function dbg($state) {
global $db; global $db;
@ -273,18 +277,20 @@ function dbg($state) {
if (! function_exists('dbesc')) { if (! function_exists('dbesc')) {
function dbesc($str) { function dbesc($str) {
global $db; global $db;
if ($db && $db->connected)
return($db->escape($str)); if ($db && $db->connected) {
else return $db->escape($str);
return(str_replace("'","\\'",$str)); } else {
return str_replace("'","\\'",$str);
}
}} }}
if (! function_exists('q')) { if (! function_exists('q')) {
/** /*
* Function: q($sql,$args); * Function: q($sql,$args);
* Description: execute SQL query with printf style args. * Description: execute SQL query with printf style args.
* Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d", * Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
* 'user', 1); * 'user', 1);
*/ */
function q($sql) { function q($sql) {
@ -301,23 +307,19 @@ function q($sql) {
return $db->q($stmt); return $db->q($stmt);
} }
/** /*
*
* This will happen occasionally trying to store the * This will happen occasionally trying to store the
* session data after abnormal program termination * session data after abnormal program termination
*
*/ */
logger('dba: no database: ' . print_r($args,true)); logger('dba: no database: ' . print_r($args,true));
return false; return false;
}} }}
if (! function_exists('dbq')) { if (! function_exists('dbq')) {
/** /*
* Raw db query, no arguments * Raw db query, no arguments
*/ */
function dbq($sql) { function dbq($sql) {
global $db; global $db;
if ($db && $db->connected) { if ($db && $db->connected) {
$ret = $db->q($sql); $ret = $db->q($sql);
@ -327,15 +329,14 @@ function dbq($sql) {
return $ret; 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')) { if (! function_exists('dbesc_array_cb')) {
function dbesc_array_cb(&$item, $key) { function dbesc_array_cb(&$item, $key) {
/*
* 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 (is_string($item)) { if (is_string($item)) {
$item = dbesc($item); $item = dbesc($item);
} }

View file

@ -30,7 +30,7 @@ function convert_to_innodb() {
$sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME'])); $sql = sprintf("ALTER TABLE `%s` engine=InnoDB;", dbesc($table['TABLE_NAME']));
echo $sql."\n"; echo $sql."\n";
$result = @$db->q($sql); $result = $db->q($sql);
if (!dbm::is_result($result)) { if (!dbm::is_result($result)) {
print_update_error($db, $sql); print_update_error($db, $sql);
} }
@ -85,6 +85,7 @@ function update_fail($update_id, $error_message) {
/* /*
@TODO deprecated code?
$email_tpl = get_intltext_template("update_fail_eml.tpl"); $email_tpl = get_intltext_template("update_fail_eml.tpl");
$email_msg = replace_macros($email_tpl, array( $email_msg = replace_macros($email_tpl, array(
'$sitename' => $a->config['sitename'], '$sitename' => $a->config['sitename'],
@ -1764,10 +1765,10 @@ function dbstructure_run(&$argv, &$argc) {
} }
if (is_null($db)) { if (is_null($db)) {
@include(".htconfig.php"); @include ".htconfig.php";
require_once("include/dba.php"); require_once "include/dba.php";
$db = new dba($db_host, $db_user, $db_pass, $db_data); $db = new dba($db_host, $db_user, $db_pass, $db_data);
unset($db_host, $db_user, $db_pass, $db_data); unset($db_host, $db_user, $db_pass, $db_data);
} }
if ($argc == 2) { if ($argc == 2) {

View file

@ -880,11 +880,14 @@ class Diaspora {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
return $r[0]; return $r[0];
} else { } else {
// We haven't found it? /*
// We use another function for it that will possibly create a contact entry * We haven't found it?
* We use another function for it that will possibly create a contact entry.
*/
$cid = get_contact($handle, $uid); $cid = get_contact($handle, $uid);
if ($cid > 0) { if ($cid > 0) {
/// @TODO Contact retrieval should be encapsulated into an "entity" class like `Contact`
$r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid)); $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid));
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
@ -919,9 +922,11 @@ class Diaspora {
*/ */
private static function post_allow($importer, $contact, $is_comment = false) { private static function post_allow($importer, $contact, $is_comment = false) {
// perhaps we were already sharing with this person. Now they're sharing with us. /*
// That makes us friends. * Perhaps we were already sharing with this person. Now they're sharing with us.
// Normally this should have handled by getting a request - but this could get lost * That makes us friends.
* Normally this should have handled by getting a request - but this could get lost
*/
if ($contact["rel"] == CONTACT_IS_FOLLOWER && in_array($importer["page-flags"], array(PAGE_FREELOVE))) { if ($contact["rel"] == CONTACT_IS_FOLLOWER && in_array($importer["page-flags"], array(PAGE_FREELOVE))) {
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d", q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d",
intval(CONTACT_IS_FRIEND), intval(CONTACT_IS_FRIEND),
@ -934,16 +939,19 @@ class Diaspora {
// We don't seem to like that person // We don't seem to like that person
if ($contact["blocked"] || $contact["readonly"] || $contact["archive"]) { if ($contact["blocked"] || $contact["readonly"] || $contact["archive"]) {
// Maybe blocked, don't accept.
return false; return false;
// We are following this person? Then it is okay // We are following this person?
} elseif (($contact["rel"] == CONTACT_IS_SHARING) || ($contact["rel"] == CONTACT_IS_FRIEND)) { } elseif (($contact["rel"] == CONTACT_IS_SHARING) || ($contact["rel"] == CONTACT_IS_FRIEND)) {
// Yes, then it is fine.
return true; return true;
// Is it a post to a community? That's good // Is it a post to a community?
} elseif (($contact["rel"] == CONTACT_IS_FOLLOWER) && ($importer["page-flags"] == PAGE_COMMUNITY)) { } elseif (($contact["rel"] == CONTACT_IS_FOLLOWER) && ($importer["page-flags"] == PAGE_COMMUNITY)) {
// That's good
return true; return true;
} // Is the message a global user or a comment?
// Messages for the global users and comments are always accepted } elseif (($importer["uid"] == 0) || $is_comment) {
if (($importer["uid"] == 0) || $is_comment) { // Messages for the global users and comments are always accepted
return true; return true;
} }

View file

@ -853,18 +853,22 @@ function widget_events() {
return; return;
} }
// Cal logged in user (test permission at foreign profile page) /*
// If the $owner uid is available we know it is part of one of the profile pages (like /cal) * Cal logged in user (test permission at foreign profile page)
// So we have to test if if it's the own profile page of the logged in user * If the $owner uid is available we know it is part of one of the profile pages (like /cal)
// or a foreign one. For foreign profile pages we need to check if the feature * So we have to test if if it's the own profile page of the logged in user
// for exporting the cal is enabled (otherwise the widget would appear for logged in users * or a foreign one. For foreign profile pages we need to check if the feature
// on foreigen profile pages even if the widget is disabled) * for exporting the cal is enabled (otherwise the widget would appear for logged in users
* on foreigen profile pages even if the widget is disabled)
*/
if (intval($owner_uid) && local_user() !== $owner_uid && ! feature_enabled($owner_uid, "export_calendar")) { if (intval($owner_uid) && local_user() !== $owner_uid && ! feature_enabled($owner_uid, "export_calendar")) {
return; return;
} }
// If it's a kind of profile page (intval($owner_uid)) return if the user not logged in and /*
// export feature isn't enabled * If it's a kind of profile page (intval($owner_uid)) return if the user not logged in and
* export feature isn't enabled
*/
if (intval($owner_uid) && ! local_user() && ! feature_enabled($owner_uid, "export_calendar")) { if (intval($owner_uid) && ! local_user() && ! feature_enabled($owner_uid, "export_calendar")) {
return; return;
} }

View file

@ -158,7 +158,7 @@ function removelinebreak($message)
$currquotelevel = 0; $currquotelevel = 0;
$currline = $line; $currline = $line;
while ((strlen($currline)>0) && ((substr($currline, 0, 1) == '>') while ((strlen($currline)>0) && ((substr($currline, 0, 1) == '>')
|| (substr($currline, 0, 1) == ' '))) { || (substr($currline, 0, 1) == ' '))) {
if (substr($currline, 0, 1) == '>') if (substr($currline, 0, 1) == '>')
$currquotelevel++; $currquotelevel++;
@ -168,7 +168,7 @@ function removelinebreak($message)
$quotelevel = 0; $quotelevel = 0;
$nextline = trim($arrbody[$i+1]); $nextline = trim($arrbody[$i+1]);
while ((strlen($nextline)>0) && ((substr($nextline, 0, 1) == '>') while ((strlen($nextline)>0) && ((substr($nextline, 0, 1) == '>')
|| (substr($nextline, 0, 1) == ' '))) { || (substr($nextline, 0, 1) == ' '))) {
if (substr($nextline, 0, 1) == '>') if (substr($nextline, 0, 1) == '>')
$quotelevel++; $quotelevel++;
@ -203,7 +203,7 @@ function removelinebreak($message)
$lines[$lineno] .= ' '; $lines[$lineno] .= ' ';
while ((strlen($line)>0) && ((substr($line, 0, 1) == '>') while ((strlen($line)>0) && ((substr($line, 0, 1) == '>')
|| (substr($line, 0, 1) == ' '))) { || (substr($line, 0, 1) == ' '))) {
$line = ltrim(substr($line, 1)); $line = ltrim(substr($line, 1));
} }

View file

@ -91,7 +91,6 @@ function pop_lang() {
$lang = $a->langsave; $lang = $a->langsave;
} }
// l // l
if (! function_exists('load_translation_table')) { if (! function_exists('load_translation_table')) {

View file

@ -2,15 +2,15 @@
use Friendica\Core\Config; use Friendica\Core\Config;
require_once('include/queue_fn.php'); require_once 'include/queue_fn.php';
require_once('include/dfrn.php'); require_once 'include/dfrn.php';
require_once("include/datetime.php"); require_once 'include/datetime.php';
require_once('include/items.php'); require_once 'include/items.php';
require_once('include/bbcode.php'); require_once 'include/bbcode.php';
require_once('include/socgraph.php'); require_once 'include/socgraph.php';
require_once('include/cache.php'); require_once 'include/cache.php';
function queue_run(&$argv, &$argc){ function queue_run(&$argv, &$argc) {
global $a; global $a;
if ($argc > 1) { if ($argc > 1) {
@ -41,9 +41,10 @@ function queue_run(&$argv, &$argc){
q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY"); q("DELETE FROM `queue` WHERE `created` < UTC_TIMESTAMP() - INTERVAL 3 DAY");
} }
// For the first 12 hours we'll try to deliver every 15 minutes /*
// After that, we'll only attempt delivery once per hour. * For the first 12 hours we'll try to deliver every 15 minutes
* After that, we'll only attempt delivery once per hour.
*/
$r = q("SELECT `id` FROM `queue` WHERE ((`created` > UTC_TIMESTAMP() - INTERVAL 12 HOUR AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE) OR (`last` < UTC_TIMESTAMP() - INTERVAL 1 HOUR)) ORDER BY `cid`, `created`"); $r = q("SELECT `id` FROM `queue` WHERE ((`created` > UTC_TIMESTAMP() - INTERVAL 12 HOUR AND `last` < UTC_TIMESTAMP() - INTERVAL 15 MINUTE) OR (`last` < UTC_TIMESTAMP() - INTERVAL 1 HOUR)) ORDER BY `cid`, `created`");
call_hooks('queue_predeliver', $a, $r); call_hooks('queue_predeliver', $a, $r);
@ -60,8 +61,8 @@ function queue_run(&$argv, &$argc){
// delivering // delivering
require_once('include/salmon.php'); require_once 'include/salmon.php';
require_once('include/diaspora.php'); require_once 'include/diaspora.php';
$r = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1", $r = q("SELECT * FROM `queue` WHERE `id` = %d LIMIT 1",
intval($queue_id)); intval($queue_id));

View file

@ -6,13 +6,13 @@ function auto_redir(App $a, $contact_nick) {
// prevent looping // prevent looping
if(x($_REQUEST,'redir') && intval($_REQUEST['redir'])) if (x($_REQUEST,'redir') && intval($_REQUEST['redir']))
return; return;
if((! $contact_nick) || ($contact_nick === $a->user['nickname'])) if ((! $contact_nick) || ($contact_nick === $a->user['nickname']))
return; return;
if(local_user()) { if (local_user()) {
// We need to find out if $contact_nick is a user on this hub, and if so, if I // We need to find out if $contact_nick is a user on this hub, and if so, if I
// am a contact of that user. However, that user may have other contacts with the // am a contact of that user. However, that user may have other contacts with the
@ -24,7 +24,7 @@ function auto_redir(App $a, $contact_nick) {
$baseurl = App::get_baseurl(); $baseurl = App::get_baseurl();
$domain_st = strpos($baseurl, "://"); $domain_st = strpos($baseurl, "://");
if($domain_st === false) if ($domain_st === false)
return; return;
$baseurl = substr($baseurl, $domain_st + 3); $baseurl = substr($baseurl, $domain_st + 3);
$nurl = normalise_link($baseurl); $nurl = normalise_link($baseurl);
@ -58,11 +58,11 @@ function auto_redir(App $a, $contact_nick) {
$dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']); $dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']);
if($r[0]['duplex'] && $r[0]['issued-id']) { if ($r[0]['duplex'] && $r[0]['issued-id']) {
$orig_id = $r[0]['issued-id']; $orig_id = $r[0]['issued-id'];
$dfrn_id = '1:' . $orig_id; $dfrn_id = '1:' . $orig_id;
} }
if($r[0]['duplex'] && $r[0]['dfrn-id']) { if ($r[0]['duplex'] && $r[0]['dfrn-id']) {
$orig_id = $r[0]['dfrn-id']; $orig_id = $r[0]['dfrn-id'];
$dfrn_id = '0:' . $orig_id; $dfrn_id = '0:' . $orig_id;
} }
@ -70,7 +70,7 @@ function auto_redir(App $a, $contact_nick) {
// ensure that we've got a valid ID. There may be some edge cases with forums and non-duplex mode // ensure that we've got a valid ID. There may be some edge cases with forums and non-duplex mode
// that may have triggered some of the "went to {profile/intro} and got an RSS feed" issues // that may have triggered some of the "went to {profile/intro} and got an RSS feed" issues
if(strlen($dfrn_id) < 3) if (strlen($dfrn_id) < 3)
return; return;
$sec = random_string(); $sec = random_string();

View file

@ -170,11 +170,14 @@ function slapper($owner, $url, $slap) {
} }
logger('slapper for '.$url.' returned ' . $return_code); logger('slapper for '.$url.' returned ' . $return_code);
if (! $return_code) { if (! $return_code) {
return(-1); return -1;
} }
if (($return_code == 503) && (stristr($a->get_curl_headers(), 'retry-after'))) { if (($return_code == 503) && (stristr($a->get_curl_headers(), 'retry-after'))) {
return(-1); return -1;
} }
return ((($return_code >= 200) && ($return_code < 300)) ? 0 : 1); return ((($return_code >= 200) && ($return_code < 300)) ? 0 : 1);
} }

View file

@ -56,58 +56,65 @@ function authenticate_success($user_record, $login_initial = false, $interactive
$a->user = $user_record; $a->user = $user_record;
if($interactive) { if ($interactive) {
if ($a->user['login_date'] <= NULL_DATE) { if ($a->user['login_date'] <= NULL_DATE) {
$_SESSION['return_url'] = 'profile_photo/new'; $_SESSION['return_url'] = 'profile_photo/new';
$a->module = 'profile_photo'; $a->module = 'profile_photo';
info( t("Welcome ") . $a->user['username'] . EOL); info( t("Welcome ") . $a->user['username'] . EOL);
info( t('Please upload a profile photo.') . EOL); info( t('Please upload a profile photo.') . EOL);
} } else {
else
info( t("Welcome back ") . $a->user['username'] . EOL); info( t("Welcome back ") . $a->user['username'] . EOL);
}
} }
$member_since = strtotime($a->user['register_date']); $member_since = strtotime($a->user['register_date']);
if(time() < ($member_since + ( 60 * 60 * 24 * 14))) if (time() < ($member_since + ( 60 * 60 * 24 * 14))) {
$_SESSION['new_member'] = true; $_SESSION['new_member'] = true;
else } else {
$_SESSION['new_member'] = false; $_SESSION['new_member'] = false;
if(strlen($a->user['timezone'])) { }
if (strlen($a->user['timezone'])) {
date_default_timezone_set($a->user['timezone']); date_default_timezone_set($a->user['timezone']);
$a->timezone = $a->user['timezone']; $a->timezone = $a->user['timezone'];
} }
$master_record = $a->user; $master_record = $a->user;
if((x($_SESSION,'submanage')) && intval($_SESSION['submanage'])) { if ((x($_SESSION,'submanage')) && intval($_SESSION['submanage'])) {
$r = q("select * from user where uid = %d limit 1", $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
intval($_SESSION['submanage']) intval($_SESSION['submanage'])
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
$master_record = $r[0]; $master_record = $r[0];
}
} }
$r = q("SELECT `uid`,`username`,`nickname` FROM `user` WHERE `password` = '%s' AND `email` = '%s' AND `account_removed` = 0 ", $r = q("SELECT `uid`,`username`,`nickname` FROM `user` WHERE `password` = '%s' AND `email` = '%s' AND `account_removed` = 0 ",
dbesc($master_record['password']), dbesc($master_record['password']),
dbesc($master_record['email']) dbesc($master_record['email'])
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
$a->identities = $r; $a->identities = $r;
else } else {
$a->identities = array(); $a->identities = array();
}
$r = q("select `user`.`uid`, `user`.`username`, `user`.`nickname` $r = q("SELECT `user`.`uid`, `user`.`username`, `user`.`nickname`
from manage INNER JOIN user on manage.mid = user.uid where `user`.`account_removed` = 0 FROM `manage`
and `manage`.`uid` = %d", INNER JOIN `user` ON `manage`.`mid` = `user`.`uid`
WHERE `user`.`account_removed` = 0 AND `manage`.`uid` = %d",
intval($master_record['uid']) intval($master_record['uid'])
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
$a->identities = array_merge($a->identities,$r); $a->identities = array_merge($a->identities,$r);
}
if($login_initial) if ($login_initial) {
logger('auth_identities: ' . print_r($a->identities,true), LOGGER_DEBUG); logger('auth_identities: ' . print_r($a->identities,true), LOGGER_DEBUG);
if($login_refresh) }
if ($login_refresh) {
logger('auth_identities refresh: ' . print_r($a->identities,true), LOGGER_DEBUG); logger('auth_identities refresh: ' . print_r($a->identities,true), LOGGER_DEBUG);
}
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1",
intval($_SESSION['uid'])); intval($_SESSION['uid']));
@ -119,7 +126,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive
header('X-Account-Management-Status: active; name="' . $a->user['username'] . '"; id="' . $a->user['nickname'] .'"'); header('X-Account-Management-Status: active; name="' . $a->user['username'] . '"; id="' . $a->user['nickname'] .'"');
if($login_initial || $login_refresh) { if ($login_initial || $login_refresh) {
q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d", q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d",
dbesc(datetime_convert()), dbesc(datetime_convert()),
@ -228,7 +235,7 @@ function can_write_wall(App $a, $owner) {
} }
function permissions_sql($owner_id,$remote_verified = false,$groups = null) { function permissions_sql($owner_id, $remote_verified = false, $groups = null) {
$local_user = local_user(); $local_user = local_user();
$remote_user = remote_user(); $remote_user = remote_user();
@ -238,7 +245,6 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
* *
* default permissions - anonymous user * default permissions - anonymous user
*/ */
$sql = " AND allow_cid = '' $sql = " AND allow_cid = ''
AND allow_gid = '' AND allow_gid = ''
AND deny_cid = '' AND deny_cid = ''
@ -249,21 +255,18 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
* Profile owner - everything is visible * Profile owner - everything is visible
*/ */
if(($local_user) && ($local_user == $owner_id)) { if (($local_user) && ($local_user == $owner_id)) {
$sql = ''; $sql = '';
} } elseif ($remote_user) {
/*
* Authenticated visitor. Unless pre-verified,
* check that the contact belongs to this $owner_id
* and load the groups the visitor belongs to.
* If pre-verified, the caller is expected to have already
* done this and passed the groups into this function.
*/
/** if (! $remote_verified) {
* Authenticated visitor. Unless pre-verified,
* check that the contact belongs to this $owner_id
* and load the groups the visitor belongs to.
* If pre-verified, the caller is expected to have already
* done this and passed the groups into this function.
*/
elseif($remote_user) {
if(! $remote_verified) {
$r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1", $r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1",
intval($remote_user), intval($remote_user),
intval($owner_id) intval($owner_id)
@ -273,16 +276,18 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
$groups = init_groups_visitor($remote_user); $groups = init_groups_visitor($remote_user);
} }
} }
if($remote_verified) { if ($remote_verified) {
$gs = '<<>>'; // should be impossible to match $gs = '<<>>'; // should be impossible to match
if(is_array($groups) && count($groups)) { if (is_array($groups) && count($groups)) {
foreach($groups as $g) foreach ($groups as $g)
$gs .= '|<' . intval($g) . '>'; $gs .= '|<' . intval($g) . '>';
} }
/*$sql = sprintf( /*
* @TODO old-lost code found?
$sql = sprintf(
" AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' ) " AND ( allow_cid = '' OR allow_cid REGEXP '<%d>' )
AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' ) AND ( deny_cid = '' OR NOT deny_cid REGEXP '<%d>' )
AND ( allow_gid = '' OR allow_gid REGEXP '%s' ) AND ( allow_gid = '' OR allow_gid REGEXP '%s' )
@ -292,7 +297,8 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
intval($remote_user), intval($remote_user),
dbesc($gs), dbesc($gs),
dbesc($gs) dbesc($gs)
);*/ );
*/
$sql = sprintf( $sql = sprintf(
" AND ( NOT (deny_cid REGEXP '<%d>' OR deny_gid REGEXP '%s') " AND ( NOT (deny_cid REGEXP '<%d>' OR deny_gid REGEXP '%s')
AND ( allow_cid REGEXP '<%d>' OR allow_gid REGEXP '%s' OR ( allow_cid = '' AND allow_gid = '') ) AND ( allow_cid REGEXP '<%d>' OR allow_gid REGEXP '%s' OR ( allow_cid = '' AND allow_gid = '') )
@ -309,7 +315,7 @@ function permissions_sql($owner_id,$remote_verified = false,$groups = null) {
} }
function item_permissions_sql($owner_id,$remote_verified = false,$groups = null) { function item_permissions_sql($owner_id, $remote_verified = false, $groups = null) {
$local_user = local_user(); $local_user = local_user();
$remote_user = remote_user(); $remote_user = remote_user();
@ -319,7 +325,6 @@ function item_permissions_sql($owner_id,$remote_verified = false,$groups = null)
* *
* default permissions - anonymous user * default permissions - anonymous user
*/ */
$sql = " AND `item`.allow_cid = '' $sql = " AND `item`.allow_cid = ''
AND `item`.allow_gid = '' AND `item`.allow_gid = ''
AND `item`.deny_cid = '' AND `item`.deny_cid = ''
@ -330,22 +335,17 @@ function item_permissions_sql($owner_id,$remote_verified = false,$groups = null)
/** /**
* Profile owner - everything is visible * Profile owner - everything is visible
*/ */
if ($local_user && ($local_user == $owner_id)) {
if($local_user && ($local_user == $owner_id)) {
$sql = ''; $sql = '';
} } elseif ($remote_user) {
/*
/** * Authenticated visitor. Unless pre-verified,
* Authenticated visitor. Unless pre-verified, * check that the contact belongs to this $owner_id
* check that the contact belongs to this $owner_id * and load the groups the visitor belongs to.
* and load the groups the visitor belongs to. * If pre-verified, the caller is expected to have already
* If pre-verified, the caller is expected to have already * done this and passed the groups into this function.
* done this and passed the groups into this function. */
*/ if (! $remote_verified) {
elseif($remote_user) {
if(! $remote_verified) {
$r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1", $r = q("SELECT id FROM contact WHERE id = %d AND uid = %d AND blocked = 0 LIMIT 1",
intval($remote_user), intval($remote_user),
intval($owner_id) intval($owner_id)
@ -355,13 +355,14 @@ function item_permissions_sql($owner_id,$remote_verified = false,$groups = null)
$groups = init_groups_visitor($remote_user); $groups = init_groups_visitor($remote_user);
} }
} }
if($remote_verified) { if ($remote_verified) {
$gs = '<<>>'; // should be impossible to match $gs = '<<>>'; // should be impossible to match
if(is_array($groups) && count($groups)) { if (is_array($groups) && count($groups)) {
foreach($groups as $g) foreach ($groups as $g) {
$gs .= '|<' . intval($g) . '>'; $gs .= '|<' . intval($g) . '>';
}
} }
$sql = sprintf( $sql = sprintf(
@ -412,7 +413,11 @@ function get_form_security_token($typename = '') {
} }
function check_form_security_token($typename = '', $formname = 'form_security_token') { function check_form_security_token($typename = '', $formname = 'form_security_token') {
if (!x($_REQUEST, $formname)) return false; if (!x($_REQUEST, $formname)) {
return false;
}
/// @TODO Careful, not secured!
$hash = $_REQUEST[$formname]; $hash = $_REQUEST[$formname];
$max_livetime = 10800; // 3 hours $max_livetime = 10800; // 3 hours
@ -420,7 +425,9 @@ function check_form_security_token($typename = '', $formname = 'form_security_to
$a = get_app(); $a = get_app();
$x = explode('.', $hash); $x = explode('.', $hash);
if (time() > (IntVal($x[0]) + $max_livetime)) return false; if (time() > (IntVal($x[0]) + $max_livetime)) {
return false;
}
$sec_hash = hash('whirlpool', $a->user['guid'] . $a->user['prvkey'] . session_id() . $x[0] . $typename); $sec_hash = hash('whirlpool', $a->user['guid'] . $a->user['prvkey'] . session_id() . $x[0] . $typename);
@ -441,7 +448,7 @@ function check_form_security_token_redirectOnErr($err_redirect, $typename = '',
} }
function check_form_security_token_ForbiddenOnErr($typename = '', $formname = 'form_security_token') { function check_form_security_token_ForbiddenOnErr($typename = '', $formname = 'form_security_token') {
if (!check_form_security_token($typename, $formname)) { if (!check_form_security_token($typename, $formname)) {
$a = get_app(); $a = get_app();
logger('check_form_security_token failed: user ' . $a->user['guid'] . ' - form element ' . $typename); logger('check_form_security_token failed: user ' . $a->user['guid'] . ' - form element ' . $typename);
logger('check_form_security_token failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA); logger('check_form_security_token failed: _REQUEST data: ' . print_r($_REQUEST, true), LOGGER_DATA);
header('HTTP/1.1 403 Forbidden'); header('HTTP/1.1 403 Forbidden');
@ -454,7 +461,7 @@ function check_form_security_token_ForbiddenOnErr($typename = '', $formname = 'f
// DFRN contact. They are *not* neccessarily unique across the entire site. // DFRN contact. They are *not* neccessarily unique across the entire site.
if(! function_exists('init_groups_visitor')) { if (! function_exists('init_groups_visitor')) {
function init_groups_visitor($contact_id) { function init_groups_visitor($contact_id) {
$groups = array(); $groups = array();
$r = q("SELECT `gid` FROM `group_member` $r = q("SELECT `gid` FROM `group_member`
@ -462,9 +469,8 @@ function init_groups_visitor($contact_id) {
intval($contact_id) intval($contact_id)
); );
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach($r as $rr) foreach ($r as $rr)
$groups[] = $rr['gid']; $groups[] = $rr['gid'];
} }
return $groups; return $groups;
}} }}

View file

@ -53,8 +53,8 @@ function poco_load($cid, $uid = 0, $zcid = 0, $url = null) {
function poco_load_worker($cid, $uid, $zcid, $url) { function poco_load_worker($cid, $uid, $zcid, $url) {
$a = get_app(); $a = get_app();
if($cid) { if ($cid) {
if((! $url) || (! $uid)) { if ((! $url) || (! $uid)) {
$r = q("select `poco`, `uid` from `contact` where `id` = %d limit 1", $r = q("select `poco`, `uid` from `contact` where `id` = %d limit 1",
intval($cid) intval($cid)
); );
@ -63,12 +63,14 @@ function poco_load_worker($cid, $uid, $zcid, $url) {
$uid = $r[0]['uid']; $uid = $r[0]['uid'];
} }
} }
if(! $uid) if (! $uid) {
return; return;
}
} }
if(! $url) if (! $url) {
return; return;
}
$url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ; $url = $url . (($uid) ? '/@me/@all?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation' : '?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation') ;
@ -80,18 +82,20 @@ function poco_load_worker($cid, $uid, $zcid, $url) {
logger('poco_load: return code: ' . $a->get_curl_code(), LOGGER_DEBUG); logger('poco_load: return code: ' . $a->get_curl_code(), LOGGER_DEBUG);
if(($a->get_curl_code() > 299) || (! $s)) if (($a->get_curl_code() > 299) || (! $s)) {
return; return;
}
$j = json_decode($s); $j = json_decode($s);
logger('poco_load: json: ' . print_r($j,true),LOGGER_DATA); logger('poco_load: json: ' . print_r($j,true),LOGGER_DATA);
if(! isset($j->entry)) if (! isset($j->entry)) {
return; return;
}
$total = 0; $total = 0;
foreach($j->entry as $entry) { foreach ($j->entry as $entry) {
$total ++; $total ++;
$profile_url = ''; $profile_url = '';
@ -155,13 +159,14 @@ function poco_load_worker($cid, $uid, $zcid, $url) {
} }
if (isset($entry->tags)) { if (isset($entry->tags)) {
foreach($entry->tags as $tag) { foreach ($entry->tags as $tag) {
$keywords = implode(", ", $tag); $keywords = implode(", ", $tag);
} }
} }
if (isset($entry->contactType) && ($entry->contactType >= 0)) if (isset($entry->contactType) && ($entry->contactType >= 0)) {
$contact_type = $entry->contactType; $contact_type = $entry->contactType;
}
$gcontact = array("url" => $profile_url, $gcontact = array("url" => $profile_url,
"name" => $name, "name" => $name,
@ -267,7 +272,7 @@ function sanitize_gcontact($gcontact) {
dbesc(normalise_link($gcontact['url'])) dbesc(normalise_link($gcontact['url']))
); );
if (count($x)) { if (dbm::is_result($x)) {
if (!isset($gcontact['network']) && ($x[0]["network"] != NETWORK_STATUSNET)) { if (!isset($gcontact['network']) && ($x[0]["network"] != NETWORK_STATUSNET)) {
$gcontact['network'] = $x[0]["network"]; $gcontact['network'] = $x[0]["network"];
} }
@ -299,7 +304,7 @@ function sanitize_gcontact($gcontact) {
if ($alternate && ($gcontact['network'] == NETWORK_OSTATUS)) { if ($alternate && ($gcontact['network'] == NETWORK_OSTATUS)) {
// Delete the old entry - if it exists // Delete the old entry - if it exists
$r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($orig_profile))); $r = q("SELECT `id` FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($orig_profile)));
if ($r) { if (dbm::is_result($r)) {
q("DELETE FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($orig_profile))); q("DELETE FROM `gcontact` WHERE `nurl` = '%s'", dbesc(normalise_link($orig_profile)));
q("DELETE FROM `glink` WHERE `gcid` = %d", intval($r[0]["id"])); q("DELETE FROM `glink` WHERE `gcid` = %d", intval($r[0]["id"]));
} }
@ -353,6 +358,7 @@ function link_gcontact($gcid, $uid = 0, $cid = 0, $zcid = 0) {
intval($gcid), intval($gcid),
intval($zcid) intval($zcid)
); );
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
q("INSERT INTO `glink` (`cid`, `uid`, `gcid`, `zcid`, `updated`) VALUES (%d, %d, %d, %d, '%s') ", q("INSERT INTO `glink` (`cid`, `uid`, `gcid`, `zcid`, `updated`) VALUES (%d, %d, %d, %d, '%s') ",
intval($cid), intval($cid),
@ -374,11 +380,13 @@ function link_gcontact($gcid, $uid = 0, $cid = 0, $zcid = 0) {
function poco_reachable($profile, $server = "", $network = "", $force = false) { function poco_reachable($profile, $server = "", $network = "", $force = false) {
if ($server == "") if ($server == "") {
$server = poco_detect_server($profile); $server = poco_detect_server($profile);
}
if ($server == "") if ($server == "") {
return true; return true;
}
return poco_check_server($server, $network, $force); return poco_check_server($server, $network, $force);
} }
@ -661,7 +669,7 @@ function poco_last_updated($profile, $force = false) {
$last_updated = ""; $last_updated = "";
foreach ($entries AS $entry) { foreach ($entries as $entry) {
$published = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue; $published = $xpath->query('atom:published/text()', $entry)->item(0)->nodeValue;
$updated = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue; $updated = $xpath->query('atom:updated/text()', $entry)->item(0)->nodeValue;
@ -694,48 +702,55 @@ function poco_last_updated($profile, $force = false) {
function poco_do_update($created, $updated, $last_failure, $last_contact) { function poco_do_update($created, $updated, $last_failure, $last_contact) {
$now = strtotime(datetime_convert()); $now = strtotime(datetime_convert());
if ($updated > $last_contact) if ($updated > $last_contact) {
$contact_time = strtotime($updated); $contact_time = strtotime($updated);
else } else {
$contact_time = strtotime($last_contact); $contact_time = strtotime($last_contact);
}
$failure_time = strtotime($last_failure); $failure_time = strtotime($last_failure);
$created_time = strtotime($created); $created_time = strtotime($created);
// If there is no "created" time then use the current time // If there is no "created" time then use the current time
if ($created_time <= 0) if ($created_time <= 0) {
$created_time = $now; $created_time = $now;
}
// If the last contact was less than 24 hours then don't update // If the last contact was less than 24 hours then don't update
if (($now - $contact_time) < (60 * 60 * 24)) if (($now - $contact_time) < (60 * 60 * 24)) {
return false; return false;
}
// If the last failure was less than 24 hours then don't update // If the last failure was less than 24 hours then don't update
if (($now - $failure_time) < (60 * 60 * 24)) if (($now - $failure_time) < (60 * 60 * 24)) {
return false; return false;
}
// If the last contact was less than a week ago and the last failure is older than a week then don't update // If the last contact was less than a week ago and the last failure is older than a week then don't update
//if ((($now - $contact_time) < (60 * 60 * 24 * 7)) && ($contact_time > $failure_time)) //if ((($now - $contact_time) < (60 * 60 * 24 * 7)) && ($contact_time > $failure_time))
// return false; // return false;
// If the last contact time was more than a week ago and the contact was created more than a week ago, then only try once a week // If the last contact time was more than a week ago and the contact was created more than a week ago, then only try once a week
if ((($now - $contact_time) > (60 * 60 * 24 * 7)) && (($now - $created_time) > (60 * 60 * 24 * 7)) && (($now - $failure_time) < (60 * 60 * 24 * 7))) if ((($now - $contact_time) > (60 * 60 * 24 * 7)) && (($now - $created_time) > (60 * 60 * 24 * 7)) && (($now - $failure_time) < (60 * 60 * 24 * 7))) {
return false; return false;
}
// If the last contact time was more than a month ago and the contact was created more than a month ago, then only try once a month // If the last contact time was more than a month ago and the contact was created more than a month ago, then only try once a month
if ((($now - $contact_time) > (60 * 60 * 24 * 30)) && (($now - $created_time) > (60 * 60 * 24 * 30)) && (($now - $failure_time) < (60 * 60 * 24 * 30))) if ((($now - $contact_time) > (60 * 60 * 24 * 30)) && (($now - $created_time) > (60 * 60 * 24 * 30)) && (($now - $failure_time) < (60 * 60 * 24 * 30))) {
return false; return false;
}
return true; return true;
} }
function poco_to_boolean($val) { function poco_to_boolean($val) {
if (($val == "true") || ($val == 1)) if (($val == "true") || ($val == 1)) {
return(true); return true;
if (($val == "false") || ($val == 0)) } elseif (($val == "false") || ($val == 0)) {
return(false); return false;
}
return ($val); return $val;
} }
/** /**
@ -763,7 +778,7 @@ function poco_detect_poco_data($data) {
return false; return false;
} }
foreach ($data->entry[0]->urls AS $url) { foreach ($data->entry[0]->urls as $url) {
if ($url->type == 'zot') { if ($url->type == 'zot') {
$server = array(); $server = array();
$server["platform"] = 'Hubzilla'; $server["platform"] = 'Hubzilla';
@ -798,7 +813,7 @@ function poco_fetch_nodeinfo($server_url) {
$nodeinfo_url = ''; $nodeinfo_url = '';
foreach ($nodeinfo->links AS $link) { foreach ($nodeinfo->links as $link) {
if ($link->rel == 'http://nodeinfo.diaspora.software/ns/schema/1.0') { if ($link->rel == 'http://nodeinfo.diaspora.software/ns/schema/1.0') {
$nodeinfo_url = $link->href; $nodeinfo_url = $link->href;
} }
@ -851,7 +866,7 @@ function poco_fetch_nodeinfo($server_url) {
$gnusocial = false; $gnusocial = false;
if (is_array($nodeinfo->protocols->inbound)) { if (is_array($nodeinfo->protocols->inbound)) {
foreach ($nodeinfo->protocols->inbound AS $inbound) { foreach ($nodeinfo->protocols->inbound as $inbound) {
if ($inbound == 'diaspora') { if ($inbound == 'diaspora') {
$diaspora = true; $diaspora = true;
} }
@ -926,13 +941,11 @@ function poco_detect_server_type($body) {
$attr[$attribute->name] = $attribute->value; $attr[$attribute->name] = $attribute->value;
} }
} }
if ($attr['property'] == 'generator') { if ($attr['property'] == 'generator' && in_array($attr['content'], array("hubzilla", "BlaBlaNet"))) {
if (in_array($attr['content'], array("hubzilla", "BlaBlaNet"))) { $server = array();
$server = array(); $server["platform"] = $attr['content'];
$server["platform"] = $attr['content']; $server["version"] = "";
$server["version"] = ""; $server["network"] = NETWORK_DIASPORA;
$server["network"] = NETWORK_DIASPORA;
}
} }
} }
} }
@ -951,8 +964,9 @@ function poco_check_server($server_url, $network = "", $force = false) {
$server_url = trim($server_url, "/"); $server_url = trim($server_url, "/");
$server_url = str_replace("/index.php", "", $server_url); $server_url = str_replace("/index.php", "", $server_url);
if ($server_url == "") if ($server_url == "") {
return false; return false;
}
$servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url))); $servers = q("SELECT * FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
if (dbm::is_result($servers)) { if (dbm::is_result($servers)) {
@ -964,8 +978,9 @@ function poco_check_server($server_url, $network = "", $force = false) {
$poco = $servers[0]["poco"]; $poco = $servers[0]["poco"];
$noscrape = $servers[0]["noscrape"]; $noscrape = $servers[0]["noscrape"];
if ($network == "") if ($network == "") {
$network = $servers[0]["network"]; $network = $servers[0]["network"];
}
$last_contact = $servers[0]["last_contact"]; $last_contact = $servers[0]["last_contact"];
$last_failure = $servers[0]["last_failure"]; $last_failure = $servers[0]["last_failure"];
@ -1083,10 +1098,10 @@ function poco_check_server($server_url, $network = "", $force = false) {
} }
$lines = explode("\n",$serverret["header"]); $lines = explode("\n",$serverret["header"]);
if(count($lines)) { if (count($lines)) {
foreach($lines as $line) { foreach($lines as $line) {
$line = trim($line); $line = trim($line);
if(stristr($line,'X-Diaspora-Version:')) { if (stristr($line,'X-Diaspora-Version:')) {
$platform = "Diaspora"; $platform = "Diaspora";
$version = trim(str_replace("X-Diaspora-Version:", "", $line)); $version = trim(str_replace("X-Diaspora-Version:", "", $line));
$version = trim(str_replace("x-diaspora-version:", "", $version)); $version = trim(str_replace("x-diaspora-version:", "", $version));
@ -1095,7 +1110,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
$version = $versionparts[0]; $version = $versionparts[0];
} }
if(stristr($line,'Server: Mastodon')) { if (stristr($line,'Server: Mastodon')) {
$platform = "Mastodon"; $platform = "Mastodon";
$network = NETWORK_OSTATUS; $network = NETWORK_OSTATUS;
} }
@ -1165,10 +1180,11 @@ function poco_check_server($server_url, $network = "", $force = false) {
$network = NETWORK_DIASPORA; $network = NETWORK_DIASPORA;
} }
if (isset($data->site->redmatrix)) { if (isset($data->site->redmatrix)) {
if (isset($data->site->redmatrix->PLATFORM_NAME)) if (isset($data->site->redmatrix->PLATFORM_NAME)) {
$platform = $data->site->redmatrix->PLATFORM_NAME; $platform = $data->site->redmatrix->PLATFORM_NAME;
elseif (isset($data->site->redmatrix->RED_PLATFORM)) } elseif (isset($data->site->redmatrix->RED_PLATFORM)) {
$platform = $data->site->redmatrix->RED_PLATFORM; $platform = $data->site->redmatrix->RED_PLATFORM;
}
$version = $data->site->redmatrix->RED_VERSION; $version = $data->site->redmatrix->RED_VERSION;
$network = NETWORK_DIASPORA; $network = NETWORK_DIASPORA;
@ -1185,12 +1201,13 @@ function poco_check_server($server_url, $network = "", $force = false) {
$data->site->private = poco_to_boolean($data->site->private); $data->site->private = poco_to_boolean($data->site->private);
$data->site->inviteonly = poco_to_boolean($data->site->inviteonly); $data->site->inviteonly = poco_to_boolean($data->site->inviteonly);
if (!$data->site->closed && !$data->site->private and $data->site->inviteonly) if (!$data->site->closed && !$data->site->private and $data->site->inviteonly) {
$register_policy = REGISTER_APPROVE; $register_policy = REGISTER_APPROVE;
elseif (!$data->site->closed && !$data->site->private) } elseif (!$data->site->closed && !$data->site->private) {
$register_policy = REGISTER_OPEN; $register_policy = REGISTER_OPEN;
else } else {
$register_policy = REGISTER_CLOSED; $register_policy = REGISTER_CLOSED;
}
} }
} }
} }
@ -1254,8 +1271,9 @@ function poco_check_server($server_url, $network = "", $force = false) {
if (!$failure && in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS))) { if (!$failure && in_array($network, array(NETWORK_DFRN, NETWORK_OSTATUS))) {
$serverret = z_fetch_url($server_url."/friendica/json"); $serverret = z_fetch_url($server_url."/friendica/json");
if (!$serverret["success"]) if (!$serverret["success"]) {
$serverret = z_fetch_url($server_url."/friendika/json"); $serverret = z_fetch_url($server_url."/friendika/json");
}
if ($serverret["success"]) { if ($serverret["success"]) {
$data = json_decode($serverret["body"]); $data = json_decode($serverret["body"]);
@ -1299,7 +1317,7 @@ function poco_check_server($server_url, $network = "", $force = false) {
if (($last_contact <= $last_failure) && !$failure) { if (($last_contact <= $last_failure) && !$failure) {
logger("Server ".$server_url." seems to be alive, but last contact wasn't set - could be a bug", LOGGER_DEBUG); 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) && $failure) { } elseif (($last_contact >= $last_failure) && $failure) {
logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG); logger("Server ".$server_url." seems to be dead, but last failure wasn't set - could be a bug", LOGGER_DEBUG);
} }
@ -1346,12 +1364,12 @@ function poco_check_server($server_url, $network = "", $force = false) {
dbesc(datetime_convert()) dbesc(datetime_convert())
); );
} }
logger("End discovery for server ".$server_url, LOGGER_DEBUG); logger("End discovery for server " . $server_url, LOGGER_DEBUG);
return !$failure; return !$failure;
} }
function count_common_friends($uid,$cid) { function count_common_friends($uid, $cid) {
$r = q("SELECT count(*) as `total` $r = q("SELECT count(*) as `total`
FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id` FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id`
@ -1364,20 +1382,22 @@ function count_common_friends($uid,$cid) {
intval($cid) intval($cid)
); );
// logger("count_common_friends: $uid $cid {$r[0]['total']}"); // logger("count_common_friends: $uid $cid {$r[0]['total']}");
if (dbm::is_result($r)) if (dbm::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
function common_friends($uid,$cid,$start = 0,$limit=9999,$shuffle = false) { function common_friends($uid, $cid, $start = 0, $limit = 9999, $shuffle = false) {
if($shuffle) if ($shuffle) {
$sql_extra = " order by rand() "; $sql_extra = " order by rand() ";
else } else {
$sql_extra = " order by `gcontact`.`name` asc "; $sql_extra = " order by `gcontact`.`name` asc ";
}
$r = q("SELECT `gcontact`.*, `contact`.`id` AS `cid` $r = q("SELECT `gcontact`.*, `contact`.`id` AS `cid`
FROM `glink` FROM `glink`
@ -1396,12 +1416,13 @@ function common_friends($uid,$cid,$start = 0,$limit=9999,$shuffle = false) {
intval($limit) intval($limit)
); );
/// @TODO Check all calling-findings of this function if they properly use dbm::is_result()
return $r; return $r;
} }
function count_common_friends_zcid($uid,$zcid) { function count_common_friends_zcid($uid, $zcid) {
$r = q("SELECT count(*) as `total` $r = q("SELECT count(*) as `total`
FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id` FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id`
@ -1411,18 +1432,20 @@ function count_common_friends_zcid($uid,$zcid) {
intval($uid) intval($uid)
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
function common_friends_zcid($uid,$zcid,$start = 0, $limit = 9999,$shuffle = false) { function common_friends_zcid($uid, $zcid, $start = 0, $limit = 9999, $shuffle = false) {
if($shuffle) if ($shuffle) {
$sql_extra = " order by rand() "; $sql_extra = " order by rand() ";
else } else {
$sql_extra = " order by `gcontact`.`name` asc "; $sql_extra = " order by `gcontact`.`name` asc ";
}
$r = q("SELECT `gcontact`.* $r = q("SELECT `gcontact`.*
FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id` FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id`
@ -1435,12 +1458,13 @@ function common_friends_zcid($uid,$zcid,$start = 0, $limit = 9999,$shuffle = fal
intval($limit) intval($limit)
); );
/// @TODO Check all calling-findings of this function if they properly use dbm::is_result()
return $r; return $r;
} }
function count_all_friends($uid,$cid) { function count_all_friends($uid, $cid) {
$r = q("SELECT count(*) as `total` $r = q("SELECT count(*) as `total`
FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id` FROM `glink` INNER JOIN `gcontact` on `glink`.`gcid` = `gcontact`.`id`
@ -1450,14 +1474,15 @@ function count_all_friends($uid,$cid) {
intval($uid) intval($uid)
); );
if (dbm::is_result($r)) if (dbm::is_result($r)) {
return $r[0]['total']; return $r[0]['total'];
}
return 0; return 0;
} }
function all_friends($uid,$cid,$start = 0, $limit = 80) { function all_friends($uid, $cid, $start = 0, $limit = 80) {
$r = q("SELECT `gcontact`.*, `contact`.`id` AS `cid` $r = q("SELECT `gcontact`.*, `contact`.`id` AS `cid`
FROM `glink` FROM `glink`
@ -1473,6 +1498,7 @@ function all_friends($uid,$cid,$start = 0, $limit = 80) {
intval($limit) intval($limit)
); );
/// @TODO Check all calling-findings of this function if they properly use dbm::is_result()
return $r; return $r;
} }
@ -1484,20 +1510,24 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
return array(); return array();
} }
// Uncommented because the result of the queries are to big to store it in the cache. /*
// We need to decide if we want to change the db column type or if we want to delete it. * Uncommented because the result of the queries are to big to store it in the cache.
// $list = Cache::get("suggestion_query:".$uid.":".$start.":".$limit); * We need to decide if we want to change the db column type or if we want to delete it.
// if (!is_null($list)) { */
// return $list; //$list = Cache::get("suggestion_query:".$uid.":".$start.":".$limit);
// } //if (!is_null($list)) {
// return $list;
//}
$network = array(NETWORK_DFRN); $network = array(NETWORK_DFRN);
if (get_config('system','diaspora_enabled')) if (get_config('system','diaspora_enabled')) {
$network[] = NETWORK_DIASPORA; $network[] = NETWORK_DIASPORA;
}
if (!get_config('system','ostatus_disabled')) if (!get_config('system','ostatus_disabled')) {
$network[] = NETWORK_OSTATUS; $network[] = NETWORK_OSTATUS;
}
$sql_network = implode("', '", $network); $sql_network = implode("', '", $network);
$sql_network = "'".$sql_network."'"; $sql_network = "'".$sql_network."'";
@ -1524,9 +1554,11 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
); );
if (dbm::is_result($r) && count($r) >= ($limit -1)) { if (dbm::is_result($r) && count($r) >= ($limit -1)) {
// Uncommented because the result of the queries are to big to store it in the cache. /*
// We need to decide if we want to change the db column type or if we want to delete it. * Uncommented because the result of the queries are to big to store it in the cache.
// Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $r, CACHE_FIVE_MINUTES); * We need to decide if we want to change the db column type or if we want to delete it.
*/
//Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $r, CACHE_FIVE_MINUTES);
return $r; return $r;
} }
@ -1550,18 +1582,23 @@ function suggestion_query($uid, $start = 0, $limit = 80) {
); );
$list = array(); $list = array();
foreach ($r2 AS $suggestion) foreach ($r2 as $suggestion) {
$list[$suggestion["nurl"]] = $suggestion; $list[$suggestion["nurl"]] = $suggestion;
}
foreach ($r AS $suggestion) foreach ($r as $suggestion) {
$list[$suggestion["nurl"]] = $suggestion; $list[$suggestion["nurl"]] = $suggestion;
}
while (sizeof($list) > ($limit)) while (sizeof($list) > ($limit)) {
array_pop($list); array_pop($list);
}
// Uncommented because the result of the queries are to big to store it in the cache. /*
// We need to decide if we want to change the db column type or if we want to delete it. * Uncommented because the result of the queries are to big to store it in the cache.
// Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $list, CACHE_FIVE_MINUTES); * We need to decide if we want to change the db column type or if we want to delete it.
*/
//Cache::set("suggestion_query:".$uid.":".$start.":".$limit, $list, CACHE_FIVE_MINUTES);
return $list; return $list;
} }
@ -1572,7 +1609,7 @@ function update_suggestions() {
$done = array(); $done = array();
/// @TODO Check if it is really neccessary to poll the own server /// @TODO Check if it is really neccessary to poll the own server
poco_load(0,0,0,App::get_baseurl() . '/poco'); poco_load(0, 0, 0, App::get_baseurl() . '/poco');
$done[] = App::get_baseurl() . '/poco'; $done[] = App::get_baseurl() . '/poco';
@ -1602,8 +1639,9 @@ function update_suggestions() {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
$base = substr($rr['poco'],0,strrpos($rr['poco'],'/')); $base = substr($rr['poco'],0,strrpos($rr['poco'],'/'));
if(! in_array($base,$done)) if (! in_array($base,$done)) {
poco_load(0,0,0,$base); poco_load(0,0,0,$base);
}
} }
} }
} }
@ -1624,7 +1662,7 @@ function poco_fetch_serverlist($poco) {
return; return;
} }
foreach ($serverlist AS $server) { foreach ($serverlist as $server) {
$server_url = str_replace("/index.php", "", $server->url); $server_url = str_replace("/index.php", "", $server->url);
$r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url))); $r = q("SELECT `nurl` FROM `gserver` WHERE `nurl` = '%s'", dbesc(normalise_link($server_url)));
@ -1640,8 +1678,9 @@ function poco_discover_federation() {
if ($last) { if ($last) {
$next = $last + (24 * 60 * 60); $next = $last + (24 * 60 * 60);
if($next > time()) if ($next > time()) {
return; return;
}
} }
// Discover Friendica, Hubzilla and Diaspora servers // Discover Friendica, Hubzilla and Diaspora servers
@ -1650,7 +1689,7 @@ function poco_discover_federation() {
if ($serverdata) { if ($serverdata) {
$servers = json_decode($serverdata); $servers = json_decode($serverdata);
foreach ($servers->pods AS $server) { foreach ($servers->pods as $server) {
proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode("https://".$server->host)); proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode("https://".$server->host));
} }
} }
@ -1662,7 +1701,7 @@ function poco_discover_federation() {
if ($serverdata) { if ($serverdata) {
$servers = json_decode($serverdata); $servers = json_decode($serverdata);
foreach ($servers AS $server) { foreach ($servers as $server) {
$url = (is_null($server->https_score) ? 'http' : 'https').'://'.$server->name; $url = (is_null($server->https_score) ? 'http' : 'https').'://'.$server->name;
proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode($url)); proc_run(PRIORITY_LOW, "include/discover_poco.php", "server", base64_encode($url));
} }
@ -1679,7 +1718,7 @@ function poco_discover_federation() {
// if ($result["success"]) { // if ($result["success"]) {
// $servers = json_decode($result["body"]); // $servers = json_decode($result["body"]);
// foreach($servers->data AS $server) // foreach($servers->data as $server)
// poco_check_server($server->instance_address); // poco_check_server($server->instance_address);
// } // }
//} //}
@ -1765,7 +1804,7 @@ function poco_discover($complete = false) {
$r = q("SELECT `id`, `url`, `network` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `poco` != '' AND `last_poco_query` < '%s' ORDER BY RAND()", dbesc($last_update)); $r = q("SELECT `id`, `url`, `network` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `poco` != '' AND `last_poco_query` < '%s' ORDER BY RAND()", dbesc($last_update));
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
foreach ($r AS $server) { foreach ($r as $server) {
if (!poco_check_server($server["url"], $server["network"])) { if (!poco_check_server($server["url"], $server["network"])) {
// The server is not reachable? Okay, then we will try it later // The server is not reachable? Okay, then we will try it later
@ -1785,18 +1824,20 @@ function poco_discover($complete = false) {
function poco_discover_server_users($data, $server) { function poco_discover_server_users($data, $server) {
if (!isset($data->entry)) if (!isset($data->entry)) {
return; return;
}
foreach ($data->entry AS $entry) { foreach ($data->entry as $entry) {
$username = ""; $username = "";
if (isset($entry->urls)) { if (isset($entry->urls)) {
foreach($entry->urls as $url) foreach ($entry->urls as $url) {
if ($url->type == 'profile') { if ($url->type == 'profile') {
$profile_url = $url->value; $profile_url = $url->value;
$urlparts = parse_url($profile_url); $urlparts = parse_url($profile_url);
$username = end(explode("/", $urlparts["path"])); $username = end(explode("/", $urlparts["path"]));
} }
}
} }
if ($username != "") { if ($username != "") {
logger("Fetch contacts for the user ".$username." from the server ".$server["nurl"], LOGGER_DEBUG); logger("Fetch contacts for the user ".$username." from the server ".$server["nurl"], LOGGER_DEBUG);
@ -1805,20 +1846,22 @@ function poco_discover_server_users($data, $server) {
$url = $server["poco"]."/".$username."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation"; $url = $server["poco"]."/".$username."/?fields=displayName,urls,photos,updated,network,aboutMe,currentLocation,tags,gender,contactType,generation";
$retdata = z_fetch_url($url); $retdata = z_fetch_url($url);
if ($retdata["success"]) if ($retdata["success"]) {
poco_discover_server(json_decode($retdata["body"]), 3); poco_discover_server(json_decode($retdata["body"]), 3);
}
} }
} }
} }
function poco_discover_server($data, $default_generation = 0) { function poco_discover_server($data, $default_generation = 0) {
if (!isset($data->entry) || !count($data->entry)) if (!isset($data->entry) || !count($data->entry)) {
return false; return false;
}
$success = false; $success = false;
foreach ($data->entry AS $entry) { foreach ($data->entry as $entry) {
$profile_url = ''; $profile_url = '';
$profile_photo = ''; $profile_photo = '';
$connect_url = ''; $connect_url = '';
@ -1835,7 +1878,7 @@ function poco_discover_server($data, $default_generation = 0) {
$name = $entry->displayName; $name = $entry->displayName;
if (isset($entry->urls)) { if (isset($entry->urls)) {
foreach($entry->urls as $url) { foreach ($entry->urls as $url) {
if ($url->type == 'profile') { if ($url->type == 'profile') {
$profile_url = $url->value; $profile_url = $url->value;
continue; continue;
@ -1860,19 +1903,19 @@ function poco_discover_server($data, $default_generation = 0) {
$updated = date("Y-m-d H:i:s", strtotime($entry->updated)); $updated = date("Y-m-d H:i:s", strtotime($entry->updated));
} }
if(isset($entry->network)) { if (isset($entry->network)) {
$network = $entry->network; $network = $entry->network;
} }
if(isset($entry->currentLocation)) { if (isset($entry->currentLocation)) {
$location = $entry->currentLocation; $location = $entry->currentLocation;
} }
if(isset($entry->aboutMe)) { if (isset($entry->aboutMe)) {
$about = html2bbcode($entry->aboutMe); $about = html2bbcode($entry->aboutMe);
} }
if(isset($entry->gender)) { if (isset($entry->gender)) {
$gender = $entry->gender; $gender = $entry->gender;
} }
@ -1884,7 +1927,7 @@ function poco_discover_server($data, $default_generation = 0) {
$contact_type = $entry->contactType; $contact_type = $entry->contactType;
} }
if(isset($entry->tags)) { if (isset($entry->tags)) {
foreach ($entry->tags as $tag) { foreach ($entry->tags as $tag) {
$keywords = implode(", ", $tag); $keywords = implode(", ", $tag);
} }
@ -1930,19 +1973,23 @@ function poco_discover_server($data, $default_generation = 0) {
function clean_contact_url($url) { function clean_contact_url($url) {
$parts = parse_url($url); $parts = parse_url($url);
if (!isset($parts["scheme"]) || !isset($parts["host"])) if (!isset($parts["scheme"]) || !isset($parts["host"])) {
return $url; return $url;
}
$new_url = $parts["scheme"]."://".$parts["host"]; $new_url = $parts["scheme"]."://".$parts["host"];
if (isset($parts["port"])) if (isset($parts["port"])) {
$new_url .= ":".$parts["port"]; $new_url .= ":".$parts["port"];
}
if (isset($parts["path"])) if (isset($parts["path"])) {
$new_url .= $parts["path"]; $new_url .= $parts["path"];
}
if ($new_url != $url) if ($new_url != $url) {
logger("Cleaned contact url ".$url." to ".$new_url." - Called by: ".App::callstack(), LOGGER_DEBUG); logger("Cleaned contact url ".$url." to ".$new_url." - Called by: ".App::callstack(), LOGGER_DEBUG);
}
return $new_url; return $new_url;
} }
@ -1981,19 +2028,22 @@ function get_gcontact_id($contact) {
return false; return false;
} }
if ($contact["network"] == NETWORK_STATUSNET) if ($contact["network"] == NETWORK_STATUSNET) {
$contact["network"] = NETWORK_OSTATUS; $contact["network"] = NETWORK_OSTATUS;
}
// All new contacts are hidden by default // All new contacts are hidden by default
if (!isset($contact["hide"])) if (!isset($contact["hide"])) {
$contact["hide"] = true; $contact["hide"] = true;
}
// Replace alternate OStatus user format with the primary one // Replace alternate OStatus user format with the primary one
fix_alternate_contact_address($contact); fix_alternate_contact_address($contact);
// Remove unwanted parts from the contact url (e.g. "?zrl=...") // Remove unwanted parts from the contact url (e.g. "?zrl=...")
if (in_array($contact["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) if (in_array($contact["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS))) {
$contact["url"] = clean_contact_url($contact["url"]); $contact["url"] = clean_contact_url($contact["url"]);
}
dba::lock('gcontact'); dba::lock('gcontact');
$r = q("SELECT `id`, `last_contact`, `last_failure`, `network` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1", $r = q("SELECT `id`, `last_contact`, `last_failure`, `network` FROM `gcontact` WHERE `nurl` = '%s' LIMIT 1",
@ -2031,7 +2081,7 @@ function get_gcontact_id($contact) {
$r = q("SELECT `id`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2", $r = q("SELECT `id`, `network` FROM `gcontact` WHERE `nurl` = '%s' ORDER BY `id` LIMIT 2",
dbesc(normalise_link($contact["url"]))); dbesc(normalise_link($contact["url"])));
if ($r) { if (dbm::is_result($r)) {
$gcontact_id = $r[0]["id"]; $gcontact_id = $r[0]["id"];
$doprobing = in_array($r[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, "")); $doprobing = in_array($r[0]["network"], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS, ""));
@ -2064,8 +2114,9 @@ function update_gcontact($contact) {
$gcontact_id = get_gcontact_id($contact); $gcontact_id = get_gcontact_id($contact);
if (!$gcontact_id) if (!$gcontact_id) {
return false; return false;
}
$r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`, $r = q("SELECT `name`, `nick`, `photo`, `location`, `about`, `addr`, `generation`, `birthday`, `gender`, `keywords`,
`contact-type`, `hide`, `nsfw`, `network`, `alias`, `notify`, `server_url`, `connect`, `updated`, `url` `contact-type`, `hide`, `nsfw`, `network`, `alias`, `notify`, `server_url`, `connect`, `updated`, `url`
@ -2074,8 +2125,9 @@ function update_gcontact($contact) {
// Get all field names // Get all field names
$fields = array(); $fields = array();
foreach ($r[0] AS $field => $data) foreach ($r[0] as $field => $data) {
$fields[$field] = $data; $fields[$field] = $data;
}
unset($fields["url"]); unset($fields["url"]);
unset($fields["updated"]); unset($fields["updated"]);
@ -2083,47 +2135,58 @@ function update_gcontact($contact) {
// Bugfix: We had an error in the storing of keywords which lead to the "0" // Bugfix: We had an error in the storing of keywords which lead to the "0"
// This value is still transmitted via poco. // This value is still transmitted via poco.
if ($contact["keywords"] == "0") if ($contact["keywords"] == "0") {
unset($contact["keywords"]); unset($contact["keywords"]);
}
if ($r[0]["keywords"] == "0") if ($r[0]["keywords"] == "0") {
$r[0]["keywords"] = ""; $r[0]["keywords"] = "";
}
// assign all unassigned fields from the database entry // assign all unassigned fields from the database entry
foreach ($fields AS $field => $data) foreach ($fields as $field => $data) {
if (!isset($contact[$field]) || ($contact[$field] == "")) if (!isset($contact[$field]) || ($contact[$field] == "")) {
$contact[$field] = $r[0][$field]; $contact[$field] = $r[0][$field];
}
}
if (!isset($contact["hide"])) if (!isset($contact["hide"])) {
$contact["hide"] = $r[0]["hide"]; $contact["hide"] = $r[0]["hide"];
}
$fields["hide"] = $r[0]["hide"]; $fields["hide"] = $r[0]["hide"];
if ($contact["network"] == NETWORK_STATUSNET) if ($contact["network"] == NETWORK_STATUSNET) {
$contact["network"] = NETWORK_OSTATUS; $contact["network"] = NETWORK_OSTATUS;
}
// Replace alternate OStatus user format with the primary one // Replace alternate OStatus user format with the primary one
fix_alternate_contact_address($contact); fix_alternate_contact_address($contact);
if (!isset($contact["updated"])) if (!isset($contact["updated"])) {
$contact["updated"] = dbm::date(); $contact["updated"] = dbm::date();
}
if ($contact["server_url"] == "") { if ($contact["server_url"] == "") {
$server_url = $contact["url"]; $server_url = $contact["url"];
$server_url = matching_url($server_url, $contact["alias"]); $server_url = matching_url($server_url, $contact["alias"]);
if ($server_url != "") if ($server_url != "") {
$contact["server_url"] = $server_url; $contact["server_url"] = $server_url;
}
$server_url = matching_url($server_url, $contact["photo"]); $server_url = matching_url($server_url, $contact["photo"]);
if ($server_url != "") if ($server_url != "") {
$contact["server_url"] = $server_url; $contact["server_url"] = $server_url;
}
$server_url = matching_url($server_url, $contact["notify"]); $server_url = matching_url($server_url, $contact["notify"]);
if ($server_url != "") if ($server_url != "") {
$contact["server_url"] = $server_url; $contact["server_url"] = $server_url;
} else }
} else {
$contact["server_url"] = normalise_link($contact["server_url"]); $contact["server_url"] = normalise_link($contact["server_url"]);
}
if (($contact["addr"] == "") && ($contact["server_url"] != "") && ($contact["nick"] != "")) { if (($contact["addr"] == "") && ($contact["server_url"] != "") && ($contact["nick"] != "")) {
$hostname = str_replace("http://", "", $contact["server_url"]); $hostname = str_replace("http://", "", $contact["server_url"]);
@ -2135,11 +2198,12 @@ function update_gcontact($contact) {
unset($fields["generation"]); unset($fields["generation"]);
if ((($contact["generation"] > 0) && ($contact["generation"] <= $r[0]["generation"])) || ($r[0]["generation"] == 0)) { if ((($contact["generation"] > 0) && ($contact["generation"] <= $r[0]["generation"])) || ($r[0]["generation"] == 0)) {
foreach ($fields AS $field => $data) foreach ($fields as $field => $data) {
if ($contact[$field] != $r[0][$field]) { if ($contact[$field] != $r[0][$field]) {
logger("Difference for contact ".$contact["url"]." in field '".$field."'. New value: '".$contact[$field]."', old value '".$r[0][$field]."'", LOGGER_DEBUG); logger("Difference for contact ".$contact["url"]." in field '".$field."'. New value: '".$contact[$field]."', old value '".$r[0][$field]."'", LOGGER_DEBUG);
$update = true; $update = true;
} }
}
if ($contact["generation"] < $r[0]["generation"]) { if ($contact["generation"] < $r[0]["generation"]) {
logger("Difference for contact ".$contact["url"]." in field 'generation'. new value: '".$contact["generation"]."', old value '".$r[0]["generation"]."'", LOGGER_DEBUG); logger("Difference for contact ".$contact["url"]." in field 'generation'. new value: '".$contact["generation"]."', old value '".$r[0]["generation"]."'", LOGGER_DEBUG);
@ -2171,7 +2235,7 @@ function update_gcontact($contact) {
$r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = 0 ORDER BY `id` LIMIT 1", $r = q("SELECT `id` FROM `contact` WHERE `nurl` = '%s' AND `uid` = 0 ORDER BY `id` LIMIT 1",
dbesc(normalise_link($contact["url"]))); dbesc(normalise_link($contact["url"])));
if ($r) { if (dbm::is_result($r)) {
logger("Update shadow contact ".$r[0]["id"], LOGGER_DEBUG); logger("Update shadow contact ".$r[0]["id"], LOGGER_DEBUG);
update_contact_avatar($contact["photo"], 0, $r[0]["id"]); update_contact_avatar($contact["photo"], 0, $r[0]["id"]);
@ -2231,10 +2295,11 @@ function update_gcontact_for_user($uid) {
"country-name" => $r[0]["country-name"])); "country-name" => $r[0]["country-name"]));
// The "addr" field was added in 3.4.3 so it can be empty for older users // The "addr" field was added in 3.4.3 so it can be empty for older users
if ($r[0]["addr"] != "") if ($r[0]["addr"] != "") {
$addr = $r[0]["nickname"].'@'.str_replace(array("http://", "https://"), "", App::get_baseurl()); $addr = $r[0]["nickname"].'@'.str_replace(array("http://", "https://"), "", App::get_baseurl());
else } else {
$addr = $r[0]["addr"]; $addr = $r[0]["addr"];
}
$gcontact = array("name" => $r[0]["name"], "location" => $location, "about" => $r[0]["about"], $gcontact = array("name" => $r[0]["name"], "location" => $location, "about" => $r[0]["about"],
"gender" => $r[0]["gender"], "keywords" => $r[0]["pub_keywords"], "gender" => $r[0]["gender"], "keywords" => $r[0]["pub_keywords"],
@ -2262,33 +2327,37 @@ function gs_fetch_users($server) {
$url = $server."/main/statistics"; $url = $server."/main/statistics";
$result = z_fetch_url($url); $result = z_fetch_url($url);
if (!$result["success"]) if (!$result["success"]) {
return false; return false;
}
$statistics = json_decode($result["body"]); $statistics = json_decode($result["body"]);
if (is_object($statistics->config)) { if (is_object($statistics->config)) {
if ($statistics->config->instance_with_ssl) if ($statistics->config->instance_with_ssl) {
$server = "https://"; $server = "https://";
else } else {
$server = "http://"; $server = "http://";
}
$server .= $statistics->config->instance_address; $server .= $statistics->config->instance_address;
$hostname = $statistics->config->instance_address; $hostname = $statistics->config->instance_address;
} else { } else {
if ($statistics->instance_with_ssl) /// @TODO is_object() above means here no object, still $statistics is being used as object
if ($statistics->instance_with_ssl) {
$server = "https://"; $server = "https://";
else } else {
$server = "http://"; $server = "http://";
}
$server .= $statistics->instance_address; $server .= $statistics->instance_address;
$hostname = $statistics->instance_address; $hostname = $statistics->instance_address;
} }
if (is_object($statistics->users)) if (is_object($statistics->users)) {
foreach ($statistics->users AS $nick => $user) { foreach ($statistics->users as $nick => $user) {
$profile_url = $server."/".$user->nickname; $profile_url = $server."/".$user->nickname;
$contact = array("url" => $profile_url, $contact = array("url" => $profile_url,
@ -2300,6 +2369,7 @@ function gs_fetch_users($server) {
"photo" => App::get_baseurl()."/images/person-175.jpg"); "photo" => App::get_baseurl()."/images/person-175.jpg");
get_gcontact_id($contact); get_gcontact_id($contact);
} }
}
} }
/** /**
@ -2315,10 +2385,11 @@ function gs_discover() {
$r = q("SELECT `nurl`, `url` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `network` = '%s' AND `last_poco_query` < '%s' ORDER BY RAND() LIMIT 5", $r = q("SELECT `nurl`, `url` FROM `gserver` WHERE `last_contact` >= `last_failure` AND `network` = '%s' AND `last_poco_query` < '%s' ORDER BY RAND() LIMIT 5",
dbesc(NETWORK_OSTATUS), dbesc($last_update)); dbesc(NETWORK_OSTATUS), dbesc($last_update));
if (!$r) if (!dbm::is_result($r)) {
return; return;
}
foreach ($r AS $server) { foreach ($r as $server) {
gs_fetch_users($server["url"]); gs_fetch_users($server["url"]);
q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"])); q("UPDATE `gserver` SET `last_poco_query` = '%s' WHERE `nurl` = '%s'", dbesc(datetime_convert()), dbesc($server["nurl"]));
} }
@ -2337,5 +2408,6 @@ function poco_serverlist() {
if (!dbm::is_result($r)) { if (!dbm::is_result($r)) {
return false; return false;
} }
return $r; return $r;
} }

View file

@ -58,10 +58,10 @@ function create_tags_from_item($itemid) {
if (substr(trim($tag), 0, 1) == "#") { if (substr(trim($tag), 0, 1) == "#") {
// try to ignore #039 or #1 or anything like that // try to ignore #039 or #1 or anything like that
if(ctype_digit(substr(trim($tag),1))) if (ctype_digit(substr(trim($tag),1)))
continue; continue;
// try to ignore html hex escapes, e.g. #x2317 // try to ignore html hex escapes, e.g. #x2317
if((substr(trim($tag),1,1) == 'x' || substr(trim($tag),1,1) == 'X') && ctype_digit(substr(trim($tag),2))) if ((substr(trim($tag),1,1) == 'x' || substr(trim($tag),1,1) == 'X') && ctype_digit(substr(trim($tag),2)))
continue; continue;
$type = TERM_HASHTAG; $type = TERM_HASHTAG;
$term = substr($tag, 1); $term = substr($tag, 1);
@ -107,9 +107,10 @@ function create_tags_from_item($itemid) {
function create_tags_from_itemuri($itemuri, $uid) { function create_tags_from_itemuri($itemuri, $uid) {
$messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid));
if(count($messages)) { if (count($messages)) {
foreach ($messages as $message) foreach ($messages as $message) {
create_tags_from_item($message["id"]); create_tags_from_item($message["id"]);
}
} }
} }

View file

@ -69,7 +69,7 @@ class Template implements ITemplateEngine {
* {{ if <$var>==<val|$var> }}...[{{ else }} ...]{{ endif }} * {{ if <$var>==<val|$var> }}...[{{ else }} ...]{{ endif }}
* {{ if <$var>!=<val|$var> }}...[{{ else }} ...]{{ endif }} * {{ if <$var>!=<val|$var> }}...[{{ else }} ...]{{ endif }}
*/ */
private function _replcb_if($args) { private function _replcb_if ($args) {
if (strpos($args[2], "==") > 0) { if (strpos($args[2], "==") > 0) {
list($a, $b) = array_map("trim", explode("==", $args[2])); list($a, $b) = array_map("trim", explode("==", $args[2]));
$a = $this->_get_var($a); $a = $this->_get_var($a);
@ -95,7 +95,7 @@ class Template implements ITemplateEngine {
* {{ for <$var> as $name }}...{{ endfor }} * {{ for <$var> as $name }}...{{ endfor }}
* {{ for <$var> as $key=>$name }}...{{ endfor }} * {{ for <$var> as $key=>$name }}...{{ endfor }}
*/ */
private function _replcb_for($args) { private function _replcb_for ($args) {
$m = array_map('trim', explode(" as ", $args[2])); $m = array_map('trim', explode(" as ", $args[2]));
$x = explode("=>", $m[1]); $x = explode("=>", $m[1]);
if (count($x) == 1) { if (count($x) == 1) {
@ -109,14 +109,16 @@ class Template implements ITemplateEngine {
//$vals = $this->r[$m[0]]; //$vals = $this->r[$m[0]];
$vals = $this->_get_var($m[0]); $vals = $this->_get_var($m[0]);
$ret = ""; $ret = "";
if (!is_array($vals)) if (!is_array($vals)) {
return $ret; return $ret;
}
foreach ($vals as $k => $v) { foreach ($vals as $k => $v) {
$this->_push_stack(); $this->_push_stack();
$r = $this->r; $r = $this->r;
$r[$varname] = $v; $r[$varname] = $v;
if ($keyname != '') if ($keyname != '') {
$r[$keyname] = (($k === 0) ? '0' : $k); $r[$keyname] = (($k === 0) ? '0' : $k);
}
$ret .= $this->replace($args[3], $r); $ret .= $this->replace($args[3], $r);
$this->_pop_stack(); $this->_pop_stack();
} }

View file

@ -2,13 +2,13 @@
use Friendica\App; use Friendica\App;
require_once("include/template_processor.php"); require_once "include/template_processor.php";
require_once("include/friendica_smarty.php"); require_once "include/friendica_smarty.php";
require_once("include/Smilies.php"); require_once "include/Smilies.php";
require_once("include/map.php"); require_once "include/map.php";
require_once("mod/proxy.php"); require_once "mod/proxy.php";
if(! function_exists('replace_macros')) { if (! function_exists('replace_macros')) {
/** /**
* This is our template processor * This is our template processor
* *
@ -17,7 +17,7 @@ if(! function_exists('replace_macros')) {
* @param array $r key value pairs (search => replace) * @param array $r key value pairs (search => replace)
* @return string substituted string * @return string substituted string
*/ */
function replace_macros($s,$r) { function replace_macros($s, $r) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
@ -26,12 +26,12 @@ function replace_macros($s,$r) {
// pass $baseurl to all templates // pass $baseurl to all templates
$r['$baseurl'] = App::get_baseurl(); $r['$baseurl'] = App::get_baseurl();
$t = $a->template_engine(); $t = $a->template_engine();
try { try {
$output = $t->replace_macros($s,$r); $output = $t->replace_macros($s, $r);
} catch (Exception $e) { } catch (Exception $e) {
echo "<pre><b>".__function__."</b>: ".$e->getMessage()."</pre>"; killme(); echo "<pre><b>" . __FUNCTION__ . "</b>: " . $e->getMessage() . "</pre>";
killme();
} }
$a->save_timestamp($stamp1, "rendering"); $a->save_timestamp($stamp1, "rendering");
@ -46,15 +46,15 @@ function replace_macros($s,$r) {
define('RANDOM_STRING_HEX', 0x00 ); define('RANDOM_STRING_HEX', 0x00 );
define('RANDOM_STRING_TEXT', 0x01 ); define('RANDOM_STRING_TEXT', 0x01 );
if(! function_exists('random_string')) { if (! function_exists('random_string')) {
function random_string($size = 64,$type = RANDOM_STRING_HEX) { function random_string($size = 64, $type = RANDOM_STRING_HEX) {
// generate a bit of entropy and run it through the whirlpool // generate a bit of entropy and run it through the whirlpool
$s = hash('whirlpool', (string) rand() . uniqid(rand(),true) . (string) rand(),(($type == RANDOM_STRING_TEXT) ? true : false)); $s = hash('whirlpool', (string) rand() . uniqid(rand(),true) . (string) rand(), (($type == RANDOM_STRING_TEXT) ? true : false));
$s = (($type == RANDOM_STRING_TEXT) ? str_replace("\n","",base64url_encode($s,true)) : $s); $s = (($type == RANDOM_STRING_TEXT) ? str_replace("\n", "", base64url_encode($s,true)) : $s);
return(substr($s,0,$size)); return(substr($s,0,$size));
}} }}
if(! function_exists('notags')) { if (! function_exists('notags')) {
/** /**
* This is our primary input filter. * This is our primary input filter.
* *
@ -73,8 +73,7 @@ if(! function_exists('notags')) {
* @return string Filtered string * @return string Filtered string
*/ */
function notags($string) { function notags($string) {
return str_replace(array("<", ">"), array('[', ']'), $string);
return(str_replace(array("<",">"), array('[',']'), $string));
// High-bit filter no longer used // High-bit filter no longer used
// return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string)); // return(str_replace(array("<",">","\xBA","\xBC","\xBE"), array('[',']','','',''), $string));
@ -82,7 +81,7 @@ function notags($string) {
if(! function_exists('escape_tags')) { if (! function_exists('escape_tags')) {
/** /**
* use this on "body" or "content" input where angle chars shouldn't be removed, * use this on "body" or "content" input where angle chars shouldn't be removed,
* and allow them to be safely displayed. * and allow them to be safely displayed.
@ -90,15 +89,14 @@ if(! function_exists('escape_tags')) {
* @return string * @return string
*/ */
function escape_tags($string) { function escape_tags($string) {
return htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false);
return(htmlspecialchars($string, ENT_COMPAT, 'UTF-8', false));
}} }}
// generate a string that's random, but usually pronounceable. // generate a string that's random, but usually pronounceable.
// used to generate initial passwords // used to generate initial passwords
if(! function_exists('autoname')) { if (! function_exists('autoname')) {
/** /**
* generate a string that's random, but usually pronounceable. * generate a string that's random, but usually pronounceable.
* used to generate initial passwords * used to generate initial passwords
@ -107,12 +105,14 @@ if(! function_exists('autoname')) {
*/ */
function autoname($len) { function autoname($len) {
if($len <= 0) if ($len <= 0) {
return ''; return '';
}
$vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u'); $vowels = array('a','a','ai','au','e','e','e','ee','ea','i','ie','o','ou','u');
if(mt_rand(0,5) == 4) if (mt_rand(0, 5) == 4) {
$vowels[] = 'y'; $vowels[] = 'y';
}
$cons = array( $cons = array(
'b','bl','br', 'b','bl','br',
@ -144,10 +144,11 @@ function autoname($len) {
'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh'); 'kh', 'kl','kr','mn','pl','pr','rh','tr','qu','wh');
$start = mt_rand(0,2); $start = mt_rand(0,2);
if($start == 0) if ($start == 0) {
$table = $vowels; $table = $vowels;
else } else {
$table = $cons; $table = $cons;
}
$word = ''; $word = '';
@ -155,23 +156,25 @@ function autoname($len) {
$r = mt_rand(0,count($table) - 1); $r = mt_rand(0,count($table) - 1);
$word .= $table[$r]; $word .= $table[$r];
if($table == $vowels) if ($table == $vowels) {
$table = array_merge($cons,$midcons); $table = array_merge($cons,$midcons);
else } else {
$table = $vowels; $table = $vowels;
}
} }
$word = substr($word,0,$len); $word = substr($word,0,$len);
foreach($noend as $noe) { foreach ($noend as $noe) {
if((strlen($word) > 2) && (substr($word,-2) == $noe)) { if ((strlen($word) > 2) && (substr($word, -2) == $noe)) {
$word = substr($word,0,-1); $word = substr($word, 0, -1);
break; break;
} }
} }
if(substr($word,-1) == 'q') if (substr($word, -1) == 'q') {
$word = substr($word,0,-1); $word = substr($word, 0, -1);
}
return $word; return $word;
}} }}
@ -179,17 +182,18 @@ function autoname($len) {
// escape text ($str) for XML transport // escape text ($str) for XML transport
// returns escaped text. // returns escaped text.
if(! function_exists('xmlify')) { if (! function_exists('xmlify')) {
/** /**
* escape text ($str) for XML transport * escape text ($str) for XML transport
* @param string $str * @param string $str
* @return string Escaped text. * @return string Escaped text.
*/ */
function xmlify($str) { function xmlify($str) {
/// @TODO deprecated code found?
/* $buffer = ''; /* $buffer = '';
$len = mb_strlen($str); $len = mb_strlen($str);
for($x = 0; $x < $len; $x ++) { for ($x = 0; $x < $len; $x ++) {
$char = mb_substr($str,$x,1); $char = mb_substr($str,$x,1);
switch( $char ) { switch( $char ) {
@ -232,13 +236,14 @@ function xmlify($str) {
return($buffer); return($buffer);
}} }}
if(! function_exists('unxmlify')) { if (! function_exists('unxmlify')) {
/** /**
* undo an xmlify * undo an xmlify
* @param string $s xml escaped text * @param string $s xml escaped text
* @return string unescaped text * @return string unescaped text
*/ */
function unxmlify($s) { function unxmlify($s) {
/// @TODO deprecated code found?
// $ret = str_replace('&amp;','&', $s); // $ret = str_replace('&amp;','&', $s);
// $ret = str_replace(array('&lt;','&gt;','&quot;','&apos;'),array('<','>','"',"'"),$ret); // $ret = str_replace(array('&lt;','&gt;','&quot;','&apos;'),array('<','>','"',"'"),$ret);
/*$ret = mb_ereg_replace('&amp;', '&', $s); /*$ret = mb_ereg_replace('&amp;', '&', $s);
@ -251,21 +256,22 @@ function unxmlify($s) {
return $ret; return $ret;
}} }}
if(! function_exists('hex2bin')) { if (! function_exists('hex2bin')) {
/** /**
* convenience wrapper, reverse the operation "bin2hex" * convenience wrapper, reverse the operation "bin2hex"
* @param string $s * @param string $s
* @return number * @return number
*/ */
function hex2bin($s) { function hex2bin($s) {
if(! (is_string($s) && strlen($s))) if (! (is_string($s) && strlen($s))) {
return ''; return '';
if(! ctype_xdigit($s)) {
return($s);
} }
return(pack("H*",$s)); if (! ctype_xdigit($s)) {
return $s;
}
return pack("H*",$s);
}} }}
@ -354,7 +360,7 @@ function paginate_data(App $a, $count = null) {
return $data; return $data;
} }
if(! function_exists('paginate')) { if (! function_exists('paginate')) {
/** /**
* Automatic pagination. * Automatic pagination.
* *
@ -378,7 +384,7 @@ function paginate(App $a) {
}} }}
if(! function_exists('alt_pager')) { if (! function_exists('alt_pager')) {
/** /**
* Alternative pager * Alternative pager
* @param App $a App instance * @param App $a App instance
@ -393,7 +399,7 @@ function alt_pager(App $a, $i) {
}} }}
if(! function_exists('scroll_loader')) { if (! function_exists('scroll_loader')) {
/** /**
* Loader for infinite scrolling * Loader for infinite scrolling
* @return string html for loader * @return string html for loader
@ -406,7 +412,7 @@ function scroll_loader() {
)); ));
}} }}
if(! function_exists('expand_acl')) { if (! function_exists('expand_acl')) {
/** /**
* Turn user/group ACLs stored as angle bracketed text into arrays * Turn user/group ACLs stored as angle bracketed text into arrays
* *
@ -418,31 +424,33 @@ function expand_acl($s) {
// e.g. "<1><2><3>" => array(1,2,3); // e.g. "<1><2><3>" => array(1,2,3);
$ret = array(); $ret = array();
if(strlen($s)) { if (strlen($s)) {
$t = str_replace('<','',$s); $t = str_replace('<', '', $s);
$a = explode('>',$t); $a = explode('>', $t);
foreach($a as $aa) { foreach ($a as $aa) {
if(intval($aa)) if (intval($aa)) {
$ret[] = intval($aa); $ret[] = intval($aa);
}
} }
} }
return $ret; return $ret;
}} }}
if(! function_exists('sanitise_acl')) { if (! function_exists('sanitise_acl')) {
/** /**
* Wrap ACL elements in angle brackets for storage * Wrap ACL elements in angle brackets for storage
* @param string $item * @param string $item
*/ */
function sanitise_acl(&$item) { function sanitise_acl(&$item) {
if(intval($item)) if (intval($item)) {
$item = '<' . intval(notags(trim($item))) . '>'; $item = '<' . intval(notags(trim($item))) . '>';
else } else {
unset($item); unset($item);
}
}} }}
if(! function_exists('perms2str')) { if (! function_exists('perms2str')) {
/** /**
* Convert an ACL array to a storable string * Convert an ACL array to a storable string
* *
@ -454,20 +462,21 @@ if(! function_exists('perms2str')) {
*/ */
function perms2str($p) { function perms2str($p) {
$ret = ''; $ret = '';
if(is_array($p)) if (is_array($p)) {
$tmp = $p; $tmp = $p;
else } else {
$tmp = explode(',',$p); $tmp = explode(',',$p);
}
if(is_array($tmp)) { if (is_array($tmp)) {
array_walk($tmp,'sanitise_acl'); array_walk($tmp, 'sanitise_acl');
$ret = implode('',$tmp); $ret = implode('', $tmp);
} }
return $ret; return $ret;
}} }}
if(! function_exists('item_new_uri')) { if (! function_exists('item_new_uri')) {
/** /**
* generate a guaranteed unique (for this domain) item ID for ATOM * generate a guaranteed unique (for this domain) item ID for ATOM
* safe from birthday paradox * safe from birthday paradox
@ -476,14 +485,14 @@ if(! function_exists('item_new_uri')) {
* @param int $uid * @param int $uid
* @return string * @return string
*/ */
function item_new_uri($hostname,$uid, $guid = "") { function item_new_uri($hostname, $uid, $guid = "") {
do { do {
$dups = false; $dups = false;
if ($guid == "") if ($guid == "") {
$hash = get_guid(32); $hash = get_guid(32);
else { } else {
$hash = $guid; $hash = $guid;
$guid = ""; $guid = "";
} }
@ -492,16 +501,18 @@ function item_new_uri($hostname,$uid, $guid = "") {
$r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1",
dbesc($uri)); dbesc($uri));
if (dbm::is_result($r)) if (dbm::is_result($r)) {
$dups = true; $dups = true;
} while($dups == true); }
} while ($dups == true);
return $uri; return $uri;
}} }}
// Generate a guaranteed unique photo ID. // Generate a guaranteed unique photo ID.
// safe from birthday paradox // safe from birthday paradox
if(! function_exists('photo_new_resource')) { if (! function_exists('photo_new_resource')) {
/** /**
* Generate a guaranteed unique photo ID. * Generate a guaranteed unique photo ID.
* safe from birthday paradox * safe from birthday paradox
@ -516,14 +527,17 @@ function photo_new_resource() {
$r = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1", $r = q("SELECT `id` FROM `photo` WHERE `resource-id` = '%s' LIMIT 1",
dbesc($resource) dbesc($resource)
); );
if (dbm::is_result($r))
if (dbm::is_result($r)) {
$found = true; $found = true;
} while($found == true); }
} while ($found == true);
return $resource; return $resource;
}} }}
if(! function_exists('load_view_file')) { if (! function_exists('load_view_file')) {
/** /**
* @deprecated * @deprecated
* wrapper to load a view template, checking for alternate * wrapper to load a view template, checking for alternate
@ -536,11 +550,12 @@ if(! function_exists('load_view_file')) {
*/ */
function load_view_file($s) { function load_view_file($s) {
global $lang, $a; global $lang, $a;
if(! isset($lang)) if (! isset($lang)) {
$lang = 'en'; $lang = 'en';
}
$b = basename($s); $b = basename($s);
$d = dirname($s); $d = dirname($s);
if(file_exists("$d/$lang/$b")) { if (file_exists("$d/$lang/$b")) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
$content = file_get_contents("$d/$lang/$b"); $content = file_get_contents("$d/$lang/$b");
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
@ -549,7 +564,7 @@ function load_view_file($s) {
$theme = current_theme(); $theme = current_theme();
if(file_exists("$d/theme/$theme/$b")) { if (file_exists("$d/theme/$theme/$b")) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
$content = file_get_contents("$d/theme/$theme/$b"); $content = file_get_contents("$d/theme/$theme/$b");
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
@ -562,7 +577,7 @@ function load_view_file($s) {
return $content; return $content;
}} }}
if(! function_exists('get_intltext_template')) { if (! function_exists('get_intltext_template')) {
/** /**
* load a view template, checking for alternate * load a view template, checking for alternate
* languages before falling back to the default * languages before falling back to the default
@ -576,18 +591,20 @@ function get_intltext_template($s) {
$a = get_app(); $a = get_app();
$engine = ''; $engine = '';
if($a->theme['template_engine'] === 'smarty3') if ($a->theme['template_engine'] === 'smarty3') {
$engine = "/smarty3"; $engine = "/smarty3";
}
if(! isset($lang)) if (! isset($lang)) {
$lang = 'en'; $lang = 'en';
}
if(file_exists("view/lang/$lang$engine/$s")) { if (file_exists("view/lang/$lang$engine/$s")) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
$content = file_get_contents("view/lang/$lang$engine/$s"); $content = file_get_contents("view/lang/$lang$engine/$s");
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
return $content; return $content;
} elseif(file_exists("view/lang/en$engine/$s")) { } elseif (file_exists("view/lang/en$engine/$s")) {
$stamp1 = microtime(true); $stamp1 = microtime(true);
$content = file_get_contents("view/lang/en$engine/$s"); $content = file_get_contents("view/lang/en$engine/$s");
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
@ -600,7 +617,7 @@ function get_intltext_template($s) {
} }
}} }}
if(! function_exists('get_markup_template')) { if (! function_exists('get_markup_template')) {
/** /**
* load template $s * load template $s
* *
@ -616,7 +633,8 @@ function get_markup_template($s, $root = '') {
try { try {
$template = $t->get_template_file($s, $root); $template = $t->get_template_file($s, $root);
} catch (Exception $e) { } catch (Exception $e) {
echo "<pre><b>".__function__."</b>: ".$e->getMessage()."</pre>"; killme(); echo "<pre><b>" . __FUNCTION__ . "</b>: " . $e->getMessage() . "</pre>";
killme();
} }
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
@ -624,7 +642,7 @@ function get_markup_template($s, $root = '') {
return $template; return $template;
}} }}
if(! function_exists("get_template_file")) { if (! function_exists("get_template_file")) {
/** /**
* *
* @param App $a * @param App $a
@ -636,28 +654,25 @@ function get_template_file($a, $filename, $root = '') {
$theme = current_theme(); $theme = current_theme();
// Make sure $root ends with a slash / // Make sure $root ends with a slash /
if($root !== '' && $root[strlen($root)-1] !== '/') if ($root !== '' && substr($root, -1, 1) !== '/') {
$root = $root . '/'; $root = $root . '/';
}
if(file_exists("{$root}view/theme/$theme/$filename")) if (file_exists("{$root}view/theme/$theme/$filename")) {
$template_file = "{$root}view/theme/$theme/$filename"; $template_file = "{$root}view/theme/$theme/$filename";
elseif (x($a->theme_info,"extends") && file_exists("{$root}view/theme/{$a->theme_info["extends"]}/$filename")) } elseif (x($a->theme_info, "extends") && file_exists(sprintf('%sview/theme/%s}/%s', $root, $a->theme_info["extends"], $filename))) {
$template_file = "{$root}view/theme/{$a->theme_info["extends"]}/$filename"; $template_file = sprintf('%sview/theme/%s}/%s', $root, $a->theme_info["extends"], $filename);
elseif (file_exists("{$root}/$filename")) } elseif (file_exists("{$root}/$filename")) {
$template_file = "{$root}/$filename"; $template_file = "{$root}/$filename";
else } else {
$template_file = "{$root}view/$filename"; $template_file = "{$root}view/$filename";
}
return $template_file; return $template_file;
}} }}
if (! function_exists('attribute_contains')) {
if(! function_exists('attribute_contains')) {
/** /**
* for html,xml parsing - let's say you've got * for html,xml parsing - let's say you've got
* an attribute foobar="class1 class2 class3" * an attribute foobar="class1 class2 class3"
@ -672,11 +687,9 @@ if(! function_exists('attribute_contains')) {
* @param string $s string to search * @param string $s string to search
* @return boolean True if found, False otherwise * @return boolean True if found, False otherwise
*/ */
function attribute_contains($attr,$s) { function attribute_contains($attr, $s) {
$a = explode(' ', $attr); $a = explode(' ', $attr);
if(count($a) && in_array($s,$a)) return (count($a) && in_array($s,$a));
return true;
return false;
}} }}
if (! function_exists('logger')) { if (! function_exists('logger')) {
@ -821,7 +834,7 @@ function dlogger($msg, $level = 0) {
$a->save_timestamp($stamp1, "file"); $a->save_timestamp($stamp1, "file");
} }
if(! function_exists('activity_match')) { if (! function_exists('activity_match')) {
/** /**
* Compare activity uri. Knows about activity namespace. * Compare activity uri. Knows about activity namespace.
* *
@ -830,9 +843,7 @@ if(! function_exists('activity_match')) {
* @return boolean * @return boolean
*/ */
function activity_match($haystack,$needle) { function activity_match($haystack,$needle) {
if(($haystack === $needle) || ((basename($needle) === $haystack) && strstr($needle,NAMESPACE_ACTIVITY_SCHEMA))) return (($haystack === $needle) || ((basename($needle) === $haystack) && strstr($needle, NAMESPACE_ACTIVITY_SCHEMA)));
return true;
return false;
}} }}
@ -884,7 +895,7 @@ function get_tags($string) {
// and #hash tags. // and #hash tags.
if (preg_match_all('/([!#@][^\^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/', $string, $matches)) { if (preg_match_all('/([!#@][^\^ \x0D\x0A,;:?]+)([ \x0D\x0A,;:?]|$)/', $string, $matches)) {
foreach($matches[1] as $match) { foreach ($matches[1] as $match) {
if (strstr($match, ']')) { if (strstr($match, ']')) {
// we might be inside a bbcode color tag - leave it alone // we might be inside a bbcode color tag - leave it alone
continue; continue;
@ -909,7 +920,7 @@ function get_tags($string) {
// //
if(! function_exists('qp')) { if (! function_exists('qp')) {
/** /**
* quick and dirty quoted_printable encoding * quick and dirty quoted_printable encoding
* *
@ -917,10 +928,10 @@ if(! function_exists('qp')) {
* @return string * @return string
*/ */
function qp($s) { function qp($s) {
return str_replace ("%","=",rawurlencode($s)); return str_replace("%", "=", rawurlencode($s));
}} }}
if(! function_exists('contact_block')) { if (! function_exists('contact_block')) {
/** /**
* Get html for contact block. * Get html for contact block.
* *
@ -933,13 +944,16 @@ function contact_block() {
$a = get_app(); $a = get_app();
$shown = get_pconfig($a->profile['uid'],'system','display_friend_count'); $shown = get_pconfig($a->profile['uid'],'system','display_friend_count');
if($shown === false) if ($shown === false) {
$shown = 24; $shown = 24;
if($shown == 0) }
if ($shown == 0) {
return; return;
}
if((! is_array($a->profile)) || ($a->profile['hide-friends'])) if ((! is_array($a->profile)) || ($a->profile['hide-friends'])) {
return $o; return $o;
}
$r = q("SELECT COUNT(*) AS `total` FROM `contact` $r = q("SELECT COUNT(*) AS `total` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `blocked` WHERE `uid` = %d AND NOT `self` AND NOT `blocked`
AND NOT `pending` AND NOT `hidden` AND NOT `archive` AND NOT `pending` AND NOT `hidden` AND NOT `archive`
@ -952,10 +966,9 @@ function contact_block() {
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
$total = intval($r[0]['total']); $total = intval($r[0]['total']);
} }
if(! $total) { if (! $total) {
$contacts = t('No contacts'); $contacts = t('No contacts');
$micropro = Null; $micropro = null;
} else { } else {
// Splitting the query in two parts makes it much faster // Splitting the query in two parts makes it much faster
$r = q("SELECT `id` FROM `contact` $r = q("SELECT `id` FROM `contact`
@ -1024,28 +1037,30 @@ function contact_block() {
function micropro($contact, $redirect = false, $class = '', $textmode = false) { function micropro($contact, $redirect = false, $class = '', $textmode = false) {
// Use the contact URL if no address is available // Use the contact URL if no address is available
if ($contact["addr"] == "") if ($contact["addr"] == "") {
$contact["addr"] = $contact["url"]; $contact["addr"] = $contact["url"];
}
$url = $contact['url']; $url = $contact['url'];
$sparkle = ''; $sparkle = '';
$redir = false; $redir = false;
if($redirect) { if ($redirect) {
$a = get_app(); $a = get_app();
$redirect_url = 'redir/' . $contact['id']; $redirect_url = 'redir/' . $contact['id'];
if(local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === NETWORK_DFRN)) { if (local_user() && ($contact['uid'] == local_user()) && ($contact['network'] === NETWORK_DFRN)) {
$redir = true; $redir = true;
$url = $redirect_url; $url = $redirect_url;
$sparkle = ' sparkle'; $sparkle = ' sparkle';
} } else {
else
$url = zrl($url); $url = zrl($url);
}
} }
// If there is some js available we don't need the url // If there is some js available we don't need the url
if(x($contact,'click')) if (x($contact, 'click')) {
$url = ''; $url = '';
}
return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array( return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array(
'$click' => (($contact['click']) ? $contact['click'] : ''), '$click' => (($contact['click']) ? $contact['click'] : ''),
@ -1062,7 +1077,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
if(! function_exists('search')) { if (! function_exists('search')) {
/** /**
* search box * search box
* *
@ -1071,7 +1086,7 @@ if(! function_exists('search')) {
* @param string $url search url * @param string $url search url
* @param boolean $savedsearch show save search button * @param boolean $savedsearch show save search button
*/ */
function search($s,$id='search-box',$url='search',$save = false, $aside = true) { function search($s, $id = 'search-box', $url = 'search', $save = false, $aside = true) {
$a = get_app(); $a = get_app();
$values = array( $values = array(
@ -1090,14 +1105,15 @@ function search($s,$id='search-box',$url='search',$save = false, $aside = true)
t("Tags"), t("Tags"),
t("Contacts")); t("Contacts"));
if (get_config('system','poco_local_search')) if (get_config('system','poco_local_search')) {
$values['$searchoption'][] = t("Forums"); $values['$searchoption'][] = t("Forums");
}
} }
return replace_macros(get_markup_template('searchbox.tpl'), $values); return replace_macros(get_markup_template('searchbox.tpl'), $values);
}} }}
if(! function_exists('valid_email')) { if (! function_exists('valid_email')) {
/** /**
* Check if $x is a valid email string * Check if $x is a valid email string
* *
@ -1106,17 +1122,14 @@ if(! function_exists('valid_email')) {
*/ */
function valid_email($x){ function valid_email($x){
// Removed because Fabio told me so. /// @TODO Removed because Fabio told me so.
//if(get_config('system','disable_email_validation')) //if (get_config('system','disable_email_validation'))
// return true; // return true;
return preg_match('/^[_a-zA-Z0-9\-\+]+(\.[_a-zA-Z0-9\-\+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/', $x);
if(preg_match('/^[_a-zA-Z0-9\-\+]+(\.[_a-zA-Z0-9\-\+]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/',$x))
return true;
return false;
}} }}
if(! function_exists('linkify')) { if (! function_exists('linkify')) {
/** /**
* Replace naked text hyperlink with HTML formatted hyperlink * Replace naked text hyperlink with HTML formatted hyperlink
* *
@ -1125,7 +1138,7 @@ if(! function_exists('linkify')) {
function linkify($s) { function linkify($s) {
$s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="_blank">$1</a>', $s); $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="_blank">$1</a>', $s);
$s = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$s); $s = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism",'<$1$2=$3&$4>',$s);
return($s); return $s;
}} }}
@ -1187,7 +1200,7 @@ function get_mood_verbs() {
return $arr; return $arr;
} }
if(! function_exists('day_translate')) { if (! function_exists('day_translate')) {
/** /**
* Translate days and months names * Translate days and months names
* *
@ -1207,7 +1220,7 @@ function day_translate($s) {
}} }}
if(! function_exists('normalise_link')) { if (! function_exists('normalise_link')) {
/** /**
* Normalize url * Normalize url
* *
@ -1215,13 +1228,13 @@ if(! function_exists('normalise_link')) {
* @return string * @return string
*/ */
function normalise_link($url) { function normalise_link($url) {
$ret = str_replace(array('https:','//www.'), array('http:','//'), $url); $ret = str_replace(array('https:', '//www.'), array('http:', '//'), $url);
return(rtrim($ret,'/')); return rtrim($ret,'/');
}} }}
if(! function_exists('link_compare')) { if (! function_exists('link_compare')) {
/** /**
* Compare two URLs to see if they are the same, but ignore * Compare two URLs to see if they are the same, but ignore
* slight but hopefully insignificant differences such as if one * slight but hopefully insignificant differences such as if one
@ -1233,10 +1246,8 @@ if(! function_exists('link_compare')) {
* @return boolean True if the URLs match, otherwise False * @return boolean True if the URLs match, otherwise False
* *
*/ */
function link_compare($a,$b) { function link_compare($a, $b) {
if(strcasecmp(normalise_link($a),normalise_link($b)) === 0) return (strcasecmp(normalise_link($a), normalise_link($b)) === 0);
return true;
return false;
}} }}
/** /**
@ -1289,7 +1300,7 @@ function put_item_in_cache(&$item, $update = false) {
// Given an item array, convert the body element from bbcode to html and add smilie icons. // Given an item array, convert the body element from bbcode to html and add smilie icons.
// If attach is true, also add icons for item attachments // If attach is true, also add icons for item attachments
if(! function_exists('prepare_body')) { if (! function_exists('prepare_body')) {
/** /**
* Given an item array, convert the body element from bbcode to html and add smilie icons. * Given an item array, convert the body element from bbcode to html and add smilie icons.
* If attach is true, also add icons for item attachments * If attach is true, also add icons for item attachments
@ -1301,14 +1312,14 @@ if(! function_exists('prepare_body')) {
* @hook prepare_body ('item'=>item array, 'html'=>body string) after first bbcode to html * @hook prepare_body ('item'=>item array, 'html'=>body string) after first bbcode to html
* @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author) * @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author)
*/ */
function prepare_body(&$item,$attach = false, $preview = false) { function prepare_body(&$item, $attach = false, $preview = false) {
$a = get_app(); $a = get_app();
call_hooks('prepare_body_init', $item); call_hooks('prepare_body_init', $item);
$searchpath = z_root()."/search?tag="; $searchpath = z_root() . "/search?tag=";
$tags=array(); $tags = array();
$hashtags = array(); $hashtags = array();
$mentions = array(); $mentions = array();
@ -1316,10 +1327,11 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`", $taglist = q("SELECT `type`, `term`, `url` FROM `term` WHERE `otype` = %d AND `oid` = %d AND `type` IN (%d, %d) ORDER BY `tid`",
intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION)); intval(TERM_OBJ_POST), intval($item['id']), intval(TERM_HASHTAG), intval(TERM_MENTION));
foreach($taglist as $tag) { foreach ($taglist as $tag) {
if ($tag["url"] == "") if ($tag["url"] == "") {
$tag["url"] = $searchpath.strtolower($tag["term"]); $tag["url"] = $searchpath.strtolower($tag["term"]);
}
if ($tag["type"] == TERM_HASHTAG) { if ($tag["type"] == TERM_HASHTAG) {
$hashtags[] = "#<a href=\"".$tag["url"]."\" target=\"_blank\">".$tag["term"]."</a>"; $hashtags[] = "#<a href=\"".$tag["url"]."\" target=\"_blank\">".$tag["term"]."</a>";
@ -1340,8 +1352,9 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$update = (!local_user() and !remote_user() and ($item["uid"] == 0)); $update = (!local_user() and !remote_user() and ($item["uid"] == 0));
// Or update it if the current viewer is the intented viewer // Or update it if the current viewer is the intented viewer
if (($item["uid"] == local_user()) && ($item["uid"] != 0)) if (($item["uid"] == local_user()) && ($item["uid"] != 0)) {
$update = true; $update = true;
}
put_item_in_cache($item, $update); put_item_in_cache($item, $update);
$s = $item["rendered-html"]; $s = $item["rendered-html"];
@ -1350,7 +1363,7 @@ function prepare_body(&$item,$attach = false, $preview = false) {
call_hooks('prepare_body', $prep_arr); call_hooks('prepare_body', $prep_arr);
$s = $prep_arr['html']; $s = $prep_arr['html'];
if(! $attach) { if (! $attach) {
// Replace the blockquotes with quotes that are used in mails // Replace the blockquotes with quotes that are used in mails
$mailquote = '<blockquote type="cite" class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">'; $mailquote = '<blockquote type="cite" class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">';
$s = str_replace(array('<blockquote>', '<blockquote class="spoiler">', '<blockquote class="author">'), array($mailquote, $mailquote, $mailquote), $s); $s = str_replace(array('<blockquote>', '<blockquote class="spoiler">', '<blockquote class="author">'), array($mailquote, $mailquote, $mailquote), $s);
@ -1359,24 +1372,25 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$as = ''; $as = '';
$vhead = false; $vhead = false;
$arr = explode('[/attach],',$item['attach']); $arr = explode('[/attach],', $item['attach']);
if(count($arr)) { if (count($arr)) {
$as .= '<div class="body-attach">'; $as .= '<div class="body-attach">';
foreach($arr as $r) { foreach ($arr as $r) {
$matches = false; $matches = false;
$icon = ''; $icon = '';
$cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches, PREG_SET_ORDER); $cnt = preg_match_all('|\[attach\]href=\"(.*?)\" length=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"|',$r,$matches, PREG_SET_ORDER);
if($cnt) { if ($cnt) {
foreach($matches as $mtch) { foreach ($matches as $mtch) {
$mime = $mtch[3]; $mime = $mtch[3];
if((local_user() == $item['uid']) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN)) if ((local_user() == $item['uid']) && ($item['contact-id'] != $a->contact['id']) && ($item['network'] == NETWORK_DFRN)) {
$the_url = 'redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1]; $the_url = 'redir/' . $item['contact-id'] . '?f=1&url=' . $mtch[1];
else } else {
$the_url = $mtch[1]; $the_url = $mtch[1];
}
if(strpos($mime, 'video') !== false) { if (strpos($mime, 'video') !== false) {
if(!$vhead) { if (!$vhead) {
$vhead = true; $vhead = true;
$a->page['htmlhead'] .= replace_macros(get_markup_template('videos_head.tpl'), array( $a->page['htmlhead'] .= replace_macros(get_markup_template('videos_head.tpl'), array(
'$baseurl' => z_root(), '$baseurl' => z_root(),
@ -1388,21 +1402,20 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$id = end(explode('/', $the_url)); $id = end(explode('/', $the_url));
$as .= replace_macros(get_markup_template('video_top.tpl'), array( $as .= replace_macros(get_markup_template('video_top.tpl'), array(
'$video' => array( '$video' => array(
'id' => $id, 'id' => $id,
'title' => t('View Video'), 'title' => t('View Video'),
'src' => $the_url, 'src' => $the_url,
'mime' => $mime, 'mime' => $mime,
), ),
)); ));
} }
$filetype = strtolower(substr( $mime, 0, strpos($mime,'/') )); $filetype = strtolower(substr( $mime, 0, strpos($mime,'/') ));
if($filetype) { if ($filetype) {
$filesubtype = strtolower(substr( $mime, strpos($mime,'/') + 1 )); $filesubtype = strtolower(substr( $mime, strpos($mime,'/') + 1 ));
$filesubtype = str_replace('.', '-', $filesubtype); $filesubtype = str_replace('.', '-', $filesubtype);
} } else {
else {
$filetype = 'unkn'; $filetype = 'unkn';
$filesubtype = 'unkn'; $filesubtype = 'unkn';
} }
@ -1433,7 +1446,7 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$s = $s . $as; $s = $s . $as;
// map // map
if(strpos($s,'<div class="map">') !== false && $item['coord']) { if (strpos($s, '<div class="map">') !== false && x($item, 'coord')) {
$x = generate_map(trim($item['coord'])); $x = generate_map(trim($item['coord']));
if ($x) { if ($x) {
$s = preg_replace('/\<div class\=\"map\"\>/','$0' . $x,$s); $s = preg_replace('/\<div class\=\"map\"\>/','$0' . $x,$s);
@ -1445,37 +1458,36 @@ function prepare_body(&$item,$attach = false, $preview = false) {
$spoilersearch = '<blockquote class="spoiler">'; $spoilersearch = '<blockquote class="spoiler">';
// Remove line breaks before the spoiler // Remove line breaks before the spoiler
while ((strpos($s, "\n".$spoilersearch) !== false)) while ((strpos($s, "\n" . $spoilersearch) !== false)) {
$s = str_replace("\n".$spoilersearch, $spoilersearch, $s); $s = str_replace("\n" . $spoilersearch, $spoilersearch, $s);
while ((strpos($s, "<br />".$spoilersearch) !== false)) }
$s = str_replace("<br />".$spoilersearch, $spoilersearch, $s); while ((strpos($s, "<br />" . $spoilersearch) !== false)) {
$s = str_replace("<br />" . $spoilersearch, $spoilersearch, $s);
}
while ((strpos($s, $spoilersearch) !== false)) { while ((strpos($s, $spoilersearch) !== false)) {
$pos = strpos($s, $spoilersearch); $pos = strpos($s, $spoilersearch);
$rnd = random_string(8); $rnd = random_string(8);
$spoilerreplace = '<br /> <span id="spoiler-wrap-'.$rnd.'" class="spoiler-wrap fakelink" onclick="openClose(\'spoiler-'.$rnd.'\');">'.sprintf(t('Click to open/close')).'</span>'. $spoilerreplace = '<br /> <span id="spoiler-wrap-' . $rnd . '" class="spoiler-wrap fakelink" onclick="openClose(\'spoiler-' . $rnd . '\');">' . sprintf(t('Click to open/close')) . '</span>'.
'<blockquote class="spoiler" id="spoiler-'.$rnd.'" style="display: none;">'; '<blockquote class="spoiler" id="spoiler-' . $rnd . '" style="display: none;">';
$s = substr($s, 0, $pos).$spoilerreplace.substr($s, $pos+strlen($spoilersearch)); $s = substr($s, 0, $pos) . $spoilerreplace . substr($s, $pos + strlen($spoilersearch));
} }
// Look for quote with author // Look for quote with author
$authorsearch = '<blockquote class="author">'; $authorsearch = '<blockquote class="author">';
while ((strpos($s, $authorsearch) !== false)) { while ((strpos($s, $authorsearch) !== false)) {
$pos = strpos($s, $authorsearch); $pos = strpos($s, $authorsearch);
$rnd = random_string(8); $rnd = random_string(8);
$authorreplace = '<br /> <span id="author-wrap-'.$rnd.'" class="author-wrap fakelink" onclick="openClose(\'author-'.$rnd.'\');">'.sprintf(t('Click to open/close')).'</span>'. $authorreplace = '<br /> <span id="author-wrap-' . $rnd . '" class="author-wrap fakelink" onclick="openClose(\'author-' . $rnd . '\');">' . sprintf(t('Click to open/close')) . '</span>'.
'<blockquote class="author" id="author-'.$rnd.'" style="display: block;">'; '<blockquote class="author" id="author-' . $rnd . '" style="display: block;">';
$s = substr($s, 0, $pos).$authorreplace.substr($s, $pos+strlen($authorsearch)); $s = substr($s, 0, $pos) . $authorreplace . substr($s, $pos + strlen($authorsearch));
} }
// replace friendica image url size with theme preference // replace friendica image url size with theme preference
if (x($a->theme_info,'item_image_size')){ if (x($a->theme_info, 'item_image_size')){
$ps = $a->theme_info['item_image_size']; $ps = $a->theme_info['item_image_size'];
$s = preg_replace('|(<img[^>]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|', "$1-" . $ps, $s);
$s = preg_replace('|(<img[^>]+src="[^"]+/photo/[0-9a-f]+)-[0-9]|',"$1-".$ps, $s);
} }
$prep_arr = array('item' => $item, 'html' => $s); $prep_arr = array('item' => $item, 'html' => $s);
@ -1485,7 +1497,7 @@ function prepare_body(&$item,$attach = false, $preview = false) {
}} }}
if(! function_exists('prepare_text')) { if (! function_exists('prepare_text')) {
/** /**
* Given a text string, convert from bbcode to html and add smilie icons. * Given a text string, convert from bbcode to html and add smilie icons.
* *
@ -1494,12 +1506,13 @@ if(! function_exists('prepare_text')) {
*/ */
function prepare_text($text) { function prepare_text($text) {
require_once('include/bbcode.php'); require_once 'include/bbcode.php';
if(stristr($text,'[nosmile]')) if (stristr($text, '[nosmile]')) {
$s = bbcode($text); $s = bbcode($text);
else } else {
$s = Smilies::replace(bbcode($text)); $s = Smilies::replace(bbcode($text));
}
return trim($s); return trim($s);
}} }}
@ -1539,10 +1552,11 @@ function get_cats_and_terms($item) {
$categories = array(); $categories = array();
$folders = array(); $folders = array();
$matches = false; $first = true; $matches = false;
$cnt = preg_match_all('/<(.*?)>/',$item['file'],$matches,PREG_SET_ORDER); $first = true;
if($cnt) { $cnt = preg_match_all('/<(.*?)>/', $item['file'], $matches, PREG_SET_ORDER);
foreach($matches as $mtch) { if ($cnt) {
foreach ($matches as $mtch) {
$categories[] = array( $categories[] = array(
'name' => xmlify(file_tag_decode($mtch[1])), 'name' => xmlify(file_tag_decode($mtch[1])),
'url' => "#", 'url' => "#",
@ -1553,18 +1567,21 @@ function get_cats_and_terms($item) {
$first = false; $first = false;
} }
} }
if (count($categories)) $categories[count($categories)-1]['last'] = true;
if (count($categories)) {
$categories[count($categories) - 1]['last'] = true;
}
if(local_user() == $item['uid']) { if (local_user() == $item['uid']) {
$matches = false; $first = true; $matches = false;
$cnt = preg_match_all('/\[(.*?)\]/',$item['file'],$matches,PREG_SET_ORDER); $first = true;
if($cnt) { $cnt = preg_match_all('/\[(.*?)\]/', $item['file'], $matches, PREG_SET_ORDER);
foreach($matches as $mtch) { if ($cnt) {
foreach ($matches as $mtch) {
$folders[] = array( $folders[] = array(
'name' => xmlify(file_tag_decode($mtch[1])), 'name' => xmlify(file_tag_decode($mtch[1])),
'url' => "#", 'url' => "#",
'removeurl' => ((local_user() == $item['uid'])?'filerm/' . $item['id'] . '?f=&term=' . xmlify(file_tag_decode($mtch[1])):""), 'removeurl' => ((local_user() == $item['uid']) ? 'filerm/' . $item['id'] . '?f=&term=' . xmlify(file_tag_decode($mtch[1])) : ""),
'first' => $first, 'first' => $first,
'last' => false 'last' => false
); );
@ -1573,12 +1590,14 @@ function get_cats_and_terms($item) {
} }
} }
if (count($folders)) $folders[count($folders)-1]['last'] = true; if (count($folders)) {
$folders[count($folders) - 1]['last'] = true;
}
return array($categories, $folders); return array($categories, $folders);
} }
if(! function_exists('get_plink')) { if (! function_exists('get_plink')) {
/** /**
* get private link for item * get private link for item
* @param array $item * @param array $item
@ -1589,33 +1608,32 @@ function get_plink($item) {
if ($a->user['nickname'] != "") { if ($a->user['nickname'] != "") {
$ret = array( $ret = array(
//'href' => "display/".$a->user['nickname']."/".$item['id'], //'href' => "display/" . $a->user['nickname'] . "/" . $item['id'],
'href' => "display/".$item['guid'], 'href' => "display/" . $item['guid'],
'orig' => "display/".$item['guid'], 'orig' => "display/" . $item['guid'],
'title' => t('View on separate page'), 'title' => t('View on separate page'),
'orig_title' => t('view on separate page'), 'orig_title' => t('view on separate page'),
); );
if (x($item,'plink')) { if (x($item, 'plink')) {
$ret["href"] = $a->remove_baseurl($item['plink']); $ret["href"] = $a->remove_baseurl($item['plink']);
$ret["title"] = t('link to source'); $ret["title"] = t('link to source');
} }
} elseif (x($item,'plink') && ($item['private'] != 1)) } elseif (x($item, 'plink') && ($item['private'] != 1)) {
$ret = array( $ret = array(
'href' => $item['plink'], 'href' => $item['plink'],
'orig' => $item['plink'], 'orig' => $item['plink'],
'title' => t('link to source'), 'title' => t('link to source'),
); );
else } else {
$ret = array(); $ret = array();
}
//if (x($item,'plink') && ($item['private'] != 1)) return $ret;
return($ret);
}} }}
if(! function_exists('unamp')) { if (! function_exists('unamp')) {
/** /**
* replace html amp entity with amp char * replace html amp entity with amp char
* @param string $s * @param string $s
@ -1626,7 +1644,7 @@ function unamp($s) {
}} }}
if(! function_exists('return_bytes')) { if (! function_exists('return_bytes')) {
/** /**
* return number of bytes in size (K, M, G) * return number of bytes in size (K, M, G)
* @param string $size_str * @param string $size_str
@ -1651,9 +1669,11 @@ function generate_user_guid() {
$x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1", $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1",
dbesc($guid) dbesc($guid)
); );
if(! count($x)) if (! dbm::is_result($x)) {
$found = false; $found = false;
}
} while ($found == true ); } while ($found == true );
return $guid; return $guid;
} }
@ -1665,10 +1685,11 @@ function generate_user_guid() {
*/ */
function base64url_encode($s, $strip_padding = false) { function base64url_encode($s, $strip_padding = false) {
$s = strtr(base64_encode($s),'+/','-_'); $s = strtr(base64_encode($s), '+/', '-_');
if($strip_padding) if ($strip_padding) {
$s = str_replace('=','',$s); $s = str_replace('=','',$s);
}
return $s; return $s;
} }
@ -1679,7 +1700,7 @@ function base64url_encode($s, $strip_padding = false) {
*/ */
function base64url_decode($s) { function base64url_decode($s) {
if(is_array($s)) { if (is_array($s)) {
logger('base64url_decode: illegal input: ' . print_r(debug_backtrace(), true)); logger('base64url_decode: illegal input: ' . print_r(debug_backtrace(), true));
return $s; return $s;
} }
@ -1690,11 +1711,11 @@ function base64url_decode($s) {
* // Uncomment if you find you need it. * // Uncomment if you find you need it.
* *
* $l = strlen($s); * $l = strlen($s);
* if(! strpos($s,'=')) { * if (! strpos($s,'=')) {
* $m = $l % 4; * $m = $l % 4;
* if($m == 2) * if ($m == 2)
* $s .= '=='; * $s .= '==';
* if($m == 3) * if ($m == 3)
* $s .= '='; * $s .= '=';
* } * }
* *
@ -1786,10 +1807,10 @@ function bb_translate_video($s) {
$matches = null; $matches = null;
$r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER); $r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER);
if ($r) { if ($r) {
foreach($matches as $mtch) { foreach ($matches as $mtch) {
if((stristr($mtch[1],'youtube')) || (stristr($mtch[1],'youtu.be'))) if ((stristr($mtch[1],'youtube')) || (stristr($mtch[1],'youtu.be')))
$s = str_replace($mtch[0],'[youtube]' . $mtch[1] . '[/youtube]',$s); $s = str_replace($mtch[0],'[youtube]' . $mtch[1] . '[/youtube]',$s);
elseif(stristr($mtch[1],'vimeo')) elseif (stristr($mtch[1],'vimeo'))
$s = str_replace($mtch[0],'[vimeo]' . $mtch[1] . '[/vimeo]',$s); $s = str_replace($mtch[0],'[vimeo]' . $mtch[1] . '[/vimeo]',$s);
} }
} }
@ -1816,8 +1837,11 @@ function html2bb_video($s) {
* @return array * @return array
*/ */
function array_xmlify($val){ function array_xmlify($val){
if (is_bool($val)) return $val?"true":"false"; if (is_bool($val)) {
if (is_array($val)) return array_map('array_xmlify', $val); return $val?"true":"false";
} elseif (is_array($val)) {
return array_map('array_xmlify', $val);
}
return xmlify((string) $val); return xmlify((string) $val);
} }
@ -1830,8 +1854,9 @@ function array_xmlify($val){
* @return string * @return string
*/ */
function reltoabs($text, $base) { function reltoabs($text, $base) {
if (empty($base)) if (empty($base)) {
return $text; return $text;
}
$base = rtrim($base,'/'); $base = rtrim($base,'/');
@ -1867,14 +1892,16 @@ function reltoabs($text, $base) {
* @return string * @return string
*/ */
function item_post_type($item) { function item_post_type($item) {
if(intval($item['event-id'])) if (intval($item['event-id'])) {
return t('event'); return t('event');
if(strlen($item['resource-id'])) } elseif (strlen($item['resource-id'])) {
return t('photo'); return t('photo');
if(strlen($item['verb']) && $item['verb'] !== ACTIVITY_POST) } elseif (strlen($item['verb']) && $item['verb'] !== ACTIVITY_POST) {
return t('activity'); return t('activity');
if($item['id'] != $item['parent']) } elseif ($item['id'] != $item['parent']) {
return t('comment'); return t('comment');
}
return t('post'); return t('post');
} }
@ -1888,34 +1915,34 @@ function file_tag_encode($s) {
} }
function file_tag_decode($s) { function file_tag_decode($s) {
return str_replace(array('%3c','%3e','%5b','%5d'),array('<','>','[',']'),$s); return str_replace(array('%3c', '%3e', '%5b', '%5d'), array('<', '>', '[', ']'), $s);
} }
function file_tag_file_query($table,$s,$type = 'file') { function file_tag_file_query($table,$s,$type = 'file') {
if($type == 'file') if ($type == 'file') {
$str = preg_quote( '[' . str_replace('%','%%',file_tag_encode($s)) . ']' ); $str = preg_quote( '[' . str_replace('%', '%%', file_tag_encode($s)) . ']' );
else } else {
$str = preg_quote( '<' . str_replace('%','%%',file_tag_encode($s)) . '>' ); $str = preg_quote( '<' . str_replace('%', '%%', file_tag_encode($s)) . '>' );
}
return " AND " . (($table) ? dbesc($table) . '.' : '') . "file regexp '" . dbesc($str) . "' "; return " AND " . (($table) ? dbesc($table) . '.' : '') . "file regexp '" . dbesc($str) . "' ";
} }
// ex. given music,video return <music><video> or [music][video] // ex. given music,video return <music><video> or [music][video]
function file_tag_list_to_file($list,$type = 'file') { function file_tag_list_to_file($list,$type = 'file') {
$tag_list = ''; $tag_list = '';
if(strlen($list)) { if (strlen($list)) {
$list_array = explode(",",$list); $list_array = explode(",",$list);
if($type == 'file') { if ($type == 'file') {
$lbracket = '['; $lbracket = '[';
$rbracket = ']'; $rbracket = ']';
} } else {
else {
$lbracket = '<'; $lbracket = '<';
$rbracket = '>'; $rbracket = '>';
} }
foreach($list_array as $item) { foreach ($list_array as $item) {
if(strlen($item)) { if (strlen($item)) {
$tag_list .= $lbracket . file_tag_encode(trim($item)) . $rbracket; $tag_list .= $lbracket . file_tag_encode(trim($item)) . $rbracket;
} }
} }
@ -1927,16 +1954,16 @@ function file_tag_list_to_file($list,$type = 'file') {
function file_tag_file_to_list($file,$type = 'file') { function file_tag_file_to_list($file,$type = 'file') {
$matches = false; $matches = false;
$list = ''; $list = '';
if($type == 'file') { if ($type == 'file') {
$cnt = preg_match_all('/\[(.*?)\]/',$file,$matches,PREG_SET_ORDER); $cnt = preg_match_all('/\[(.*?)\]/', $file, $matches, PREG_SET_ORDER);
} else {
$cnt = preg_match_all('/<(.*?)>/', $file, $matches, PREG_SET_ORDER);
} }
else { if ($cnt) {
$cnt = preg_match_all('/<(.*?)>/',$file,$matches,PREG_SET_ORDER); foreach ($matches as $mtch) {
} if (strlen($list)) {
if($cnt) {
foreach($matches as $mtch) {
if(strlen($list))
$list .= ','; $list .= ',';
}
$list .= file_tag_decode($mtch[1]); $list .= file_tag_decode($mtch[1]);
} }
} }
@ -1944,19 +1971,19 @@ function file_tag_file_to_list($file,$type = 'file') {
return $list; return $list;
} }
function file_tag_update_pconfig($uid,$file_old,$file_new,$type = 'file') { function file_tag_update_pconfig($uid, $file_old, $file_new, $type = 'file') {
// $file_old - categories previously associated with an item // $file_old - categories previously associated with an item
// $file_new - new list of categories for an item // $file_new - new list of categories for an item
if(! intval($uid)) if (! intval($uid))
return false; return false;
if($file_old == $file_new) if ($file_old == $file_new)
return true; return true;
$saved = get_pconfig($uid,'system','filetags'); $saved = get_pconfig($uid,'system','filetags');
if(strlen($saved)) { if (strlen($saved)) {
if($type == 'file') { if ($type == 'file') {
$lbracket = '['; $lbracket = '[';
$rbracket = ']'; $rbracket = ']';
$termtype = TERM_FILE; $termtype = TERM_FILE;
@ -1973,8 +2000,8 @@ function file_tag_update_pconfig($uid,$file_old,$file_new,$type = 'file') {
$new_tags = array(); $new_tags = array();
$check_new_tags = explode(",",file_tag_file_to_list($file_new,$type)); $check_new_tags = explode(",",file_tag_file_to_list($file_new,$type));
foreach($check_new_tags as $tag) { foreach ($check_new_tags as $tag) {
if(! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket)) if (! stristr($saved,$lbracket . file_tag_encode($tag) . $rbracket))
$new_tags[] = $tag; $new_tags[] = $tag;
} }
@ -1984,22 +2011,18 @@ function file_tag_update_pconfig($uid,$file_old,$file_new,$type = 'file') {
$deleted_tags = array(); $deleted_tags = array();
$check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type)); $check_deleted_tags = explode(",",file_tag_file_to_list($file_old,$type));
foreach($check_deleted_tags as $tag) { foreach ($check_deleted_tags as $tag) {
if(! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket)) if (! stristr($file_new,$lbracket . file_tag_encode($tag) . $rbracket))
$deleted_tags[] = $tag; $deleted_tags[] = $tag;
} }
foreach($deleted_tags as $key => $tag) { foreach ($deleted_tags as $key => $tag) {
$r = q("SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d", $r = q("SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d",
dbesc($tag), dbesc($tag),
intval(TERM_OBJ_POST), intval(TERM_OBJ_POST),
intval($termtype), intval($termtype),
intval($uid)); intval($uid));
//$r = q("select file from item where uid = %d " . file_tag_file_query('item',$tag,$type),
// intval($uid)
//);
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
unset($deleted_tags[$key]); unset($deleted_tags[$key]);
} }
@ -2008,54 +2031,56 @@ function file_tag_update_pconfig($uid,$file_old,$file_new,$type = 'file') {
} }
} }
if($saved != $filetags_updated) { if ($saved != $filetags_updated) {
set_pconfig($uid,'system','filetags', $filetags_updated); set_pconfig($uid, 'system', 'filetags', $filetags_updated);
} }
return true; return true;
} }
else else
if(strlen($file_new)) { if (strlen($file_new)) {
set_pconfig($uid,'system','filetags', $file_new); set_pconfig($uid, 'system', 'filetags', $file_new);
} }
return true; return true;
} }
function file_tag_save_file($uid,$item,$file) { function file_tag_save_file($uid, $item, $file) {
require_once("include/files.php"); require_once "include/files.php";
$result = false; $result = false;
if(! intval($uid)) if (! intval($uid))
return false; return false;
$r = q("SELECT `file` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT `file` FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($item), intval($item),
intval($uid) intval($uid)
); );
if (dbm::is_result($r)) { if (dbm::is_result($r)) {
if(! stristr($r[0]['file'],'[' . file_tag_encode($file) . ']')) if (! stristr($r[0]['file'],'[' . file_tag_encode($file) . ']')) {
q("UPDATE `item` SET `file` = '%s' WHERE `id` = %d AND `uid` = %d", q("UPDATE `item` SET `file` = '%s' WHERE `id` = %d AND `uid` = %d",
dbesc($r[0]['file'] . '[' . file_tag_encode($file) . ']'), dbesc($r[0]['file'] . '[' . file_tag_encode($file) . ']'),
intval($item), intval($item),
intval($uid) intval($uid)
); );
}
create_files_from_item($item); create_files_from_item($item);
$saved = get_pconfig($uid,'system','filetags'); $saved = get_pconfig($uid,'system','filetags');
if((! strlen($saved)) || (! stristr($saved,'[' . file_tag_encode($file) . ']'))) if ((! strlen($saved)) || (! stristr($saved, '[' . file_tag_encode($file) . ']'))) {
set_pconfig($uid,'system','filetags',$saved . '[' . file_tag_encode($file) . ']'); set_pconfig($uid, 'system', 'filetags', $saved . '[' . file_tag_encode($file) . ']');
}
info( t('Item filed') ); info( t('Item filed') );
} }
return true; return true;
} }
function file_tag_unsave_file($uid,$item,$file,$cat = false) { function file_tag_unsave_file($uid, $item, $file, $cat = false) {
require_once("include/files.php"); require_once "include/files.php";
$result = false; $result = false;
if(! intval($uid)) if (! intval($uid))
return false; return false;
if($cat == true) { if ($cat == true) {
$pattern = '<' . file_tag_encode($file) . '>' ; $pattern = '<' . file_tag_encode($file) . '>' ;
$termtype = TERM_CATEGORY; $termtype = TERM_CATEGORY;
} else { } else {
@ -2086,27 +2111,24 @@ function file_tag_unsave_file($uid,$item,$file,$cat = false) {
intval($termtype), intval($termtype),
intval($uid)); intval($uid));
//$r = q("select file from item where uid = %d and deleted = 0 " . file_tag_file_query('item',$file,(($cat) ? 'category' : 'file')),
//);
if (! dbm::is_result($r)) { if (! dbm::is_result($r)) {
$saved = get_pconfig($uid,'system','filetags'); $saved = get_pconfig($uid,'system','filetags');
set_pconfig($uid,'system','filetags',str_replace($pattern,'',$saved)); set_pconfig($uid, 'system', 'filetags', str_replace($pattern, '', $saved));
} }
return true; return true;
} }
function normalise_openid($s) { function normalise_openid($s) {
return trim(str_replace(array('http://','https://'),array('',''),$s),'/'); return trim(str_replace(array('http://', 'https://'), array('', ''), $s), '/');
} }
function undo_post_tagging($s) { function undo_post_tagging($s) {
$matches = null; $matches = null;
$cnt = preg_match_all('/([!#@])\[url=(.*?)\](.*?)\[\/url\]/ism',$s,$matches,PREG_SET_ORDER); $cnt = preg_match_all('/([!#@])\[url=(.*?)\](.*?)\[\/url\]/ism', $s, $matches, PREG_SET_ORDER);
if($cnt) { if ($cnt) {
foreach($matches as $mtch) { foreach ($matches as $mtch) {
$s = str_replace($mtch[0], $mtch[1] . $mtch[3],$s); $s = str_replace($mtch[0], $mtch[1] . $mtch[3],$s);
} }
} }
@ -2114,17 +2136,17 @@ function undo_post_tagging($s) {
} }
function protect_sprintf($s) { function protect_sprintf($s) {
return(str_replace('%','%%',$s)); return str_replace('%', '%%', $s);
} }
function is_a_date_arg($s) { function is_a_date_arg($s) {
$i = intval($s); $i = intval($s);
if($i > 1900) { if ($i > 1900) {
$y = date('Y'); $y = date('Y');
if($i <= $y+1 && strpos($s,'-') == 4) { if ($i <= $y + 1 && strpos($s, '-') == 4) {
$m = intval(substr($s,5)); $m = intval(substr($s,5));
if($m > 0 && $m <= 12) if ($m > 0 && $m <= 12)
return true; return true;
} }
} }
@ -2145,7 +2167,7 @@ function deindent($text, $chr = "[\t ]", $count = NULL) {
preg_match("|^" . $chr . "*|", $lines[$k], $m); preg_match("|^" . $chr . "*|", $lines[$k], $m);
$count = strlen($m[0]); $count = strlen($m[0]);
} }
for ($k=0; $k < count($lines); $k++) { for ($k = 0; $k < count($lines); $k++) {
$lines[$k] = preg_replace("|^" . $chr . "{" . $count . "}|", "", $lines[$k]); $lines[$k] = preg_replace("|^" . $chr . "{" . $count . "}|", "", $lines[$k]);
} }
@ -2175,11 +2197,12 @@ function formatBytes($bytes, $precision = 2) {
*/ */
function format_network_name($network, $url = 0) { function format_network_name($network, $url = 0) {
if ($network != "") { if ($network != "") {
require_once('include/contact_selectors.php'); require_once 'include/contact_selectors.php';
if ($url != "") if ($url != "") {
$network_name = '<a href="'.$url.'">'.network_to_name($network, $url)."</a>"; $network_name = '<a href="'.$url.'">'.network_to_name($network, $url)."</a>";
else } else {
$network_name = network_to_name($network); $network_name = network_to_name($network);
}
return $network_name; return $network_name;
} }
@ -2211,15 +2234,14 @@ function text_highlight($s, $lang) {
$s = trim(html_entity_decode($s, ENT_COMPAT)); $s = trim(html_entity_decode($s, ENT_COMPAT));
$s = str_replace(' ', "\t", $s); $s = str_replace(' ', "\t", $s);
// The highlighter library insists on an opening php tag for php code blocks. If /*
// it isn't present, nothing is highlighted. So we're going to see if it's present. * The highlighter library insists on an opening php tag for php code blocks. If
// If not, we'll add it, and then quietly remove it after we get the processed output back. * it isn't present, nothing is highlighted. So we're going to see if it's present.
* If not, we'll add it, and then quietly remove it after we get the processed output back.
if ($lang === 'php') { */
if (strpos($s, '<?php') !== 0) { if ($lang === 'php' && strpos($s, '<?php') !== 0) {
$s = '<?php' . "\n" . $s; $s = '<?php' . "\n" . $s;
$tag_added = true; $tag_added = true;
}
} }
$renderer = new Text_Highlighter_Renderer_Html($options); $renderer = new Text_Highlighter_Renderer_Html($options);
@ -2228,7 +2250,6 @@ function text_highlight($s, $lang) {
$o = $hl->highlight($s); $o = $hl->highlight($s);
$o = str_replace("\n", '', $o); $o = str_replace("\n", '', $o);
if ($tag_added) { if ($tag_added) {
$b = substr($o, 0, strpos($o, '<li>')); $b = substr($o, 0, strpos($o, '<li>'));
$e = substr($o, strpos($o, '</li>')); $e = substr($o, strpos($o, '</li>'));

View file

@ -177,29 +177,34 @@ function add_shadow_entry($itemid) {
function update_thread_uri($itemuri, $uid) { function update_thread_uri($itemuri, $uid) {
$messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid));
if (dbm::is_result($messages)) if (dbm::is_result($messages)) {
foreach ($messages as $message) foreach ($messages as $message) {
update_thread($message["id"]); update_thread($message["id"]);
}
}
} }
function update_thread($itemid, $setmention = false) { function update_thread($itemid, $setmention = false) {
$items = q("SELECT `uid`, `guid`, `title`, `body`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `gcontact-id`, $items = q("SELECT `uid`, `guid`, `title`, `body`, `created`, `edited`, `commented`, `received`, `changed`, `wall`, `private`, `pubmail`, `moderated`, `visible`, `spam`, `starred`, `bookmark`, `contact-id`, `gcontact-id`,
`deleted`, `origin`, `forum_mode`, `network`, `rendered-html`, `rendered-hash` FROM `item` WHERE `id` = %d AND (`parent` = %d OR `parent` = 0) LIMIT 1", intval($itemid), intval($itemid)); `deleted`, `origin`, `forum_mode`, `network`, `rendered-html`, `rendered-hash` FROM `item` WHERE `id` = %d AND (`parent` = %d OR `parent` = 0) LIMIT 1", intval($itemid), intval($itemid));
if (!dbm::is_result($items)) if (!dbm::is_result($items)) {
return; return;
}
$item = $items[0]; $item = $items[0];
if ($setmention) if ($setmention) {
$item["mention"] = 1; $item["mention"] = 1;
}
$sql = ""; $sql = "";
foreach ($item AS $field => $data) foreach ($item AS $field => $data)
if (!in_array($field, array("guid", "title", "body", "rendered-html", "rendered-hash"))) { if (!in_array($field, array("guid", "title", "body", "rendered-html", "rendered-hash"))) {
if ($sql != "") if ($sql != "") {
$sql .= ", "; $sql .= ", ";
}
$sql .= "`".$field."` = '".dbesc($data)."'"; $sql .= "`".$field."` = '".dbesc($data)."'";
} }
@ -211,8 +216,9 @@ function update_thread($itemid, $setmention = false) {
// Updating a shadow item entry // Updating a shadow item entry
$items = q("SELECT `id` FROM `item` WHERE `guid` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item["guid"])); $items = q("SELECT `id` FROM `item` WHERE `guid` = '%s' AND `uid` = 0 LIMIT 1", dbesc($item["guid"]));
if (!$items) if (!dbm::is_result($items)) {
return; return;
}
$result = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s' WHERE `id` = %d", $result = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s' WHERE `id` = %d",
dbesc($item["title"]), dbesc($item["title"]),
@ -227,9 +233,11 @@ function update_thread($itemid, $setmention = false) {
function delete_thread_uri($itemuri, $uid) { function delete_thread_uri($itemuri, $uid) {
$messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid));
if(count($messages)) if (dbm::is_result($messages)) {
foreach ($messages as $message) foreach ($messages as $message) {
delete_thread($message["id"], $itemuri); delete_thread($message["id"], $itemuri);
}
}
} }
function delete_thread($itemid, $itemuri = "") { function delete_thread($itemid, $itemuri = "") {

View file

@ -56,7 +56,7 @@ server {
#Traditional SSL #Traditional SSL
ssl_certificate /etc/nginx/ssl/friendica.example.net.chain.pem; ssl_certificate /etc/nginx/ssl/friendica.example.net.chain.pem;
ssl_certificate_key /etc/nginx/ssl/example.net.key; ssl_certificate_key /etc/nginx/ssl/example.net.key;
# If you have used letsencrypt as your SSL provider, remove the previous two lines, and uncomment the following two (adjusting the path) instead. # If you have used letsencrypt as your SSL provider, remove the previous two lines, and uncomment the following two (adjusting the path) instead.
# ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

View file

@ -1,7 +1,7 @@
# FRIENDICA Distributed Social Network # FRIENDICA Distributed Social Network
# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project # Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project
# This file is distributed under the same license as the Friendica package. # This file is distributed under the same license as the Friendica package.
# #
# Translators: # Translators:
# Andy H3 <andy@hubup.pro>, 2017 # Andy H3 <andy@hubup.pro>, 2017
msgid "" msgid ""

View file

@ -1,7 +1,7 @@
# FRIENDICA Distributed Social Network # FRIENDICA Distributed Social Network
# Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project # Copyright (C) 2010, 2011, 2012, 2013 the Friendica Project
# This file is distributed under the same license as the Friendica package. # This file is distributed under the same license as the Friendica package.
# #
# Translators: # Translators:
msgid "" msgid ""
msgstr "" msgstr ""