mirror of
https://github.com/friendica/friendica
synced 2025-01-22 22:52:39 +01:00
Merge remote branch 'upstream/master'
This commit is contained in:
commit
437e18d7a7
48 changed files with 3239 additions and 1671 deletions
4
boot.php
4
boot.php
|
@ -9,9 +9,9 @@ require_once('include/nav.php');
|
|||
require_once('include/cache.php');
|
||||
|
||||
define ( 'FRIENDICA_PLATFORM', 'Friendica');
|
||||
define ( 'FRIENDICA_VERSION', '2.3.1260' );
|
||||
define ( 'FRIENDICA_VERSION', '2.3.1263' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
|
||||
define ( 'DB_UPDATE_VERSION', 1123 );
|
||||
define ( 'DB_UPDATE_VERSION', 1126 );
|
||||
|
||||
define ( 'EOL', "<br />\r\n" );
|
||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
|
|
27
database.sql
27
database.sql
|
@ -257,6 +257,7 @@ CREATE TABLE IF NOT EXISTS `item` (
|
|||
KEY `last-child` (`last-child`),
|
||||
KEY `unseen` (`unseen`),
|
||||
KEY `wall` (`wall`),
|
||||
KEY `author-name` (`author-name`),
|
||||
KEY `author-link` (`author-link`),
|
||||
FULLTEXT KEY `title` (`title`),
|
||||
FULLTEXT KEY `body` (`body`),
|
||||
|
@ -809,5 +810,31 @@ INDEX ( `uid` )
|
|||
) ENGINE = MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table `notify-threads`
|
||||
--
|
||||
-- notify-id: notify.id of the first notification of this thread
|
||||
-- master-parent-item: item.id of the parent item
|
||||
-- parent-item: item.id of the imediate parent (only for multi-thread)
|
||||
-- not used yet.
|
||||
-- receiver-uid: user.uid of the receiver of this notification.
|
||||
--
|
||||
-- If we query for a master-parent-item and receiver-uid...
|
||||
-- * Returns 1 item: this is not the parent notification,
|
||||
-- so just "follow" the thread (references to this notification)
|
||||
-- * Returns no item: this is the first notification related to
|
||||
-- this parent item. So, create the record and use the message-id
|
||||
-- header.
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `notify-threads` (
|
||||
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`notify-id` INT NOT NULL,
|
||||
`master-parent-item` INT( 10 ) unsigned NOT NULL DEFAULT '0',
|
||||
`parent-item` INT( 10 ) unsigned NOT NULL DEFAULT '0',
|
||||
`receiver-uid` INT NOT NULL,
|
||||
INDEX ( `master-parent-item` ),
|
||||
INDEX ( `receiver-uid` )
|
||||
) ENGINE = MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
|
|
|
@ -34,3 +34,20 @@ Once you have created a post, you can not change the permissions assigned. Withi
|
|||
|
||||
In case you haven't yet figured this out, we are encouraging you to encourage your friends to use Friendica - because all these privacy features work much better within a privacy-aware network. Many of the other social networks Friendica can connect to have no privacy controls.
|
||||
|
||||
|
||||
Profiles, Privacy, and Photos
|
||||
=============================
|
||||
|
||||
The decentralised nature of Friendica (many websites exchanging information rather than one website which controls everything) has some implications with privacy as it relates to people on other sites. There are things you should be aware of, so you can decide best how to interact privately.
|
||||
|
||||
Sharing photos privately is a problem. We can only share them __privately__ with Friendica members. In order to share with other people, we need to prove who they are. We can prove the identity of Friendica members, as we have a mechanism to do so. Your friends on other networks will be blocked from viewing these private photos because we cannot prove that they should be allowed to see them.
|
||||
|
||||
Our developers are working on solutions to allow access to your friends - no matter what network they are on. However we take privacy seriously and don't behave like some networks that __pretend__ your photos are private, but make them available to others without proof of identity.
|
||||
|
||||
Your profile and "wall" may also be visited by your friends from other networks, and you can block access to these by web visitors that Friendica doesn't know. Be aware that this could include some of your friends on other networks.
|
||||
|
||||
This may produce undesired results when posting a long status message to (for instance) Twitter and even Facebook. When Friendica sends a post to these networks which exceeds the service length limit, we truncate it and provide a link to the original. The original is a link back to your Friendica profile. As Friendica cannot prove who they are, it may not be possible for these people to view your post in full.
|
||||
|
||||
For people in this situation we would recommend providing a "Twitter-length" summary, with more detail for friends that can see the post in full.
|
||||
|
||||
Blocking your profile or entire Friendica site from unknown web visitors also has serious implications for communicating with StatusNet/identi.ca members. These networks communicate with others via public protocols that are not authenticated. In order to view your posts, these networks have to access them as an "unknown web visitor". If we allowed this, it would mean anybody could in fact see your posts, and you've instructed Friendica not to allow this. So be aware that the act of blocking your profile to unknown visitors also has the effect of blocking outbound communication with public networks (such as identi.ca) and feed readers such as Google Reader.
|
|
@ -32,6 +32,9 @@ $a->config['sitename'] = "Friendica Social Network";
|
|||
// to the email address of an already registered person who can authorise
|
||||
// and/or approve/deny the request.
|
||||
|
||||
// In order to perform system administration via the admin panel, admin_email
|
||||
// must precisely match the email address of the person logged in.
|
||||
|
||||
$a->config['register_policy'] = REGISTER_OPEN;
|
||||
$a->config['register_text'] = '';
|
||||
$a->config['admin_email'] = '';
|
||||
|
@ -64,6 +67,10 @@ $a->config['system']['huburl'] = 'http://pubsubhubbub.appspot.com';
|
|||
|
||||
$a->config['system']['rino_encrypt'] = true;
|
||||
|
||||
// allowed themes (change this from admin panel after installation)
|
||||
|
||||
$a->config['system']['allowed_themes'] = 'dispy,quattro,testbubble,vier,darkbubble,darkzero,duepuntozero,greenzero,purplezero,quattro-green,slackr';
|
||||
|
||||
// default system theme
|
||||
|
||||
$a->config['system']['theme'] = 'duepuntozero';
|
||||
|
|
|
@ -55,42 +55,12 @@ function diaspora2bb($s) {
|
|||
$s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s);
|
||||
|
||||
// Don't show link to full picture (until it is fixed)
|
||||
$s = scale_diaspora_images($s, false);
|
||||
$s = scale_external_images($s, false);
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
function scale_diaspora_images($s,$include_link = true) {
|
||||
|
||||
$matches = null;
|
||||
$c = preg_match_all('/\[img\](.*?)\[\/img\]/ism',$s,$matches,PREG_SET_ORDER);
|
||||
if($c) {
|
||||
require_once('include/Photo.php');
|
||||
foreach($matches as $mtch) {
|
||||
logger('scale_diaspora_image: ' . $mtch[1]);
|
||||
$i = fetch_url($mtch[1]);
|
||||
if($i) {
|
||||
$ph = new Photo($i);
|
||||
if($ph->is_valid()) {
|
||||
if($ph->getWidth() > 600 || $ph->getHeight() > 600) {
|
||||
$ph->scaleImage(600);
|
||||
$new_width = $ph->getWidth();
|
||||
$new_height = $ph->getHeight();
|
||||
logger('scale_diaspora_image: ' . $new_width . 'w ' . $new_height . 'h' . 'match: ' . $mtch[0], LOGGER_DEBUG);
|
||||
$s = str_replace($mtch[0],'[img=' . $new_width . 'x' . $new_height. ']' . $mtch[1] . '[/img]'
|
||||
. "\n" . (($include_link)
|
||||
? '[url=' . $mtch[1] . ']' . t('view full size') . '[/url]' . "\n"
|
||||
: ''),$s);
|
||||
logger('scale_diaspora_image: new string: ' . $s, LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
function stripdcode_br_cb($s) {
|
||||
return '[code]' . str_replace('<br />', "\n\t", $s[1]) . '[/code]';
|
||||
}
|
||||
|
|
|
@ -273,10 +273,10 @@ function delivery_run($argv, $argc){
|
|||
|
||||
if($normal_mode) {
|
||||
if($item_id == $item['id'] || $item['id'] == $item['parent'])
|
||||
$atom .= atom_entry($item,'text',$item_contact,$owner,true);
|
||||
$atom .= atom_entry($item,'text',null,$owner,true);
|
||||
}
|
||||
else
|
||||
$atom .= atom_entry($item,'text',$item_contact,$owner,true);
|
||||
$atom .= atom_entry($item,'text',null,$owner,true);
|
||||
|
||||
}
|
||||
|
||||
|
@ -364,7 +364,7 @@ function delivery_run($argv, $argc){
|
|||
continue;
|
||||
|
||||
if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
|
||||
$slaps[] = atom_entry($item,'html',$item_contact,$owner,true);
|
||||
$slaps[] = atom_entry($item,'html',null,$owner,true);
|
||||
}
|
||||
|
||||
logger('notifier: slapdelivery: ' . $contact['name']);
|
||||
|
|
|
@ -794,15 +794,15 @@ function diaspora_reshare($importer,$xml) {
|
|||
|
||||
if(strlen($source_xml->post->asphoto->objectId) && ($source_xml->post->asphoto->objectId != 0) && ($source_xml->post->asphoto->image_url)) {
|
||||
$body = '[url=' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '][img]' . notags(unxmlify($source_xml->post->asphoto->objectId)) . '[/img][/url]' . "\n";
|
||||
$body = scale_diaspora_images($body,false);
|
||||
$body = scale_external_images($body,false);
|
||||
}
|
||||
elseif($source_xml->post->asphoto->image_url) {
|
||||
$body = '[img]' . notags(unxmlify($source_xml->post->asphoto->image_url)) . '[/img]' . "\n";
|
||||
$body = scale_diaspora_images($body);
|
||||
$body = scale_external_images($body);
|
||||
}
|
||||
elseif($source_xml->post->status_message) {
|
||||
$body = diaspora2bb($source_xml->post->status_message->raw_message);
|
||||
$body = scale_diaspora_images($body);
|
||||
$body = scale_external_images($body);
|
||||
|
||||
}
|
||||
else {
|
||||
|
@ -945,11 +945,11 @@ function diaspora_asphoto($importer,$xml) {
|
|||
|
||||
if(strlen($xml->objectId) && ($xml->objectId != 0) && ($xml->image_url)) {
|
||||
$body = '[url=' . notags(unxmlify($xml->image_url)) . '][img]' . notags(unxmlify($xml->objectId)) . '[/img][/url]' . "\n";
|
||||
$body = scale_diaspora_images($body,false);
|
||||
$body = scale_external_images($body,false);
|
||||
}
|
||||
elseif($xml->image_url) {
|
||||
$body = '[img]' . notags(unxmlify($xml->image_url)) . '[/img]' . "\n";
|
||||
$body = scale_diaspora_images($body);
|
||||
$body = scale_external_images($body);
|
||||
}
|
||||
else {
|
||||
logger('diaspora_asphoto: no photo url found.');
|
||||
|
@ -1476,7 +1476,7 @@ function diaspora_photo($importer,$xml,$msg) {
|
|||
|
||||
$link_text = '[img]' . $remote_photo_path . $remote_photo_name . '[/img]' . "\n";
|
||||
|
||||
$link_text = scale_diaspora_images($link_text);
|
||||
$link_text = scale_external_images($link_text);
|
||||
|
||||
if(strpos($parent_item['body'],$link_text) === false) {
|
||||
$r = q("update item set `body` = '%s', `visible` = 1 where `id` = %d and `uid` = %d limit 1",
|
||||
|
@ -1803,6 +1803,9 @@ function diaspora_profile($importer,$xml) {
|
|||
if(substr($birthday,5) === substr($contact['bd'],5))
|
||||
$birthday = $contact['bd'];
|
||||
|
||||
// TODO: update name on item['author-name'] if the name changed. See consume_feed()
|
||||
// Not doing this currently because D* protocol is scheduled for revision soon.
|
||||
|
||||
$r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
dbesc($name),
|
||||
dbesc(datetime_convert()),
|
||||
|
|
|
@ -13,7 +13,9 @@ function notification($params) {
|
|||
$site_admin = sprintf( t('%s Administrator'), $sitename);
|
||||
|
||||
$sender_name = $product;
|
||||
$sender_email = t('noreply') . '@' . $a->get_hostname();
|
||||
$hostname = $a->get_hostname();
|
||||
$sender_email = t('noreply') . '@' . $hostname;
|
||||
$additional_mail_header = "";
|
||||
|
||||
if(array_key_exists('item',$params)) {
|
||||
$title = $params['item']['title'];
|
||||
|
@ -36,8 +38,15 @@ function notification($params) {
|
|||
}
|
||||
|
||||
if($params['type'] == NOTIFY_COMMENT) {
|
||||
logger("notification: params = " . print_r($params, true), LOGGER_DEBUG);
|
||||
|
||||
$subject = sprintf( t('%s commented on an item at %s'), $params['source_name'], $sitename);
|
||||
$parent_id = $params['parent'];
|
||||
|
||||
// Some mail softwares relies on subject field for threading.
|
||||
// So, we cannot have different subjects for notifications of the same thread.
|
||||
// Before this we have the name of the replier on the subject rendering
|
||||
// differents subjects for messages on the same thread.
|
||||
$subject = sprintf( t('Someone commented on item #%d at %s'), $parent_id, $sitename);
|
||||
$preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']);
|
||||
$epreamble = sprintf( t('%s commented in %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a watched conversation') . '[/url]');
|
||||
|
||||
|
@ -126,8 +135,6 @@ function notification($params) {
|
|||
} while($dups == true);
|
||||
|
||||
|
||||
|
||||
|
||||
// create notification entry in DB
|
||||
|
||||
$r = q("insert into notify (hash,name,url,photo,date,uid,link,type,verb,otype)
|
||||
|
@ -170,6 +177,40 @@ function notification($params) {
|
|||
|
||||
logger('notification: sending notification email');
|
||||
|
||||
$id_for_parent = "${params['parent']}@${hostname}";
|
||||
|
||||
// Is this the first email notification for this parent item and user?
|
||||
|
||||
$r = q("select `id` from `notify-threads` where `master-parent-item` = %d and `receiver-uid` = %d limit 1",
|
||||
intval($params['parent']),
|
||||
intval($params['uid']) );
|
||||
|
||||
// If so, create the record of it and use a message-id smtp header.
|
||||
|
||||
if(!$r) {
|
||||
logger("norify_id:" . intval($notify_id). ", parent: " . intval($params['parent']) . "uid: " .
|
||||
intval($params['uid']), LOGGER_DEBUG);
|
||||
$r = q("insert into `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`)
|
||||
values(%d,%d,%d,%d)",
|
||||
intval($notify_id),
|
||||
intval($params['parent']),
|
||||
intval($params['uid']),
|
||||
0 );
|
||||
|
||||
$additional_mail_header .= "Message-ID: <${id_for_parent}>\n";
|
||||
$log_msg = "include/enotify: No previous notification found for this parent:\n" .
|
||||
" parent: ${params['parent']}\n" . " uid : ${params['uid']}\n";
|
||||
logger($log_msg, LOGGER_DEBUG);
|
||||
}
|
||||
|
||||
// If not, just "follow" the thread.
|
||||
|
||||
else {
|
||||
$additional_mail_header = "References: <${id_for_parent}>\nIn-Reply-To: <${id_for_parent}>\n";
|
||||
logger("include/enotify: There's already a notification for this parent:\n" . print_r($r, true), LOGGER_DEBUG);
|
||||
}
|
||||
|
||||
|
||||
|
||||
$textversion = strip_tags(html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r", "\\n"), "\n",
|
||||
$body))),ENT_QUOTES,'UTF-8'));
|
||||
|
@ -227,7 +268,8 @@ function notification($params) {
|
|||
'toEmail' => $params['to_email'],
|
||||
'messageSubject' => $subject,
|
||||
'htmlVersion' => $email_html_body,
|
||||
'textVersion' => $email_text_body
|
||||
'textVersion' => $email_text_body,
|
||||
'additionalMailHeader' => $additional_mail_header,
|
||||
));
|
||||
}
|
||||
|
||||
|
@ -248,6 +290,7 @@ class enotify {
|
|||
* @param messageSubject subject of the message
|
||||
* @param htmlVersion html version of the message
|
||||
* @param textVersion text only version of the message
|
||||
* @param additionalMailHeader additions to the smtp mail header
|
||||
*/
|
||||
static public function send($params) {
|
||||
|
||||
|
@ -262,6 +305,7 @@ class enotify {
|
|||
|
||||
// generate a multipart/alternative message header
|
||||
$messageHeader =
|
||||
$params['additionalMailHeader'] .
|
||||
"From: {$params['fromName']} <{$params['fromEmail']}>\n" .
|
||||
"Reply-To: {$params['fromName']} <{$params['replyTo']}>\n" .
|
||||
"MIME-Version: 1.0\n" .
|
||||
|
@ -291,4 +335,4 @@ class enotify {
|
|||
logger("notification: enotify::send returns " . $res, LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
|
|
@ -1308,12 +1308,28 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
}
|
||||
|
||||
if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
|
||||
q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
$r = q("select * from contact where uid = %d and id = %d limit 1",
|
||||
intval($contact['uid']),
|
||||
intval($contact['id'])
|
||||
);
|
||||
|
||||
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc(datetime_convert()),
|
||||
intval($contact['uid']),
|
||||
intval($contact['id'])
|
||||
);
|
||||
|
||||
// do our best to update the name on content items
|
||||
|
||||
if(count($r)) {
|
||||
q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d",
|
||||
dbesc(notags(trim($new_name))),
|
||||
dbesc($r[0]['name']),
|
||||
dbesc($r[0]['url']),
|
||||
intval($contact['uid'])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if(strlen($birthday)) {
|
||||
|
@ -1505,13 +1521,18 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
$item_id = $item->get_id();
|
||||
$datarray = get_atom_elements($feed,$item);
|
||||
|
||||
if(! x($datarray,'author-name'))
|
||||
|
||||
if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-name'] = $contact['name'];
|
||||
if(! x($datarray,'author-link'))
|
||||
if((! x($datarray,'author-link')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-link'] = $contact['url'];
|
||||
if(! x($datarray,'author-avatar'))
|
||||
if((! x($datarray,'author-avatar')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-avatar'] = $contact['thumb'];
|
||||
|
||||
if((! x($datarray,'author-name')) || (! x($datarray,'author-link'))) {
|
||||
logger('consume_feed: no author information! ' . print_r($datarray,true));
|
||||
continue;
|
||||
}
|
||||
|
||||
$r = q("SELECT `uid`, `last-child`, `edited`, `body` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1",
|
||||
dbesc($item_id),
|
||||
|
@ -1614,14 +1635,19 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0)
|
|||
$datarray = get_atom_elements($feed,$item);
|
||||
|
||||
if(is_array($contact)) {
|
||||
if(! x($datarray,'author-name'))
|
||||
if((! x($datarray,'author-name')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-name'] = $contact['name'];
|
||||
if(! x($datarray,'author-link'))
|
||||
if((! x($datarray,'author-link')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-link'] = $contact['url'];
|
||||
if(! x($datarray,'author-avatar'))
|
||||
if((! x($datarray,'author-avatar')) && ($contact['network'] != NETWORK_DFRN))
|
||||
$datarray['author-avatar'] = $contact['thumb'];
|
||||
}
|
||||
|
||||
if((! x($datarray,'author-name')) || (! x($datarray,'author-link'))) {
|
||||
logger('consume_feed: no author information! ' . print_r($datarray,true));
|
||||
continue;
|
||||
}
|
||||
|
||||
// special handling for events
|
||||
|
||||
if((x($datarray,'object-type')) && ($datarray['object-type'] === ACTIVITY_OBJ_EVENT)) {
|
||||
|
@ -2197,7 +2223,8 @@ function local_delivery($importer,$data) {
|
|||
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
|
||||
? $importer['thumb'] : $datarray['author-avatar']),
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item'
|
||||
'otype' => 'item',
|
||||
'parent' => $parent,
|
||||
|
||||
));
|
||||
|
||||
|
@ -2291,7 +2318,7 @@ function local_delivery($importer,$data) {
|
|||
|
||||
if($datarray['type'] != 'activity') {
|
||||
|
||||
$myconv = q("SELECT `author-link`, `author-avatar` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 ",
|
||||
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 ",
|
||||
dbesc($parent_uri),
|
||||
intval($importer['importer_uid'])
|
||||
);
|
||||
|
@ -2304,6 +2331,8 @@ function local_delivery($importer,$data) {
|
|||
continue;
|
||||
|
||||
require_once('include/enotify.php');
|
||||
|
||||
$conv_parent = $conv['parent'];
|
||||
|
||||
notification(array(
|
||||
'type' => NOTIFY_COMMENT,
|
||||
|
@ -2319,7 +2348,8 @@ function local_delivery($importer,$data) {
|
|||
'source_photo' => ((link_compare($datarray['author-link'],$importer['url']))
|
||||
? $importer['thumb'] : $datarray['author-avatar']),
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item'
|
||||
'otype' => 'item',
|
||||
'parent' => $conv_parent,
|
||||
|
||||
));
|
||||
|
||||
|
|
|
@ -776,3 +776,43 @@ function add_fcontact($arr,$update = false) {
|
|||
|
||||
return $r;
|
||||
}
|
||||
|
||||
|
||||
function scale_external_images($s,$include_link = true) {
|
||||
|
||||
$a = get_app();
|
||||
|
||||
$matches = null;
|
||||
$c = preg_match_all('/\[img\](.*?)\[\/img\]/ism',$s,$matches,PREG_SET_ORDER);
|
||||
if($c) {
|
||||
require_once('include/Photo.php');
|
||||
foreach($matches as $mtch) {
|
||||
logger('scale_external_image: ' . $mtch[1]);
|
||||
$hostname = str_replace('www.','',substr($a->get_baseurl(),strpos($a->get_baseurl(),'://')+3));
|
||||
if(stristr($mtch[1],$hostname))
|
||||
continue;
|
||||
$i = fetch_url($mtch[1]);
|
||||
if($i) {
|
||||
$ph = new Photo($i);
|
||||
if($ph->is_valid()) {
|
||||
$orig_width = $ph->getWidth();
|
||||
$orig_height = $ph->getHeight();
|
||||
|
||||
if($orig_width > 640 || $orig_height > 640) {
|
||||
|
||||
$ph->scaleImage(640);
|
||||
$new_width = $ph->getWidth();
|
||||
$new_height = $ph->getHeight();
|
||||
logger('scale_external_images: ' . $orig_width . '->' . $new_width . 'w ' . $orig_height . '->' . $new_height . 'h' . ' match: ' . $mtch[0], LOGGER_DEBUG);
|
||||
$s = str_replace($mtch[0],'[img=' . $new_width . 'x' . $new_height. ']' . $mtch[1] . '[/img]'
|
||||
. "\n" . (($include_link)
|
||||
? '[url=' . $mtch[1] . ']' . t('view full size') . '[/url]' . "\n"
|
||||
: ''),$s);
|
||||
logger('scale_external_images: new string: ' . $s, LOGGER_DEBUG);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
|
|
@ -383,8 +383,8 @@ function notifier_run($argv, $argc){
|
|||
continue;
|
||||
if($item['id'] == $item_id) {
|
||||
logger('notifier: followup: item: ' . print_r($item,true), LOGGER_DATA);
|
||||
$slap = atom_entry($item,'html',$owner,$owner,false);
|
||||
$atom .= atom_entry($item,'text',$owner,$owner,false);
|
||||
$slap = atom_entry($item,'html',null,$owner,false);
|
||||
$atom .= atom_entry($item,'text',null,$owner,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -411,13 +411,13 @@ function notifier_run($argv, $argc){
|
|||
// older sites without a corresponding dfrn_notify change may do the wrong thing.
|
||||
|
||||
if($item_id == $item['id'] || $item['id'] == $item['parent'])
|
||||
$atom .= atom_entry($item,'text',$contact,$owner,true);
|
||||
$atom .= atom_entry($item,'text',null,$owner,true);
|
||||
}
|
||||
else
|
||||
$atom .= atom_entry($item,'text',$contact,$owner,true);
|
||||
$atom .= atom_entry($item,'text',null,$owner,true);
|
||||
|
||||
if(($top_level) && ($public_message) && ($item['author-link'] === $item['owner-link']) && (! $expire))
|
||||
$slaps[] = atom_entry($item,'html',$contact,$owner,true);
|
||||
$slaps[] = atom_entry($item,'html',null,$owner,true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -166,11 +166,6 @@ function call_hooks($name, &$data = null) {
|
|||
|
||||
if (! function_exists('get_plugin_info')){
|
||||
function get_plugin_info($plugin){
|
||||
if (!is_file("addon/$plugin/$plugin.php")) return false;
|
||||
|
||||
$f = file_get_contents("addon/$plugin/$plugin.php");
|
||||
$r = preg_match("|/\*.*\*/|msU", $f, $m);
|
||||
|
||||
$info=Array(
|
||||
'name' => $plugin,
|
||||
'description' => "",
|
||||
|
@ -178,6 +173,11 @@ function get_plugin_info($plugin){
|
|||
'version' => ""
|
||||
);
|
||||
|
||||
if (!is_file("addon/$plugin/$plugin.php")) return $info;
|
||||
|
||||
$f = file_get_contents("addon/$plugin/$plugin.php");
|
||||
$r = preg_match("|/\*.*\*/|msU", $f, $m);
|
||||
|
||||
if ($r){
|
||||
$ll = explode("\n", $m[0]);
|
||||
foreach( $ll as $l ) {
|
||||
|
@ -205,3 +205,74 @@ function get_plugin_info($plugin){
|
|||
return $info;
|
||||
}}
|
||||
|
||||
|
||||
/*
|
||||
* parse theme comment in search of theme infos.
|
||||
* like
|
||||
*
|
||||
* * Name: My Theme
|
||||
* * Description: My Cool Theme
|
||||
* * Version: 1.2.3
|
||||
* * Author: John <profile url>
|
||||
* * Maintainer: Jane <profile url>
|
||||
* *
|
||||
*/
|
||||
|
||||
if (! function_exists('get_theme_info')){
|
||||
function get_theme_info($theme){
|
||||
$info=Array(
|
||||
'name' => $theme,
|
||||
'description' => "",
|
||||
'author' => array(),
|
||||
'maintainer' => array(),
|
||||
'version' => "",
|
||||
'experimental' => false,
|
||||
'unsupported' => false
|
||||
);
|
||||
|
||||
if(file_exists("view/theme/$theme/experimental"))
|
||||
$info['experimental'] = true;
|
||||
if(file_exists("view/theme/$theme/unsupported"))
|
||||
$info['unsupported'] = true;
|
||||
|
||||
if (!is_file("view/theme/$theme/theme.php")) return $info;
|
||||
|
||||
$f = file_get_contents("view/theme/$theme/theme.php");
|
||||
$r = preg_match("|/\*.*\*/|msU", $f, $m);
|
||||
|
||||
|
||||
if ($r){
|
||||
$ll = explode("\n", $m[0]);
|
||||
foreach( $ll as $l ) {
|
||||
$l = trim($l,"\t\n\r */");
|
||||
if ($l!=""){
|
||||
list($k,$v) = array_map("trim", explode(":",$l,2));
|
||||
$k= strtolower($k);
|
||||
if ($k=="author"){
|
||||
$r=preg_match("|([^<]+)<([^>]+)>|", $v, $m);
|
||||
if ($r) {
|
||||
$info['author'][] = array('name'=>$m[1], 'link'=>$m[2]);
|
||||
} else {
|
||||
$info['author'][] = array('name'=>$v);
|
||||
}
|
||||
}
|
||||
elseif ($k=="maintainer"){
|
||||
$r=preg_match("|([^<]+)<([^>]+)>|", $v, $m);
|
||||
if ($r) {
|
||||
$info['maintainer'][] = array('name'=>$m[1], 'link'=>$m[2]);
|
||||
} else {
|
||||
$info['maintainer'][] = array('name'=>$v);
|
||||
}
|
||||
} else {
|
||||
if (array_key_exists($k,$info)){
|
||||
$info[$k]=$v;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $info;
|
||||
}}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
|
||||
var eNotif = $(data).find('notif')
|
||||
notif = eNotif.attr('count');
|
||||
if (notif>0){
|
||||
if (notif>=0){
|
||||
$("#nav-notifications-linkmenu").addClass("on");
|
||||
nnm = $("#nav-notifications-menu");
|
||||
|
||||
|
@ -124,13 +124,13 @@
|
|||
eNotif.children("note").each(function(){
|
||||
e = $(this);
|
||||
text = e.text().format("<span class='contactname'>"+e.attr('name')+"</span>");
|
||||
html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'));
|
||||
html = notifications_tpl.format(e.attr('href'),e.attr('photo'), text, e.attr('date'), e.attr('seen'));
|
||||
nnm.append(html);
|
||||
});
|
||||
|
||||
} else {
|
||||
$("#nav-notifications-linkmenu").removeClass("on");
|
||||
$("#nav-notifications-menu").html(notifications_empty);
|
||||
// $("#nav-notifications-linkmenu").removeClass("on");
|
||||
// $("#nav-notifications-menu").html(notifications_empty);
|
||||
}
|
||||
if(notif == 0) { notif = ''; $('#notify-update').removeClass('show') } else { $('#notify-update').addClass('show') }
|
||||
$('#notify-update').html(notif);
|
||||
|
|
|
@ -44,9 +44,35 @@
|
|||
_dfrn_html2bbcode : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
function rep(re, str) {
|
||||
s = s.replace(re, str);
|
||||
};
|
||||
function rep(re, str) {
|
||||
|
||||
//modify code to keep stuff intact within [code][/code] blocks
|
||||
//Waitman Gobble NO WARRANTY
|
||||
|
||||
|
||||
var o = new Array();
|
||||
var x = s.split("[code]");
|
||||
var i = 0;
|
||||
|
||||
var si = "";
|
||||
si = x.shift();
|
||||
si = si.replace(re,str);
|
||||
o.push(si);
|
||||
|
||||
for (i = 0; i < x.length; i++) {
|
||||
var no = new Array();
|
||||
var j = x.shift();
|
||||
var g = j.split("[/code]");
|
||||
no.push(g.shift());
|
||||
si = g.shift();
|
||||
si = si.replace(re,str);
|
||||
no.push(si);
|
||||
o.push(no.join("[/code]"));
|
||||
}
|
||||
|
||||
s = o.join("[code]");
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
@ -123,11 +149,42 @@
|
|||
// BBCode -> HTML from DFRN dialect
|
||||
_dfrn_bbcode2html : function(s) {
|
||||
s = tinymce.trim(s);
|
||||
|
||||
function rep(re, str) {
|
||||
s = s.replace(re, str);
|
||||
};
|
||||
|
||||
|
||||
|
||||
function rep(re, str) {
|
||||
|
||||
//modify code to keep stuff intact within [code][/code] blocks
|
||||
//Waitman Gobble NO WARRANTY
|
||||
|
||||
|
||||
var o = new Array();
|
||||
var x = s.split("[code]");
|
||||
var i = 0;
|
||||
|
||||
var si = "";
|
||||
si = x.shift();
|
||||
si = si.replace(re,str);
|
||||
o.push(si);
|
||||
|
||||
for (i = 0; i < x.length; i++) {
|
||||
var no = new Array();
|
||||
var j = x.shift();
|
||||
var g = j.split("[/code]");
|
||||
no.push(g.shift());
|
||||
si = g.shift();
|
||||
si = si.replace(re,str);
|
||||
no.push(si);
|
||||
o.push(no.join("[/code]"));
|
||||
}
|
||||
|
||||
s = o.join("[code]");
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// example: [b] to <strong>
|
||||
rep(/\n/gi,"<br />");
|
||||
rep(/\[b\]/gi,"<strong>");
|
||||
|
|
181
mod/admin.php
181
mod/admin.php
|
@ -6,14 +6,19 @@
|
|||
require_once("include/remoteupdate.php");
|
||||
|
||||
function admin_post(&$a){
|
||||
|
||||
|
||||
if(!is_site_admin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// do not allow a page manager to access the admin panel at all.
|
||||
|
||||
if(x($_SESSION,'submanage') && intval($_SESSION['submanage']))
|
||||
return;
|
||||
|
||||
|
||||
|
||||
// urls
|
||||
if ($a->argc > 1){
|
||||
switch ($a->argv[1]){
|
||||
|
@ -66,6 +71,7 @@ function admin_content(&$a) {
|
|||
'site' => Array($a->get_baseurl()."/admin/site/", t("Site") , "site"),
|
||||
'users' => Array($a->get_baseurl()."/admin/users/", t("Users") , "users"),
|
||||
'plugins'=> Array($a->get_baseurl()."/admin/plugins/", t("Plugins") , "plugins"),
|
||||
'themes' => Array($a->get_baseurl()."/admin/themes/", t("Themes") , "themes"),
|
||||
'update' => Array($a->get_baseurl()."/admin/update/", t("Update") , "update")
|
||||
);
|
||||
|
||||
|
@ -108,6 +114,9 @@ function admin_content(&$a) {
|
|||
case 'plugins':
|
||||
$o = admin_page_plugins($a);
|
||||
break;
|
||||
case 'themes':
|
||||
$o = admin_page_themes($a);
|
||||
break;
|
||||
case 'logs':
|
||||
$o = admin_page_logs($a);
|
||||
break;
|
||||
|
@ -564,7 +573,7 @@ function admin_page_plugins(&$a){
|
|||
'$info' => get_plugin_info($plugin),
|
||||
|
||||
'$admin_form' => $admin_form,
|
||||
|
||||
'$function' => 'plugins',
|
||||
'$readme' => $readme
|
||||
));
|
||||
}
|
||||
|
@ -593,11 +602,179 @@ function admin_page_plugins(&$a){
|
|||
'$page' => t('Plugins'),
|
||||
'$submit' => t('Submit'),
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
|
||||
'$function' => 'plugins',
|
||||
'$plugins' => $plugins
|
||||
));
|
||||
}
|
||||
|
||||
function toggle_theme(&$themes,$th,&$result) {
|
||||
for($x = 0; $x < count($themes); $x ++) {
|
||||
if($themes[$x]['name'] === $th) {
|
||||
if($themes[$x]['allowed']) {
|
||||
$themes[$x]['allowed'] = 0;
|
||||
$result = 0;
|
||||
}
|
||||
else {
|
||||
$themes[$x]['allowed'] = 1;
|
||||
$result = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function theme_status($themes,$th) {
|
||||
for($x = 0; $x < count($themes); $x ++) {
|
||||
if($themes[$x]['name'] === $th) {
|
||||
if($themes[$x]['allowed']) {
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function rebuild_theme_table($themes) {
|
||||
$o = '';
|
||||
if(count($themes)) {
|
||||
foreach($themes as $th) {
|
||||
if($th['allowed']) {
|
||||
if(strlen($o))
|
||||
$o .= ',';
|
||||
$o .= $th['name'];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $o;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Themes admin page
|
||||
*/
|
||||
|
||||
function admin_page_themes(&$a){
|
||||
|
||||
$allowed_themes_str = get_config('system','allowed_themes');
|
||||
$allowed_themes_raw = explode(',',$allowed_themes_str);
|
||||
$allowed_themes = array();
|
||||
if(count($allowed_themes_raw))
|
||||
foreach($allowed_themes_raw as $x)
|
||||
if(strlen(trim($x)))
|
||||
$allowed_themes[] = trim($x);
|
||||
|
||||
$themes = array();
|
||||
$files = glob('view/theme/*');
|
||||
if($files) {
|
||||
foreach($files as $file) {
|
||||
$f = basename($file);
|
||||
$is_experimental = intval(file_exists($file . '/experimental'));
|
||||
$is_unsupported = 1-(intval(file_exists($file . '/unsupported')));
|
||||
$is_allowed = intval(in_array($f,$allowed_themes));
|
||||
$themes[] = array('name' => $f, 'experimental' => $is_experimental, 'supported' => $is_supported, 'allowed' => $is_allowed);
|
||||
}
|
||||
}
|
||||
|
||||
if(! count($themes)) {
|
||||
notice( t('No themes found.'));
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Single theme
|
||||
*/
|
||||
|
||||
if ($a->argc == 3){
|
||||
$theme = $a->argv[2];
|
||||
if(! is_dir("view/theme/$theme")){
|
||||
notice( t("Item not found.") );
|
||||
return;
|
||||
}
|
||||
|
||||
if (x($_GET,"a") && $_GET['a']=="t"){
|
||||
|
||||
// Toggle theme status
|
||||
|
||||
toggle_theme($themes,$theme,$result);
|
||||
$s = rebuild_theme_table($themes);
|
||||
if($result)
|
||||
info( sprintf('Theme %s enabled.',$theme));
|
||||
else
|
||||
info( sprintf('Theme %s disabled.',$theme));
|
||||
|
||||
set_config('system','allowed_themes',$s);
|
||||
goaway($a->get_baseurl() . '/admin/themes' );
|
||||
return; // NOTREACHED
|
||||
}
|
||||
|
||||
// display theme details
|
||||
require_once('library/markdown.php');
|
||||
|
||||
if (theme_status($themes,$theme)) {
|
||||
$status="on"; $action= t("Disable");
|
||||
} else {
|
||||
$status="off"; $action= t("Enable");
|
||||
}
|
||||
|
||||
$readme=Null;
|
||||
if (is_file("view/$theme/README.md")){
|
||||
$readme = file_get_contents("view/$theme/README.md");
|
||||
$readme = Markdown($readme);
|
||||
} else if (is_file("view/$theme/README")){
|
||||
$readme = "<pre>". file_get_contents("view/$theme/README") ."</pre>";
|
||||
}
|
||||
|
||||
$admin_form="";
|
||||
|
||||
$t = get_markup_template("admin_plugins_details.tpl");
|
||||
return replace_macros($t, array(
|
||||
'$title' => t('Administration'),
|
||||
'$page' => t('Themes'),
|
||||
'$toggle' => t('Toggle'),
|
||||
'$settings' => t('Settings'),
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
|
||||
'$plugin' => $theme,
|
||||
'$status' => $status,
|
||||
'$action' => $action,
|
||||
'$info' => get_theme_info($theme),
|
||||
'$function' => 'themes',
|
||||
'$admin_form' => $admin_form,
|
||||
|
||||
'$readme' => $readme
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* List plugins
|
||||
*/
|
||||
|
||||
$xthemes = array();
|
||||
if($themes) {
|
||||
foreach($themes as $th) {
|
||||
$xthemes[] = array($th['name'],(($th['allowed']) ? "on" : "off"), get_theme_info($th['name']));
|
||||
}
|
||||
}
|
||||
|
||||
$t = get_markup_template("admin_plugins.tpl");
|
||||
return replace_macros($t, array(
|
||||
'$title' => t('Administration'),
|
||||
'$page' => t('Themes'),
|
||||
'$submit' => t('Submit'),
|
||||
'$baseurl' => $a->get_baseurl(),
|
||||
'$function' => 'themes',
|
||||
'$plugins' => $xthemes,
|
||||
'$experimental' => t('[Experimental]'),
|
||||
'$unsupported' => t('[Unsupported]')
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Logs admin page
|
||||
|
|
|
@ -49,6 +49,11 @@ function follow_init(&$a) {
|
|||
goaway($_SESSION['return_url']);
|
||||
}
|
||||
}
|
||||
|
||||
// This just confuses things, remove it
|
||||
if($ret['network'] === NETWORK_DIASPORA)
|
||||
$ret['url'] = str_replace('?absolute=true','',$ret['url']);
|
||||
|
||||
|
||||
// do we have enough information?
|
||||
|
||||
|
|
|
@ -400,6 +400,8 @@ function item_post(&$a) {
|
|||
|
||||
$body = preg_replace('/\[\/code\]\s*\[code\]/ism',"\n",$body);
|
||||
|
||||
$body = scale_external_images($body,false);
|
||||
|
||||
/**
|
||||
* Look for any tags and linkify them
|
||||
*/
|
||||
|
@ -753,7 +755,8 @@ function item_post(&$a) {
|
|||
'source_link' => $datarray['author-link'],
|
||||
'source_photo' => $datarray['author-avatar'],
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item'
|
||||
'otype' => 'item',
|
||||
'parent' => $parent,
|
||||
));
|
||||
|
||||
}
|
||||
|
|
|
@ -295,7 +295,7 @@ function notifications_content(&$a) {
|
|||
}
|
||||
|
||||
$o .= replace_macros($notif_tpl,array(
|
||||
'$notif_header' => t('Notifications'),
|
||||
'$notif_header' => t('Network Notifications'),
|
||||
'$tabs' => $tabs,
|
||||
'$notif_content' => $notif_content,
|
||||
));
|
||||
|
@ -325,7 +325,7 @@ function notifications_content(&$a) {
|
|||
}
|
||||
|
||||
$o .= replace_macros($notif_tpl,array(
|
||||
'$notif_header' => t('System'),
|
||||
'$notif_header' => t('System Notifications'),
|
||||
'$tabs' => $tabs,
|
||||
'$notif_content' => $notif_content,
|
||||
));
|
||||
|
@ -420,7 +420,7 @@ function notifications_content(&$a) {
|
|||
}
|
||||
|
||||
$o .= replace_macros($notif_tpl,array(
|
||||
'$notif_header' => t('Notifications'),
|
||||
'$notif_header' => t('Personal Notifications'),
|
||||
'$tabs' => $tabs,
|
||||
'$notif_content' => $notif_content,
|
||||
));
|
||||
|
@ -501,7 +501,7 @@ function notifications_content(&$a) {
|
|||
}
|
||||
|
||||
$o .= replace_macros($notif_tpl,array(
|
||||
'$notif_header' => t('Notifications'),
|
||||
'$notif_header' => t('Home Notifications'),
|
||||
'$tabs' => $tabs,
|
||||
'$notif_content' => $notif_content,
|
||||
));
|
||||
|
|
|
@ -36,4 +36,36 @@ function notify_init(&$a) {
|
|||
function notify_content(&$a) {
|
||||
if(! local_user())
|
||||
return login();
|
||||
|
||||
$notif_tpl = get_markup_template('notifications.tpl');
|
||||
|
||||
$not_tpl = get_markup_template('notify.tpl');
|
||||
require_once('include/bbcode.php');
|
||||
|
||||
$r = q("SELECT * from notify where uid = %d and seen = 0 order by date desc",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
if (count($r) > 0) {
|
||||
foreach ($r as $it) {
|
||||
$notif_content .= replace_macros($not_tpl,array(
|
||||
'$item_link' => $a->get_baseurl().'/notify/view/'. $it['id'],
|
||||
'$item_image' => $it['photo'],
|
||||
'$item_text' => strip_tags(bbcode($it['msg'])),
|
||||
'$item_when' => relative_date($it['date'])
|
||||
));
|
||||
}
|
||||
} else {
|
||||
$notif_content .= t('No more system notifications.');
|
||||
}
|
||||
|
||||
$o .= replace_macros($notif_tpl,array(
|
||||
'$notif_header' => t('System Notifications'),
|
||||
'$tabs' => '', // $tabs,
|
||||
'$notif_content' => $notif_content,
|
||||
));
|
||||
|
||||
return $o;
|
||||
|
||||
|
||||
}
|
267
mod/ping.php
267
mod/ping.php
|
@ -12,13 +12,14 @@ function ping_init(&$a) {
|
|||
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
|
||||
if(local_user()){
|
||||
|
||||
$z = q("select * from notify where seen = 0 and uid = %d
|
||||
order by date desc",
|
||||
$firehose = intval(get_pconfig(local_user(),'system','notify_full'));
|
||||
|
||||
$z = q("select * from notify where uid = %d
|
||||
order by seen asc, date desc limit 0, 50",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
|
||||
|
||||
$tags = array();
|
||||
$comments = array();
|
||||
$likes = array();
|
||||
|
@ -32,72 +33,48 @@ function ping_init(&$a) {
|
|||
`pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink`
|
||||
FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent`
|
||||
WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
|
||||
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0
|
||||
`item`.`deleted` = 0 AND `item`.`uid` = %d
|
||||
ORDER BY `item`.`created` DESC",
|
||||
intval(local_user())
|
||||
);
|
||||
|
||||
$network = count($r);
|
||||
foreach ($r as $it) {
|
||||
switch($it['verb']){
|
||||
case ACTIVITY_TAG:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['tname'] = $obj->content;
|
||||
$tags[] = $it;
|
||||
break;
|
||||
case ACTIVITY_LIKE:
|
||||
$likes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_DISLIKE:
|
||||
$dislikes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_FRIEND:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['fname'] = $obj->title;
|
||||
$friends[] = $it;
|
||||
break;
|
||||
default:
|
||||
if ($it['parent']!=$it['id']) {
|
||||
$comments[] = $it;
|
||||
} else {
|
||||
$posts[] = $it;
|
||||
}
|
||||
|
||||
if(count($r)) {
|
||||
|
||||
foreach ($r as $it) {
|
||||
|
||||
if($it['wall'])
|
||||
$home ++;
|
||||
else
|
||||
$network ++;
|
||||
|
||||
switch($it['verb']){
|
||||
case ACTIVITY_TAG:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['tname'] = $obj->content;
|
||||
$tags[] = $it;
|
||||
break;
|
||||
case ACTIVITY_LIKE:
|
||||
$likes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_DISLIKE:
|
||||
$dislikes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_FRIEND:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['fname'] = $obj->title;
|
||||
$friends[] = $it;
|
||||
break;
|
||||
default:
|
||||
if ($it['parent']!=$it['id']) {
|
||||
$comments[] = $it;
|
||||
} else {
|
||||
if(! $it['wall'])
|
||||
$posts[] = $it;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`,
|
||||
`item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`,
|
||||
`pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink`
|
||||
FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent`
|
||||
WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
|
||||
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 1",
|
||||
intval(local_user())
|
||||
);
|
||||
$home = count($r);
|
||||
foreach ($r as $it) {
|
||||
switch($it['verb']){
|
||||
case ACTIVITY_TAG:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['tname'] = $obj->content;
|
||||
$tags[] = $it;
|
||||
break;
|
||||
case ACTIVITY_LIKE:
|
||||
$likes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_DISLIKE:
|
||||
$dislikes[] = $it;
|
||||
break;
|
||||
case ACTIVITY_FRIEND:
|
||||
$obj = parse_xml_string($xmlhead.$it['object']);
|
||||
$it['fname'] = $obj->title;
|
||||
$friends[] = $it;
|
||||
break;
|
||||
default:
|
||||
if ($it['parent']!=$it['id']) $comments[] = $it;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`,
|
||||
`fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo`
|
||||
FROM `intro` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
|
||||
|
@ -122,24 +99,25 @@ function ping_init(&$a) {
|
|||
intval(local_user()),
|
||||
dbesc($myurl)
|
||||
);
|
||||
$mail = $mails[0]['total'];
|
||||
if($mails)
|
||||
$mail = $mails[0]['total'];
|
||||
|
||||
if ($a->config['register_policy'] == REGISTER_APPROVE && is_site_admin()){
|
||||
$regs = q("SELECT `contact`.`name`, `contact`.`url`, `contact`.`micro`, `register`.`created`, COUNT(*) as `total` FROM `contact` RIGHT JOIN `register` ON `register`.`uid`=`contact`.`uid` WHERE `contact`.`self`=1");
|
||||
$register = $regs[0]['total'];
|
||||
if($regs)
|
||||
$register = $regs[0]['total'];
|
||||
} else {
|
||||
$register = "0";
|
||||
}
|
||||
|
||||
|
||||
function xmlize($href, $name, $url, $photo, $date, $message){
|
||||
$notsxml = '<note href="%s" name="%s" url="%s" photo="%s" date="%s">%s</note>';
|
||||
function xmlize($href, $name, $url, $photo, $date, $seen, $message){
|
||||
$notsxml = '<note href="%s" name="%s" url="%s" photo="%s" date="%s" seen="%s" >%s</note>';
|
||||
return sprintf ( $notsxml,
|
||||
xmlify($href), xmlify($name), xmlify($url), xmlify($photo), xmlify($date), xmlify($message)
|
||||
);
|
||||
xmlify($href), xmlify($name), xmlify($url), xmlify($photo), xmlify($date), xmlify($seen), xmlify($message)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
echo "<intro>$intro</intro>
|
||||
<mail>$mail</mail>
|
||||
<net>$network</net>
|
||||
|
@ -147,95 +125,100 @@ function ping_init(&$a) {
|
|||
if ($register!=0) echo "<register>$register</register>";
|
||||
|
||||
$tot = $mail+$intro+$register+count($comments)+count($likes)+count($dislikes)+count($friends)+count($posts)+count($tags);
|
||||
|
||||
echo ' <notif count="'.$tot.'">';
|
||||
|
||||
require_once('include/bbcode.php');
|
||||
$sysnotify = 0;
|
||||
|
||||
if(count($z)) {
|
||||
foreach($z as $zz) {
|
||||
echo xmlize($a->get_baseurl() . '/notify/' . $zz['id'], $zz['name'],$zz['url'],$zz['photo'],relative_date($zz['date']), bbcode($zz['msg']));
|
||||
if($firehose) {
|
||||
echo ' <notif count="'.$tot.'">';
|
||||
}
|
||||
else {
|
||||
if(count($z)) {
|
||||
foreach($z as $zz) {
|
||||
if($zz['seen'] == 0)
|
||||
$sysnotify ++;
|
||||
}
|
||||
}
|
||||
|
||||
echo ' <notif count="'. $sysnotify .'">';
|
||||
if(count($z)) {
|
||||
foreach($z as $zz) {
|
||||
echo xmlize($a->get_baseurl() . '/notify/view/' . $zz['id'], $zz['name'],$zz['url'],$zz['photo'],relative_date($zz['date']), ($zz['seen'] ? 'notify-seen' : 'notify-unseen'), ($zz['seen'] ? '' : '→ ') .strip_tags(bbcode($zz['msg'])));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||