aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Contact.php20
-rw-r--r--include/Scrape.php4
-rw-r--r--include/contact_widgets.php2
-rw-r--r--include/conversation.php10
-rw-r--r--include/datetime.php10
-rw-r--r--include/dba.php460
-rw-r--r--include/items.php3
-rw-r--r--include/network.php27
-rw-r--r--include/text.php5
9 files changed, 331 insertions, 210 deletions
diff --git a/include/Contact.php b/include/Contact.php
index d9949b1ef..532ea2f95 100644
--- a/include/Contact.php
+++ b/include/Contact.php
@@ -134,11 +134,11 @@ function contact_photo_menu($contact) {
$posts_link = $a->get_baseurl() . '/network/?cid=' . $contact['id'];
$menu = Array(
- t("View status") => $status_link,
- t("View profile") => $profile_link,
- t("View photos") => $photos_link,
- t("View recent") => $posts_link,
- t("Edit contact") => $contact_url,
+ t("View Status") => $status_link,
+ t("View Profile") => $profile_link,
+ t("View Photos") => $photos_link,
+ t("Network Posts") => $posts_link,
+ t("Edit Contact") => $contact_url,
t("Send PM") => $pm_url,
);
@@ -150,7 +150,7 @@ function contact_photo_menu($contact) {
$o = "";
foreach($menu as $k=>$v){
if ($v!="") {
- if(($k !== t("View recent")) && ($k !== t("Send PM")))
+ if(($k !== t("Network Posts")) && ($k !== t("Send PM")))
$o .= "<li><a target=\"redir\" href=\"$v\">$k</a></li>\n";
else
$o .= "<li><a href=\"$v\">$k</a></li>\n";
@@ -158,3 +158,11 @@ function contact_photo_menu($contact) {
}
return $o;
}}
+
+
+function random_profile() {
+ $r = q("select url from gcontact where url like '%%://%%/profile/%%' order by rand() limit 1");
+ if(count($r))
+ return dirname($r[0]['url']);
+ return '';
+} \ No newline at end of file
diff --git a/include/Scrape.php b/include/Scrape.php
index 9c237916b..141c90dcf 100644
--- a/include/Scrape.php
+++ b/include/Scrape.php
@@ -446,7 +446,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
$phost = substr($url,strpos($url,'@')+1);
$profile = 'http://' . $phost;
// fix nick character range
- $vcard = array('fn' => $name, 'nick' => $name, 'photo' => gravatar_img($url));
+ $vcard = array('fn' => $name, 'nick' => $name, 'photo' => avatar_img($url));
$notify = 'smtp ' . random_string();
$poll = 'email ' . random_string();
$priority = 0;
@@ -655,7 +655,7 @@ function probe_url($url, $mode = PROBE_NORMAL) {
}
if((! $vcard['photo']) && strlen($email))
- $vcard['photo'] = gravatar_img($email);
+ $vcard['photo'] = avatar_img($email);
if($poll === $profile)
$lnk = $feed->get_permalink();
if(isset($lnk) && strlen($lnk))
diff --git a/include/contact_widgets.php b/include/contact_widgets.php
index e0f37f078..96b02f293 100644
--- a/include/contact_widgets.php
+++ b/include/contact_widgets.php
@@ -12,6 +12,7 @@ function follow_widget() {
}
function findpeople_widget() {
+ require_once('include/Contact.php');
$a = get_app();
@@ -32,6 +33,7 @@ function findpeople_widget() {
'$findthem' => t('Find'),
'$suggest' => t('Friend Suggestions'),
'$similar' => t('Similar Interests'),
+ '$random' => t('Random Profile'),
'$inv' => t('Invite Friends')
));
diff --git a/include/conversation.php b/include/conversation.php
index a32cbeb8b..f4a564742 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -806,11 +806,11 @@ function item_photo_menu($item){
}
$menu = Array(
- t("View status") => $status_link,
- t("View profile") => $profile_link,
- t("View photos") => $photos_link,
- t("View recent") => $posts_link,
- t("Edit contact") => $contact_url,
+ t("View Status") => $status_link,
+ t("View Profile") => $profile_link,
+ t("View Photos") => $photos_link,
+ t("Network Posts") => $posts_link,
+ t("Edit Contact") => $contact_url,
t("Send PM") => $pm_url,
);
diff --git a/include/datetime.php b/include/datetime.php
index 6d395fe3f..f4dcfce62 100644
--- a/include/datetime.php
+++ b/include/datetime.php
@@ -80,6 +80,16 @@ function field_timezone($name='timezone', $label='', $current = 'America/Los_Ang
if(! function_exists('datetime_convert')) {
function datetime_convert($from = 'UTC', $to = 'UTC', $s = 'now', $fmt = "Y-m-d H:i:s") {
+ // Defaults to UTC if nothing is set, but throws an exception if set to empty string.
+ // Provide some sane defaults regardless.
+
+ if($from === '')
+ $from = 'UTC';
+ if($to === '')
+ $to = 'UTC';
+ if($s === '')
+ $s = 'now';
+
// Slight hackish adjustment so that 'zero' datetime actually returns what is intended
// otherwise we end up with -0001-11-30 ...
// add 32 days so that we at least get year 00, and then hack around the fact that
diff --git a/include/dba.php b/include/dba.php
index 76cc0bc7b..1421a703d 100644
--- a/include/dba.php
+++ b/include/dba.php
@@ -8,189 +8,273 @@ require_once('include/datetime.php');
*
* For debugging, insert 'dbg(1);' anywhere in the program flow.
* dbg(0); will turn it off. Logging is performed at LOGGER_DATA level.
- * When logging, all binary info is converted to text and html entities are escaped so that
- * the debugging stream is safe to view within both terminals and web pages.
+ * When logging, all binary info is converted to
+ * text and html entities are escaped so that
+ * the debugging stream is safe to view
+ * within both terminals and web pages.
*
*/
-
-if(! class_exists('dba')) {
-class dba {
-
- private $debug = 0;
- private $db;
- public $mysqli = true;
- public $connected = false;
- public $error = false;
-
- function __construct($server,$user,$pass,$db,$install = false) {
-
- $server = trim($server);
- $user = trim($user);
- $pass = trim($pass);
- $db = trim($db);
-
- if (!(strlen($server) && strlen($user))){
- $this->connected = false;
- $this->db = null;
- return;
- }
+
+if(! class_exists('dba')) {
+
+ class dba {
+
+ private $debug = 0;
+ private $db;
+ private $exceptions;
- if($install) {
- if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
- if(! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
- $this->error = sprintf( t('Cannot locate DNS info for database server \'%s\''), $server);
- $this->connected = false;
- $this->db = null;
- return;
+ public $mysqli = true;
+ public $connected = false;
+ public $error = false;
+
+ function __construct($server,$user,$pass,$db,$install = false) {
+
+ $server = trim($server);
+ $user = trim($user);
+ $pass = trim($pass);
+ $db = trim($db);
+
+ //we need both, server and username, so fail if one is missing
+ if (!(strlen($server) && strlen($user))){
+ $this->connected = false;
+ $this->db = null;
+ throw new InvalidArgumentException(t("Server name of user name are missing. "));
+ }
+
+ //when we are installing
+ if($install) {
+ if(strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
+ if(! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
+ $this->connected = false;
+ $this->db = null;
+ throw new InvalidArgumentException( t('Cannot locate DNS info for database server \'%s\''), $server);
+ }
}
}
- }
- if(class_exists('mysqli')) {
- $this->db = @new mysqli($server,$user,$pass,$db);
- if(! mysqli_connect_errno()) {
- $this->connected = true;
+ if(class_exists('mysqli')) {
+ $this->db = new mysqli($server,$user,$pass,$db);
+ if(NULL === $this->db->connect_error) {
+ $this->connected = true;
+ } else {
+ throw new RuntimeException($this->db->connect_error);
+ }
+ } else {
+ $this->mysqli = false;
+ $this->db = mysql_connect($server,$user,$pass);
+ if($this->db && mysql_select_db($db,$this->db)) {
+ $this->connected = true;
+ } else {
+ throw new RuntimeException(mysql_error());
+ }
}
}
- else {
- $this->mysqli = false;
- $this->db = mysql_connect($server,$user,$pass);
- if($this->db && mysql_select_db($db,$this->db)) {
- $this->connected = true;
- }
+
+ public function excep($excep) {
+ $this->exceptions=$excep;
}
- if(! $this->connected) {
- $this->db = null;
- if(! $install)
- system_unavailable();
+
+ public function getdb() {
+ return $this->db;
}
- }
- public function getdb() {
- return $this->db;
- }
+ public function q($sql) {
- public function q($sql) {
-
- if((! $this->db) || (! $this->connected))
- return false;
-
- if($this->mysqli)
- $result = @$this->db->query($sql);
- else
- $result = @mysql_query($sql,$this->db);
+ if((! $this->db) || (! $this->connected)) {
+ $this->throwOrLog(new RuntimeException(t("There is no db connection. ")));
+ return;
+ }
+
+ if($this->mysqli) {
+ $result = $this->db->query($sql);
+ } else {
+ $result = mysql_query($sql,$this->db);
+ }
- if($this->debug) {
+ //on debug mode or fail, the query is written to the log.
+ //this won't work if logger can not read it's logging level
+ //from the db.
+ if($this->debug || FALSE === $result) {
+
+ $mesg = '';
+
+ if($result === false) {
+ $mesg = 'false '.$this->error();
+ } elseif($result === true) {
+ $mesg = 'true';
+ } else {
+ if($this->mysqli) {
+ $mesg = $result->num_rows . t(' results') . EOL;
+ } else {
+ $mesg = mysql_num_rows($result) . t(' results') . EOL;
+ }
+ }
- $mesg = '';
+ $str = 'SQL = ' . printable($sql) . EOL . t('SQL returned ') . $mesg . EOL;
- if($this->mysqli) {
- if($this->db->errno)
- logger('dba: ' . $this->db->error);
+
+ // If dbfail.out exists, we will write any failed calls directly to it,
+ // regardless of any logging that may or may nor be in effect.
+ // These usually indicate SQL syntax errors that need to be resolved.
+ if(file_exists('dbfail.out')) {
+ file_put_contents('dbfail.out', datetime_convert() . "\n" . $str . "\n", FILE_APPEND);
+ }
+ logger('dba: ' . $str );
+ if(FALSE===$result) {
+ $this->throwOrLog(new RuntimeException('dba: ' . $str));
+ return;
+ }
}
- elseif(mysql_errno($this->db))
- logger('dba: ' . mysql_error($this->db));
-
- if($result === false)
- $mesg = 'false';
- elseif($result === true)
- $mesg = 'true';
- else {
- if($this->mysqli)
- $mesg = $result->num_rows . ' results' . EOL;
- else
- $mesg = mysql_num_rows($result) . ' results' . EOL;
+
+
+ if($result === true) {
+ return $result;
}
-
- $str = 'SQL = ' . printable($sql) . EOL . 'SQL returned ' . $mesg . EOL;
- logger('dba: ' . $str );
- }
+ $r = array();
+ if($this->mysqli) {
+ if($result->num_rows) {
+ while($x = $result->fetch_array(MYSQLI_ASSOC)) {
+ $r[] = $x;
+ }
+ $result->free_result();
+ }
+ } else {
+ if(mysql_num_rows($result)) {
+ while($x = mysql_fetch_array($result, MYSQL_ASSOC)) {
+ $r[] = $x;
+ }
+ mysql_free_result($result);
+ }
+ }
- /**
- * If dbfail.out exists, we will write any failed calls directly to it,
- * regardless of any logging that may or may nor be in effect.
- * These usually indicate SQL syntax errors that need to be resolved.
- */
- if($result === false) {
- logger('dba: ' . printable($sql) . ' returned false.');
- if(file_exists('dbfail.out'))
- file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n", FILE_APPEND);
+ if($this->debug) {
+ logger('dba: ' . printable(print_r($r, true)));
+ }
+ return($r);
}
- if(($result === true) || ($result === false))
- return $result;
-
- $r = array();
- if($this->mysqli) {
- if($result->num_rows) {
- while($x = $result->fetch_array(MYSQLI_ASSOC))
- $r[] = $x;
- $result->free_result();
+ private function error() {
+ if($this->mysqli) {
+ return $this->db->error;
+ } else {
+ return mysql_error($this->db);
+ }
+ }
+
+ private function throwOrLog(Exception $ex) {
+ if($this->exceptions) {
+ throw $ex;
+ } else {
+ logger('dba: '.$ex->getMessage());
}
}
- else {
- if(mysql_num_rows($result)) {
- while($x = mysql_fetch_array($result, MYSQL_ASSOC))
- $r[] = $x;
- mysql_free_result($result);
+
+ /**
+ * starts a transaction. Transactions need to be finished with
+ * commit() or rollback(). Please mind that the db table engine may
+ * not support this.
+ */
+ public function beginTransaction() {
+ if($this->mysqli) {
+ return $this->db->autocommit(false);
+ } else {
+ //no transaction support in mysql module...
+ mysql_query('SET AUTOCOMMIT = 0;', $db);
+ }
+ }
+
+ /**
+ * rollback a transaction. So, rollback anything that was done since the last call
+ * to beginTransaction().
+ */
+ public function rollback() {
+ if($this->mysqli) {
+ return $this->db->rollback();
+ } else {
+ //no transaction support in mysql module...
+ mysql_query('ROLLBACK;', $db);
}
+ $this->stopTransaction();
}
-
- if($this->debug)
- logger('dba: ' . printable(print_r($r, true)));
- return($r);
- }
-
- public function dbg($dbg) {
- $this->debug = $dbg;
- }
+ /**
+ * commit a transaction. So, write any query to the database.
+ */
+ public function commit() {
+ if($this->mysqli) {
+ return $this->db->commit();
+ } else {
+ //no transaction support in mysql module...
+ mysql_query('COMMIT;', $db);
+ }
+ $this->stopTransaction();
+ }
+
+ private function stopTransaction() {
+ if($this->mysqli) {
+ return $this->db->autocommit(true);
+ } else {
+ //no transaction support in mysql module...
+ mysql_query('SET AUTOCOMMIT = 1;', $db);
+ }
+ }
+
+ public function dbg($dbg) {
+ $this->debug = $dbg;
+ }
- public function escape($str) {
- if($this->db && $this->connected) {
- if($this->mysqli)
- return @$this->db->real_escape_string($str);
- else
- return @mysql_real_escape_string($str,$this->db);
+ public function escape($str) {
+ if($this->db && $this->connected) {
+ if($this->mysqli) {
+ return $this->db->real_escape_string($str);
+ } else {
+ return mysql_real_escape_string($str,$this->db);
+ }
+ }
}
- }
- function __destruct() {
- if ($this->db)
- if($this->mysqli)
- $this->db->close();
- else
+ function __destruct() {
+ if ($this->db) {
+ if($this->mysqli) {
+ $this->db->close();
+ }
+ } else {
mysql_close($this->db);
+ }
+ }
}
-}}
+}
if(! function_exists('printable')) {
-function printable($s) {
- $s = preg_replace("~([\x01-\x08\x0E-\x0F\x10-\x1F\x7F-\xFF])~",".", $s);
- $s = str_replace("\x00",'.',$s);
- if(x($_SERVER,'SERVER_NAME'))
- $s = escape_tags($s);
- return $s;
-}}
+ function printable($s) {
+ $s = preg_replace("~([\x01-\x08\x0E-\x0F\x10-\x1F\x7F-\xFF])~",".", $s);
+ $s = str_replace("\x00",'.',$s);
+ if(x($_SERVER,'SERVER_NAME'))
+ $s = escape_tags($s);
+ return $s;
+ }
+}
// Procedural functions
-if(! function_exists('dbg')) {
-function dbg($state) {
- global $db;
- if($db)
- $db->dbg($state);
-}}
+if(! function_exists('dbg')) {
+ function dbg($state) {
+ global $db;
+ if($db)
+ $db->dbg($state);
+ }
+}
-if(! function_exists('dbesc')) {
-function dbesc($str) {
- global $db;
- if($db && $db->connected)
- return($db->escape($str));
- else
- return(str_replace("'","\\'",$str));
-}}
+if(! function_exists('dbesc')) {
+ function dbesc($str) {
+ global $db;
+ if($db && $db->connected)
+ return($db->escape($str));
+ else
+ return(str_replace("'","\\'",$str));
+ }
+}
@@ -199,30 +283,31 @@ function dbesc($str) {
// Example: $r = q("SELECT * FROM `%s` WHERE `uid` = %d",
// 'user', 1);
-if(! function_exists('q')) {
-function q($sql) {
+if(! function_exists('q')) {
+ function q($sql) {
- global $db;
- $args = func_get_args();
- unset($args[0]);
+ global $db;
+ $args = func_get_args();
+ unset($args[0]);
- if($db && $db->connected) {
- $stmt = vsprintf($sql,$args);
- if($stmt === false)
- logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true));
- return $db->q($stmt);
- }
+ if($db && $db->connected) {
+ $stmt = vsprintf($sql,$args);
+ if($stmt === false)
+ logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true));
+ return $db->q($stmt);
+ }
- /**
- *
- * This will happen occasionally trying to store the
- * session data after abnormal program termination
- *
- */
- logger('dba: no database: ' . print_r($args,true));
- return false;
+ /**
+ *
+ * This will happen occasionally trying to store the
+ * session data after abnormal program termination
+ *
+ */
+ logger('dba: no database: ' . print_r($args,true));
+ return false;
-}}
+ }
+}
/**
*
@@ -230,36 +315,39 @@ function q($sql) {
*
*/
-if(! function_exists('dbq')) {
-function dbq($sql) {
+if(! function_exists('dbq')) {
+ function dbq($sql) {
- global $db;
- if($db && $db->connected)
- $ret = $db->q($sql);
- else
- $ret = false;
- return $ret;
-}}
+ global $db;
+ if($db && $db->connected)
+ $ret = $db->q($sql);
+ else
+ $ret = false;
+ return $ret;
+ }
+}
-// Caller is responsible for ensuring that any integer arguments to
+// 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.
+// SQL injection vectors. All integer array elements should be specifically
+// cast to int to avoid trouble.
if(! function_exists('dbesc_array_cb')) {
-function dbesc_array_cb(&$item, $key) {
- if(is_string($item))
- $item = dbesc($item);
-}}
+ function dbesc_array_cb(&$item, $key) {
+ if(is_string($item))
+ $item = dbesc($item);
+ }
+}
if(! function_exists('dbesc_array')) {
-function dbesc_array(&$arr) {
- if(is_array($arr) && count($arr)) {
- array_walk($arr,'dbesc_array_cb');
+ function dbesc_array(&$arr) {
+ if(is_array($arr) && count($arr)) {
+ array_walk($arr,'dbesc_array_cb');
+ }
}
-}}
+}
diff --git a/include/items.php b/include/items.php
index ee6960534..3a931b68c 100644
--- a/include/items.php
+++ b/include/items.php
@@ -1856,6 +1856,8 @@ function local_delivery($importer,$data) {
$feed->enable_order_by_date(false);
$feed->init();
+/*
+ // Currently unsupported - needs a lot of work
$reloc = $feed->get_feed_tags( NAMESPACE_DFRN, 'relocate' );
if(isset($reloc[0]['child'][NAMESPACE_DFRN])) {
$base = $reloc[0]['child'][NAMESPACE_DFRN];
@@ -1880,6 +1882,7 @@ function local_delivery($importer,$data) {
// schedule a scan?
}
+*/
// handle friend suggestion notification
diff --git a/include/network.php b/include/network.php
index 38d0980d5..23ef50b21 100644
--- a/include/network.php
+++ b/include/network.php
@@ -692,18 +692,23 @@ function allowed_email($email) {
}}
-if(! function_exists('gravatar_img')) {
-function gravatar_img($email) {
- $size = 175;
- $opt = 'identicon'; // psuedo-random geometric pattern if not found
- $rating = 'pg';
- $hash = md5(trim(strtolower($email)));
-
- $url = 'http://www.gravatar.com/avatar/' . $hash . '.jpg'
- . '?s=' . $size . '&d=' . $opt . '&r=' . $rating;
+if(! function_exists('avatar_img')) {
+function avatar_img($email) {
+
+ $a = get_app();
+
+ $avatar['size'] = 175;
+ $avatar['email'] = $email;
+ $avatar['url'] = '';
+ $avatar['success'] = false;
+
+ call_hooks('avatar_lookup', $avatar);
+
+ if(! $avatar['success'])
+ $avatar['url'] = $a->get_baseurl() . '/images/person-175.jpg';
- logger('gravatar: ' . $email . ' ' . $url);
- return $url;
+ logger('Avatar: ' . $avatar['email'] . ' ' . $avatar['url'], LOGGER_DEBUG);
+ return $avatar['url'];
}}
diff --git a/include/text.php b/include/text.php
index aced9e0a8..4ec59a665 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1506,3 +1506,8 @@ function undo_post_tagging($s) {
return $s;
}
+function fix_mce_lf($s) {
+ $s = str_replace("\r\n","\n",$s);
+ $s = str_replace("\n\n","\n",$s);
+ return $s;
+} \ No newline at end of file