Merge branch 'friendika-master'
This commit is contained in:
commit
0bec0fc5fb
17
INSTALL.txt
17
INSTALL.txt
|
@ -29,7 +29,7 @@ php.ini file
|
|||
- Mysql 5.x
|
||||
|
||||
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
|
||||
(Windows)
|
||||
(Windows) [Note: other options are presented in Section 7 of this document]
|
||||
|
||||
- Installation into a top-level domain or sub-domain (without a
|
||||
directory/path component in the URL) is preferred. Directory paths will
|
||||
|
@ -89,3 +89,18 @@ You can generally find the location of PHP by executing "which php". If you
|
|||
have troubles with this section please contact your hosting provider for
|
||||
assistance. Friendika will not work correctly if you cannot perform this step.
|
||||
|
||||
Alternative: You may be able to use the 'poormancron' plugin to perform this
|
||||
step if you are using a recent Friendika release. To do this, edit the file
|
||||
".htconfig.php" and look for a line describing your plugins. On a fresh
|
||||
installation, it will look like
|
||||
|
||||
$a->config['system']['addon'] = 'js_upload';
|
||||
|
||||
This indicates the "js_upload" addon module is enabled. You may add additional
|
||||
addons/plugins using this same line in the configuration file. Change it to
|
||||
read
|
||||
|
||||
$a->config['system']['addon'] = 'js_upload,poormancron';
|
||||
|
||||
and save your changes.
|
||||
|
||||
|
|
|
@ -10,13 +10,11 @@
|
|||
function oembed_install() {
|
||||
register_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool');
|
||||
register_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header');
|
||||
register_hook('bbcode', 'addon/oembed/oembed.php', 'oembed_hook_bbcode');
|
||||
}
|
||||
|
||||
function oembed_uninstall() {
|
||||
unregister_hook('jot_tool', 'addon/oembed/oembed.php', 'oembed_hook_jot_tool');
|
||||
unregister_hook('page_header', 'addon/oembed/oembed.php', 'oembed_hook_page_header');
|
||||
unregister_hook('bbcode', 'addon/oembed/oembed.php', 'oembed_hook_bbcode');
|
||||
}
|
||||
|
||||
function oembed_hook_page_header($a, &$b){
|
||||
|
@ -53,49 +51,7 @@ function oembed_hook_jot_tool($a, &$b) {
|
|||
';
|
||||
}
|
||||
|
||||
function oembed_replacecb($matches){
|
||||
$embedurl=$matches[1];
|
||||
$ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl);
|
||||
$txt = fetch_url($ourl);
|
||||
$j = json_decode($txt);
|
||||
$ret="<!-- oembed $embedurl -->";
|
||||
switch ($j->type) {
|
||||
case "video": {
|
||||
if (isset($j->thumbnail_url)) {
|
||||
$tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200;
|
||||
$th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180;
|
||||
$ret = "<a href='#' onclick='this.innerHTML=unescape(\"".urlencode($j->html)."\").replace(/\+/g,\" \"); return false;' >";
|
||||
$ret.= "<img width='$tw' height='$th' src='".$j->thumbnail_url."'>";
|
||||
$ret.= "</a>";
|
||||
} else {
|
||||
$ret=$j->html;
|
||||
}
|
||||
$ret.="<br>";
|
||||
}; break;
|
||||
case "photo": {
|
||||
$ret = "<img width='".$j->width."' height='".$j->height."' src='".$j->url."'>";
|
||||
$ret.="<br>";
|
||||
}; break;
|
||||
case "link": {
|
||||
//$ret = "<a href='".$embedurl."'>".$j->title."</a>";
|
||||
}; break;
|
||||
case "rich": {
|
||||
// not so safe..
|
||||
$ret = "<blockquote>".$j->html."</blockquote>";
|
||||
}; break;
|
||||
}
|
||||
|
||||
$embedlink = (isset($j->title))?$j->title:$embedurl;
|
||||
$ret .= "<a href='$embedurl'>$embedlink</a>";
|
||||
if (isset($j->author_name)) $ret.=" by ".$j->author_name;
|
||||
if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;
|
||||
$ret.="<!-- /oembed $embedurl -->";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function oembed_hook_bbcode($a, &$text){
|
||||
$text = preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text);
|
||||
}
|
||||
|
||||
|
||||
?>
|
25
boot.php
25
boot.php
|
@ -2,7 +2,7 @@
|
|||
|
||||
set_time_limit(0);
|
||||
|
||||
define ( 'BUILD_ID', 1033 );
|
||||
define ( 'BUILD_ID', 1034 );
|
||||
define ( 'FRIENDIKA_VERSION', '2.10.0902' );
|
||||
define ( 'DFRN_PROTOCOL_VERSION', '2.0' );
|
||||
|
||||
|
@ -10,6 +10,16 @@ define ( 'EOL', "<br />\r\n" );
|
|||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||
define ( 'DOWN_ARROW', '⇩' );
|
||||
|
||||
|
||||
/**
|
||||
* SSL redirection policies
|
||||
*/
|
||||
|
||||
define ( 'SSL_POLICY_NONE', 0 );
|
||||
define ( 'SSL_POLICY_FULL', 1 );
|
||||
define ( 'SSL_POLICY_SELFSIGN', 2 );
|
||||
|
||||
|
||||
/**
|
||||
* log levels
|
||||
*/
|
||||
|
@ -270,10 +280,17 @@ class App {
|
|||
}
|
||||
|
||||
function get_baseurl($ssl = false) {
|
||||
if(strlen($this->baseurl))
|
||||
return $this->baseurl;
|
||||
|
||||
$this->baseurl = (($ssl) ? 'https' : $this->scheme) . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
|
||||
$scheme = $this->scheme;
|
||||
|
||||
if(x($this->config,'ssl_policy')) {
|
||||
if(($ssl) || ($this->config['ssl_policy'] == SSL_POLICY_FULL))
|
||||
$scheme = 'https';
|
||||
if(($this->config['ssl_policy'] == SSL_POLICY_SELFSIGN) && (local_user() || x($_POST,'auth-params')))
|
||||
$scheme = 'https';
|
||||
}
|
||||
|
||||
$this->baseurl = $scheme . "://" . $this->hostname . ((isset($this->path) && strlen($this->path)) ? '/' . $this->path : '' );
|
||||
return $this->baseurl;
|
||||
}
|
||||
|
||||
|
|
|
@ -471,4 +471,8 @@ CREATE TABLE IF NOT EXISTS `event` (
|
|||
`deny_gid` MEDIUMTEXT NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS 'cache' (
|
||||
`k` CHAR( 255 ) NOT NULL PRIMARY KEY ,
|
||||
`v` TEXT NOT NULL,
|
||||
`updated` DATETIME NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||
|
|
|
@ -72,4 +72,7 @@ $a->config['system']['rino_encrypt'] = true;
|
|||
$a->config['system']['addon'] = 'js_upload';
|
||||
|
||||
|
||||
|
||||
// Disable oembed embedding
|
||||
// This disable the conversion of [embed]$url[/embed] tag in html
|
||||
// $a->config['system']['no_oembed'] = true;
|
||||
|
||||
|
|
|
@ -17,8 +17,9 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
|||
$selected = " selected=\"selected\" ";
|
||||
else
|
||||
$selected = '';
|
||||
$trimmed = substr($rr['name'],0,12);
|
||||
|
||||
$o .= "<option value=\"{$rr['id']}\" $selected >{$rr['name']}</option>\r\n";
|
||||
$o .= "<option value=\"{$rr['id']}\" $selected title=\"{$rr['name']}\" >$trimmed</option>\r\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -30,7 +31,7 @@ function group_select($selname,$selclass,$preselected = false,$size = 4) {
|
|||
|
||||
|
||||
|
||||
function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false) {
|
||||
function contact_select($selname, $selclass, $preselected = false, $size = 4, $privmail = false, $celeb = false, $privatenet = false) {
|
||||
|
||||
$o = '';
|
||||
|
||||
|
@ -43,6 +44,10 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
|
|||
$sql_extra .= sprintf(" AND `rel` = %d ", intval(REL_BUD));
|
||||
}
|
||||
|
||||
if($privmail || $privatenet) {
|
||||
$sql_extra .= " AND `network` IN ( 'dfrn' ) ";
|
||||
}
|
||||
|
||||
if($privmail)
|
||||
$o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" >\r\n";
|
||||
else
|
||||
|
@ -61,11 +66,10 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
|
|||
$selected = " selected=\"selected\" ";
|
||||
else
|
||||
$selected = '';
|
||||
if(($privmail) && ($rr['network'] === 'stat'))
|
||||
$disabled = ' disabled="true" ' ;
|
||||
else
|
||||
$disabled = '';
|
||||
$o .= "<option value=\"{$rr['id']}\" $selected $disabled title=\"{$rr['url']}\" >{$rr['name']}</option>\r\n";
|
||||
|
||||
$trimmed = substr($rr['name'],0,22);
|
||||
|
||||
$o .= "<option value=\"{$rr['id']}\" $selected title=\"{$rr['name']}|{$rr['url']}\" >$trimmed</option>\r\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -110,7 +114,7 @@ function populate_acl($user = null,$celeb = false) {
|
|||
$o .= '</div>';
|
||||
$o .= '<div id="contact_allow_wrapper">';
|
||||
$o .= '<label id="acl-allow-contact-label" for="contact_allow" >' . t('Contacts') . '</label>';
|
||||
$o .= contact_select('contact_allow','contact_allow',$allow_cid,4,false,$celeb);
|
||||
$o .= contact_select('contact_allow','contact_allow',$allow_cid,4,false,$celeb,true);
|
||||
$o .= '</div>';
|
||||
$o .= '</div>' . "\r\n";
|
||||
$o .= '<div id="acl-allow-end"></div>' . "\r\n";
|
||||
|
@ -125,7 +129,7 @@ function populate_acl($user = null,$celeb = false) {
|
|||
$o .= '</div>';
|
||||
$o .= '<div id="contact_deny_wrapper" >';
|
||||
$o .= '<label id="acl-deny-contact-label" for="contact_deny" >' . t('Contacts') . '</label>';
|
||||
$o .= contact_select('contact_deny','contact_deny', $deny_cid,4,false, $celeb);
|
||||
$o .= contact_select('contact_deny','contact_deny', $deny_cid,4,false, $celeb,true);
|
||||
$o .= '</div>';
|
||||
$o .= '</div>' . "\r\n";
|
||||
$o .= '<div id="acl-deny-end"></div>' . "\r\n";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
|
||||
require_once("include/oembed.php");
|
||||
// BBcode 2 HTML was written by WAY2WEB.net
|
||||
// extended to work with Mistpark/Friendika - Mike Macgirvin
|
||||
|
||||
|
@ -93,6 +93,9 @@ function bbcode($Text) {
|
|||
$Text = preg_replace("/\[youtube\]http:\/\/www.youtube.com\/watch\?v\=(.+?)\[\/youtube\]/",'[youtube]$1[/youtube]',$Text);
|
||||
$Text = preg_replace("/\[youtube\](.+?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text);
|
||||
|
||||
// oembed tag
|
||||
$Text = oembed_bbcode2html($Text);
|
||||
|
||||
call_hooks('bbcode',$Text);
|
||||
|
||||
return $Text;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<?php
|
||||
|
||||
require_once('bbcode.php');
|
||||
require_once('oembed.php');
|
||||
|
||||
function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) {
|
||||
|
||||
|
@ -395,6 +396,8 @@ function get_atom_elements($feed,$item) {
|
|||
$res['body'] = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s',
|
||||
'[youtube]$1[/youtube]', $res['body']);
|
||||
|
||||
$res['body'] = oembed_html2bbcode($res['body']);
|
||||
|
||||
$config = HTMLPurifier_Config::createDefault();
|
||||
$config->set('Cache.DefinitionImpl', null);
|
||||
|
||||
|
@ -903,6 +906,10 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0) {
|
|||
$feed->enable_order_by_date(false);
|
||||
$feed->init();
|
||||
|
||||
if($feed->error())
|
||||
logger('consume_feed: Error parsing XML: ' . $feed->error());
|
||||
|
||||
|
||||
// Check at the feed level for updated contact name and/or photo
|
||||
|
||||
$name_updated = '';
|
||||
|
|
|
@ -44,12 +44,14 @@
|
|||
$('#pause').html('');
|
||||
}
|
||||
}
|
||||
if(event.keyCode == '36' && event.shiftKey == true) {
|
||||
if(homebase !== undefined) {
|
||||
event.preventDefault();
|
||||
document.location = homebase;
|
||||
}
|
||||
}
|
||||
// this is shift-home on FF, but $ on IE, disabling until I figure out why the diff.
|
||||
// update: incompatible usage of onKeyDown vs onKeyPress
|
||||
// if(event.keyCode == '36' && event.shiftKey == true) {
|
||||
// if(homebase !== undefined) {
|
||||
// event.preventDefault();
|
||||
// document.location = homebase;
|
||||
// }
|
||||
// }
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -255,7 +255,7 @@ function notifier_run($argv, $argc){
|
|||
$recip_str = implode(', ', $recipients);
|
||||
|
||||
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 ",
|
||||
$r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) AND `blocked` = 0 AND `pending` = 0 ",
|
||||
dbesc($recip_str)
|
||||
);
|
||||
if(! count($r)){
|
||||
|
@ -363,13 +363,61 @@ function notifier_run($argv, $argc){
|
|||
continue;
|
||||
$params = 'hub.mode=publish&hub.url=' . urlencode($a->get_baseurl() . '/dfrn_poll/' . $owner['nickname'] );
|
||||
post_url($h,$params);
|
||||
logger('pubsub: publish: ' . $h . ' returned ' . $a->get_curl_code());
|
||||
logger('pubsub: publish: ' . $h . ' ' . $params . ' returned ' . $a->get_curl_code());
|
||||
if(count($hubs) > 1)
|
||||
sleep(7); // try and avoid multiple hubs responding at precisely the same time
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($notify_hub) {
|
||||
|
||||
/**
|
||||
*
|
||||
* If you have less than 150 dfrn friends and it's a public message,
|
||||
* we'll just go ahead and push them out securely with dfrn/rino.
|
||||
* If you've got more than that, you'll have to rely on PuSH delivery.
|
||||
*
|
||||
*/
|
||||
|
||||
$max_allowed = ((get_config('system','maxpubdeliver') === false) ? 150 : intval(get_config('system','maxdeliver')));
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* Only get the bare essentials and go back for the full record.
|
||||
* If you've got a lot of friends and we grab all the details at once it could exhaust memory.
|
||||
*
|
||||
*/
|
||||
|
||||
$r = q("SELECT `id`, `name` FROM `contact`
|
||||
WHERE `network` = 'dfrn' AND `uid` = %d AND `blocked` = 0 AND `pending` = 0
|
||||
AND `rel` != %d ",
|
||||
intval($owner['uid']),
|
||||
intval(REL_FAN)
|
||||
);
|
||||
|
||||
if((count($r)) && ($max_allowed < count($r))) {
|
||||
foreach($r as $rr) {
|
||||
|
||||
/* Don't deliver to folks who have already been delivered to */
|
||||
|
||||
if(! in_array($rr['id'], $conversants)) {
|
||||
$n = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
|
||||
intval($rr['id'])
|
||||
);
|
||||
if(count($n)) {
|
||||
|
||||
logger('notifier: dfrnpubdelivery: ' . $n[0]['name']);
|
||||
$deliver_status = dfrn_deliver($owner,$n[0],$atom);
|
||||
}
|
||||
}
|
||||
else
|
||||
logger('notifier: dfrnpubdelivery: ignoring ' . $rr['name']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
97
include/oembed.php
Normal file
97
include/oembed.php
Normal file
|
@ -0,0 +1,97 @@
|
|||
<?php
|
||||
function oembed_replacecb($matches){
|
||||
$embedurl=$matches[1];
|
||||
|
||||
$r = q("SELECT v FROM `cache` WHERE k='%s'",
|
||||
dbesc($embedurl));
|
||||
if(count($r)){
|
||||
$txt = $r[0]['v'];
|
||||
} else {
|
||||
$ourl = "http://oohembed.com/oohembed/?url=".urlencode($embedurl);
|
||||
$txt = fetch_url($ourl);
|
||||
//save in cache
|
||||
q("INSERT INTO `cache` VALUES ('%s','%s','%s')",
|
||||
dbesc($embedurl),
|
||||
dbesc($txt),
|
||||
dbesc(datetime_convert()));
|
||||
}
|
||||
$j = json_decode($txt);
|
||||
$ret="<span class='oembed'>";
|
||||
switch ($j->type) {
|
||||
case "video": {
|
||||
if (isset($j->thumbnail_url)) {
|
||||
$tw = (isset($j->thumbnail_width)) ? $j->thumbnail_width:200;
|
||||
$th = (isset($j->thumbnail_height)) ? $j->thumbnail_height:180;
|
||||
$ret = "<a href='".$embedurl."' onclick='this.innerHTML=unescape(\"".urlencode($j->html)."\").replace(/\+/g,\" \"); return false;' >";
|
||||
$ret.= "<img width='$tw' height='$th' src='".$j->thumbnail_url."'>";
|
||||
$ret.= "</a>";
|
||||
} else {
|
||||
$ret=$j->html;
|
||||
}
|
||||
$ret.="<br>";
|
||||
}; break;
|
||||
case "photo": {
|
||||
$ret = "<img width='".$j->width."' height='".$j->height."' src='".$j->url."'>";
|
||||
$ret.="<br>";
|
||||
}; break;
|
||||
case "link": {
|
||||
//$ret = "<a href='".$embedurl."'>".$j->title."</a>";
|
||||
}; break;
|
||||
case "rich": {
|
||||
// not so safe..
|
||||
$ret = "<blockquote>".$j->html."</blockquote>";
|
||||
}; break;
|
||||
}
|
||||
|
||||
$embedlink = (isset($j->title))?$j->title:$embedurl;
|
||||
$ret .= "<a href='$embedurl' rel='oembed'>$embedlink</a>";
|
||||
if (isset($j->author_name)) $ret.=" by ".$j->author_name;
|
||||
if (isset($j->provider_name)) $ret.=" on ".$j->provider_name;
|
||||
$ret.="</span>";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function oembed_bbcode2html($text){
|
||||
$stopoembed = get_config("system","no_oembed");
|
||||
if ($stopoembed == true){
|
||||
return preg_replace("/\[embed\](.+?)\[\/embed\]/is", "<!-- oembed $1 --><i>". t('Embedding disabled') ." : $1</i><!-- /oembed $1 -->" ,$text);
|
||||
}
|
||||
return preg_replace_callback("/\[embed\](.+?)\[\/embed\]/is", oembed_replacecb ,$text);
|
||||
}
|
||||
|
||||
|
||||
function oe_build_xpath($attr, $value){
|
||||
// http://westhoffswelt.de/blog/0036_xpath_to_select_html_by_class.html
|
||||
return "contains( normalize-space( @$attr ), ' $value ' ) or substring( normalize-space( @$attr ), 1, string-length( '$value' ) + 1 ) = '$value ' or substring( normalize-space( @$attr ), string-length( @$attr ) - string-length( '$value' ) ) = ' $value' or @$attr = '$value'";
|
||||
}
|
||||
|
||||
function oe_get_inner_html( $node ) {
|
||||
$innerHTML= '';
|
||||
$children = $node->childNodes;
|
||||
foreach ($children as $child) {
|
||||
$innerHTML .= $child->ownerDocument->saveXML( $child );
|
||||
}
|
||||
return $innerHTML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find <span class='oembed'>..<a href='url' rel='oembed'>..</a></span>
|
||||
* and replace it with [embed]url[/embed]
|
||||
*/
|
||||
function oembed_html2bbcode($text) {
|
||||
$dom = DOMDocument::loadHTML($text);
|
||||
$xpath = new DOMXPath($dom);
|
||||
$attr = "oembed";
|
||||
|
||||
$xattr = oe_build_xpath("class","oembed");
|
||||
$entries = $xpath->query("//span[$xattr]");
|
||||
|
||||
$xattr = oe_build_xpath("rel","oembed");
|
||||
foreach($entries as $e) {
|
||||
$href = $xpath->evaluate("a[$xattr]/@href", $e)->item(0)->nodeValue;
|
||||
if(!is_null($href)) $e->parentNode->replaceChild(new DOMText("[embed]".$href."[embed]"), $e);
|
||||
}
|
||||
return oe_get_inner_html( $dom->getElementsByTagName("body")->item(0) );
|
||||
}
|
||||
|
||||
?>
|
|
@ -30,6 +30,10 @@ function poller_run($argv, $argc){
|
|||
$php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
|
||||
//proc_close(proc_open("\"$php_path\" \"include/queue.php\" &", array(), $foo));
|
||||
proc_run($php_path,"include/queue.php");
|
||||
|
||||
// clear old cache
|
||||
q("DELETE FROM `cache` WHERE `updated`<'%s'",
|
||||
dbesc(datetime_convert('UTC','UTC',"now - 30 days")));
|
||||
|
||||
|
||||
$hub_update = false;
|
||||
|
@ -58,6 +62,9 @@ function poller_run($argv, $argc){
|
|||
|
||||
foreach($contacts as $contact) {
|
||||
|
||||
if($manual_id)
|
||||
$contact['last-update'] = '0000-00-00 00:00:00';
|
||||
|
||||
if($contact['priority'] || $contact['subhub']) {
|
||||
|
||||
$hub_update = true;
|
||||
|
@ -76,7 +83,7 @@ function poller_run($argv, $argc){
|
|||
$contact['priority'] = (($interval !== false) ? intval($interval) : 3);
|
||||
$hub_update = false;
|
||||
|
||||
if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day"))
|
||||
if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force)
|
||||
$hub_update = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -140,7 +140,7 @@ if(strlen($a->module)) {
|
|||
}
|
||||
else {
|
||||
if((x($_SERVER,'QUERY_STRING')) && ($_SERVER['QUERY_STRING'] === 'q=internal_error.html') && isset($dreamhost_error_hack)) {
|
||||
logger('index.php: dreamhost_error_hack invoked');
|
||||
logger('index.php: dreamhost_error_hack invoked. Original URI =' . $_SERVER['REQUEST_URI']);
|
||||
goaway($a->get_baseurl() . $_SERVER['REQUEST_URI']);
|
||||
}
|
||||
|
||||
|
|
|
@ -121,6 +121,15 @@ function contacts_content(&$a) {
|
|||
return; // NOTREACHED
|
||||
}
|
||||
|
||||
if($cmd === 'update') {
|
||||
|
||||
// pull feed and consume it, which should subscribe to the hub.
|
||||
|
||||
$php_path = ((x($a->config,'php_path') && strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php');
|
||||
proc_run($php_path,"include/poller.php","$contact_id");
|
||||
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
|
||||
// NOTREACHED
|
||||
}
|
||||
|
||||
if($cmd === 'block') {
|
||||
$blocked = (($orig_record[0]['blocked']) ? 0 : 1);
|
||||
|
@ -248,6 +257,7 @@ function contacts_content(&$a) {
|
|||
'$last_update' => (($r[0]['last-update'] == '0000-00-00 00:00:00')
|
||||
? t('Never')
|
||||
: datetime_convert('UTC',date_default_timezone_get(),$r[0]['last-update'],'D, j M Y, g:i A')),
|
||||
'$udnow' => t('Update now'),
|
||||
'$profile_select' => contact_profile_assign($r[0]['profile-id'],(($r[0]['network'] !== 'dfrn') ? true : false)),
|
||||
'$contact_id' => $r[0]['id'],
|
||||
'$block_text' => (($r[0]['blocked']) ? t('Unblock this contact') : t('Block this contact') ),
|
||||
|
|
|
@ -26,6 +26,7 @@ function dfrn_poll_init(&$a) {
|
|||
}
|
||||
|
||||
if(($dfrn_id === '') && (! x($_POST,'dfrn_id')) && ($a->argc > 1)) {
|
||||
logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] );
|
||||
header("Content-type: application/atom+xml");
|
||||
$o = get_feed_for($a, '*', $a->argv[1],$last_update);
|
||||
echo $o;
|
||||
|
|
|
@ -10,7 +10,9 @@ function follow_post(&$a) {
|
|||
// NOTREACHED
|
||||
}
|
||||
|
||||
$url = notags(trim($_POST['url']));
|
||||
$url = $orig_url = notags(trim($_POST['url']));
|
||||
|
||||
$email_conversant = false;
|
||||
|
||||
if($url) {
|
||||
$links = lrdd($url);
|
||||
|
@ -29,6 +31,11 @@ function follow_post(&$a) {
|
|||
|
||||
}
|
||||
}
|
||||
else {
|
||||
if((strpos($orig_url,'@')) && validate_email($orig_url)) {
|
||||
$email_conversant = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we find a DFRN site, send our subscriber to the other person's
|
||||
|
|
32
mod/item.php
32
mod/item.php
|
@ -71,6 +71,7 @@ function item_post(&$a) {
|
|||
$location = notags(trim($_POST['location']));
|
||||
$coord = notags(trim($_POST['coord']));
|
||||
$verb = notags(trim($_POST['verb']));
|
||||
$emailcc = notags(trim($_POST['emailcc']));
|
||||
|
||||
if(! strlen($body)) {
|
||||
notice( t('Empty post discarded.') . EOL );
|
||||
|
@ -421,12 +422,39 @@ function item_post(&$a) {
|
|||
|
||||
logger('mod_item: notifier invoked: ' . "\"$php_path\" \"include/notifier.php\" \"$notify_type\" \"$post_id\" &");
|
||||
|
||||
proc_run($php_path, "include/notifier.php", $notify_type, "$post_id");
|
||||
proc_run($php_path, "include/notifier.php", $notify_type, "$post_id");
|
||||
|
||||
$datarray['id'] = $post_id;
|
||||
|
||||
call_hooks('post_local_end', $datarray);
|
||||
|
||||
|
||||
if(strlen($emailcc) && $profile_uid == local_user()) {
|
||||
$erecips = explode(',', $emailcc);
|
||||
if(count($erecips)) {
|
||||
foreach($erecips as $recip) {
|
||||
$addr = trim($recip);
|
||||
if(! strlen($addr))
|
||||
continue;
|
||||
$disclaimer = '<hr />' . t('This message was sent to you by ') . $a->user['username']
|
||||
. t(', a member of the Friendika social network.') . '<br />';
|
||||
$disclaimer .= t('You may visit them online at') . ' '
|
||||
. $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '<br />';
|
||||
$disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '<br />';
|
||||
|
||||
$subject = '[Friendika]' . ' ' . $a->user['username'] . ' ' . t('posted an update.');
|
||||
$headers = 'From: ' . $a->user['username'] . ' <' . $a->user['email'] . '>' . "\n";
|
||||
$headers .= 'MIME-Version: 1.0' . "\n";
|
||||
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";
|
||||
$headers .= 'Content-Transfer-Encoding: 8bit' . "\n\n";
|
||||
$link = '<a href="' . $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '"><img src="' . $author['thumb'] . '" alt="' . $a->user['username'] . '" /></a><br /><br />';
|
||||
$html = prepare_body($datarray);
|
||||
$message = '<html><body>' . $link . $html . $disclaimer . '</body></html>';
|
||||
@mail($addr, $subject, $message, $headers);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
goaway($a->get_baseurl() . "/" . $_POST['return'] );
|
||||
return; // NOTREACHED
|
||||
|
|
|
@ -87,6 +87,8 @@ function network_content(&$a, $update = 0) {
|
|||
'$baseurl' => $a->get_baseurl(),
|
||||
'$defloc' => $a->user['default-location'],
|
||||
'$visitor' => 'block',
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$lockstate' => $lockstate,
|
||||
'$acl' => populate_acl((($group) ? $group_acl : $a->user), $celeb),
|
||||
'$bang' => (($group) ? '!' : ''),
|
||||
|
|
|
@ -144,6 +144,8 @@ function profile_content(&$a, $update = 0) {
|
|||
'$return_path' => $a->cmd,
|
||||
'$visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
|
||||
'$lockstate' => $lockstate,
|
||||
'$emailcc' => t('CC: email addresses'),
|
||||
'$emtitle' => t('Example: bob@example.com, mary@example.com'),
|
||||
'$bang' => '',
|
||||
'$acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
|
||||
'$profile_uid' => $a->profile['profile_uid'],
|
||||
|
|
|
@ -320,3 +320,11 @@ function update_1031() {
|
|||
function update_1032() {
|
||||
q("ALTER TABLE `profile` ADD `pdesc` CHAR( 255 ) NOT NULL AFTER `name` ");
|
||||
}
|
||||
|
||||
function update_1033() {
|
||||
q("CREATE TABLE IF NOT EXISTS `cache` (
|
||||
`k` CHAR( 255 ) NOT NULL PRIMARY KEY ,
|
||||
`v` TEXT NOT NULL,
|
||||
`updated` DATETIME NOT NULL
|
||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;");
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
<div id="contact-edit-banner-name">$name</div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-wrapper" >
|
||||
|
||||
|
@ -24,13 +26,12 @@
|
|||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact-edit-end" ></div>
|
||||
|
|
|
@ -40,8 +40,12 @@
|
|||
<div id="profile-rotator-wrapper" style="display: $visitor;" >
|
||||
<img id="profile-rotator" src="images/rotator.gif" alt="Bitte warten" title="Bitte warten" style="display: none;" />
|
||||
</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Berechtigungseinstellungen" title="Berechtigungseinstellungen" onClick="openClose('profile-jot-acl-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Berechtigungseinstellungen" title="Berechtigungseinstellungen" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms-end"></div>
|
||||
<div id="profile-jot-email-wrapper" style="display: none;" >
|
||||
<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
|
||||
<div id="profile-jot-email-end"></div>
|
||||
</div>
|
||||
<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
<div id="contact-edit-banner-name">$name</div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-wrapper" >
|
||||
|
||||
|
@ -24,13 +26,12 @@
|
|||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact-edit-end" ></div>
|
||||
|
|
|
@ -2,17 +2,20 @@
|
|||
<script language="javascript" type="text/javascript" src="$baseurl/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
|
||||
var editor;
|
||||
|
||||
tinyMCE.init({
|
||||
theme : "advanced",
|
||||
mode : "specific_textareas",
|
||||
editor_selector: /(profile-jot-text|prvmail-text)/,
|
||||
plugins : "bbcode",
|
||||
plugins : "bbcode,paste",
|
||||
theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect",
|
||||
theme_advanced_buttons2 : "",
|
||||
theme_advanced_buttons3 : "",
|
||||
theme_advanced_toolbar_location : "top",
|
||||
theme_advanced_toolbar_align : "center",
|
||||
theme_advanced_blockformats : "blockquote,code",
|
||||
paste_text_sticky : true,
|
||||
entity_encoding : "raw",
|
||||
add_unload_trigger : false,
|
||||
remove_linebreaks : false,
|
||||
|
@ -43,8 +46,13 @@ tinyMCE.init({
|
|||
$('#character-counter').addClass('red');
|
||||
}
|
||||
$('#character-counter').text(text);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
ed.onInit.add(function(ed) {
|
||||
ed.pasteAsPlainText = true;
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -40,8 +40,12 @@
|
|||
<div id="profile-rotator-wrapper" style="display: $visitor;" >
|
||||
<img id="profile-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
|
||||
</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms-end"></div>
|
||||
<div id="profile-jot-email-wrapper" style="display: none;" >
|
||||
<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
|
||||
<div id="profile-jot-email-end"></div>
|
||||
</div>
|
||||
<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
<div id="contact-edit-banner-name">$name</div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-wrapper" >
|
||||
|
||||
|
@ -24,14 +26,13 @@
|
|||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact-edit-end" ></div>
|
||||
|
|
|
@ -41,8 +41,13 @@
|
|||
<div id="profile-rotator-wrapper" style="display: $visitor;" >
|
||||
<img id="profile-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
|
||||
</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms-end"></div>
|
||||
<div id="profile-jot-email-wrapper" style="display: none;" >
|
||||
<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
|
||||
<div id="profile-jot-email-end"></div>
|
||||
</div>
|
||||
|
||||
<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
<div id="contact-edit-banner-name">$name</div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-wrapper" >
|
||||
|
||||
|
@ -24,13 +26,12 @@
|
|||
</div>
|
||||
<div id="contact-edit-nav-end"></div>
|
||||
|
||||
<form action="contacts/$contact_id" method="post" >
|
||||
<input type="hidden" name="contact_id" value="$contact_id">
|
||||
|
||||
<div id="contact-edit-poll-wrapper">
|
||||
<div id="contact-edit-last-update-text">$lastupdtext<span id="contact-edit-last-updated">$last_update</span</div>
|
||||
<div id="contact-edit-poll-text">$updpub</div>
|
||||
$poll_interval
|
||||
<div id="contact-edit-update-now"><a href="contacts/$contact_id/update">$udnow</a></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="contact-edit-end" ></div>
|
||||
|
|
|
@ -40,8 +40,13 @@
|
|||
<div id="profile-rotator-wrapper" style="display: $visitor;" >
|
||||
<img id="profile-rotator" src="images/rotator.gif" alt="Attendi" title="Attendi" style="display: none;" />
|
||||
</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Impostazione permessi" title="Impostazione permessi" onClick="openClose('profile-jot-acl-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="Impostazione permessi" title="Impostazione permessi" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
|
||||
<div id="profile-jot-perms-end"></div>
|
||||
<div id="profile-jot-email-wrapper" style="display: none;" >
|
||||
<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
|
||||
<div id="profile-jot-email-end"></div>
|
||||
</div>
|
||||
|
||||
<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1333,6 +1333,9 @@ input#dfrn-url {
|
|||
#contact-edit-poll-text {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
#contact-edit-update-now {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
#contact-edit-photo-wrapper {
|
||||
margin-bottom: 20px;
|
||||
|
|
|
@ -1209,6 +1209,10 @@ input#dfrn-url {
|
|||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#contact-edit-update-now {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
#contact-edit-photo-wrapper {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
|
BIN
view/theme/purplezero/border.jpg
Normal file
BIN
view/theme/purplezero/border.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 364 B |
BIN
view/theme/purplezero/head.jpg
Normal file
BIN
view/theme/purplezero/head.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
view/theme/purplezero/shiny.png
Normal file
BIN
view/theme/purplezero/shiny.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 320 B |
27
view/theme/purplezero/style.css
Normal file
27
view/theme/purplezero/style.css
Normal file
|
@ -0,0 +1,27 @@
|
|||
@import url('../duepuntozero/style.css');
|
||||
|
||||
a, a:visited { color: #7433af; text-decoration: none; }
|
||||
a:hover {text-decoration: underline; }
|
||||
|
||||
|
||||
body { background-image: url(head.jpg); }
|
||||
aside( background-image: url(border.jpg); }
|
||||
section { background-image: url(border.jpg); }
|
||||
#profile-tabs-wrapper { background-image: url(head.jpg); }
|
||||
div.wall-item-content-wrapper.shiny { background-image: url('shiny.png'); }
|
||||
|
||||
|
||||
.nav-commlink, .nav-login-link {
|
||||
background-color: #aed3b2;
|
||||
|
||||
}
|
||||
|
||||
.fakelink, .fakelink:visited {
|
||||
color: #7433af;
|
||||
}
|
||||
|
||||
.wall-item-name-link {
|
||||
color: #7433af;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in a new issue