diff options
32 files changed, 940 insertions, 556 deletions
@@ -4,14 +4,15 @@ require_once('include/config.php'); require_once('include/network.php'); require_once('include/plugin.php'); require_once('include/text.php'); +require_once('include/datetime.php'); require_once('include/pgettext.php'); require_once('include/nav.php'); require_once('include/cache.php'); define ( 'FRIENDICA_PLATFORM', 'Friendica'); -define ( 'FRIENDICA_VERSION', '3.0.1366' ); +define ( 'FRIENDICA_VERSION', '3.0.1371' ); define ( 'DFRN_PROTOCOL_VERSION', '2.23' ); -define ( 'DB_UPDATE_VERSION', 1148 ); +define ( 'DB_UPDATE_VERSION', 1149 ); define ( 'EOL', "<br />\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); @@ -28,6 +29,11 @@ define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); */ define ( 'JPEG_QUALITY', 100 ); +/** + * $a->config['system']['png_quality'] from 0 (uncompressed) to 9 + */ +define ( 'PNG_QUALITY', 8 ); + /** * Not yet used @@ -328,6 +334,12 @@ if(! class_exists('App')) { function __construct() { + global $default_timezone; + + $this->timezone = ((x($default_timezone)) ? $default_timezone : 'UTC'); + + date_default_timezone_set($this->timezone); + $this->config = array(); $this->page = array(); $this->pager= array(); @@ -402,9 +414,6 @@ if(! class_exists('App')) { $this->argc = count($this->argv); if((array_key_exists('0',$this->argv)) && strlen($this->argv[0])) { $this->module = str_replace(".", "_", $this->argv[0]); - if(array_key_exists('2',$this->argv)) { - $this->category = $this->argv[2]; - } } else { $this->argc = 1; @@ -427,7 +436,7 @@ if(! class_exists('App')) { * pagination */ - $this->pager['page'] = ((x($_GET,'page')) ? $_GET['page'] : 1); + $this->pager['page'] = ((x($_GET,'page') && intval($_GET['page']) > 0) ? intval($_GET['page']) : 1); $this->pager['itemspage'] = 50; $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; $this->pager['total'] = 0; @@ -494,7 +503,7 @@ if(! class_exists('App')) { } function set_pager_itemspage($n) { - $this->pager['itemspage'] = intval($n); + $this->pager['itemspage'] = ((intval($n) > 0) ? intval($n) : 0); $this->pager['start'] = ($this->pager['page'] * $this->pager['itemspage']) - $this->pager['itemspage']; } diff --git a/database.sql b/database.sql index c1d1b27e4..53dc0c5b2 100644 --- a/database.sql +++ b/database.sql @@ -745,6 +745,7 @@ CREATE TABLE IF NOT EXISTS `photo` ( `desc` text NOT NULL, `album` char(255) NOT NULL, `filename` char(255) NOT NULL, + `type` CHAR(128) NOT NULL DEFAULT 'image/jpeg', `height` smallint(6) NOT NULL, `width` smallint(6) NOT NULL, `data` mediumblob NOT NULL, diff --git a/include/Photo.php b/include/Photo.php index fce559999..f769a70a6 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -7,14 +7,34 @@ class Photo { private $width; private $height; private $valid; + private $type; + private $types; + + /** + * supported mimetypes and corresponding file extensions + */ + static function supportedTypes() { + $t = array(); + $t['image/jpeg'] ='jpg'; + if (imagetypes() & IMG_PNG) $t['image/png'] = 'png'; + return $t; + } + + public function __construct($data, $type="image/jpeg") { - public function __construct($data) { + $this->types = $this->supportedTypes(); + if (!array_key_exists($type,$this->types)){ + $type='image/jpeg'; + } $this->valid = false; + $this->type = $type; $this->image = @imagecreatefromstring($data); if($this->image !== FALSE) { $this->width = imagesx($this->image); $this->height = imagesy($this->image); $this->valid = true; + imagealphablending($this->image, false); + imagesavealpha($this->image, true); } } @@ -38,6 +58,13 @@ class Photo { public function getImage() { return $this->image; } + + public function getType() { + return $this->type; + } + public function getExt() { + return $this->types[$this->type]; + } public function scaleImage($max) { @@ -78,6 +105,9 @@ class Photo { $dest = imagecreatetruecolor( $dest_width, $dest_height ); + imagealphablending($dest, false); + imagesavealpha($dest, true); + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); if($this->image) imagedestroy($this->image); @@ -134,6 +164,9 @@ class Photo { $dest = imagecreatetruecolor( $dest_width, $dest_height ); + imagealphablending($dest, false); + imagesavealpha($dest, true); + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height); if($this->image) imagedestroy($this->image); @@ -148,6 +181,9 @@ class Photo { public function scaleImageSquare($dim) { $dest = imagecreatetruecolor( $dim, $dim ); + imagealphablending($dest, false); + imagesavealpha($dest, true); + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height); if($this->image) imagedestroy($this->image); @@ -159,6 +195,9 @@ class Photo { public function cropImage($max,$x,$y,$w,$h) { $dest = imagecreatetruecolor( $max, $max ); + imagealphablending($dest, false); + imagesavealpha($dest, true); + if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h); if($this->image) imagedestroy($this->image); @@ -168,20 +207,38 @@ class Photo { } public function saveImage($path) { - $quality = get_config('system','jpeg_quality'); - if((! $quality) || ($quality > 100)) - $quality = JPEG_QUALITY; - imagejpeg($this->image,$path,$quality); + switch($this->type){ + case "image/png": + $quality = get_config('system','png_quality'); + if((! $quality) || ($quality > 9)) + $quality = PNG_QUALITY; + imagepng($this->image, $path, $quality); + break; + default: + $quality = get_config('system','jpeg_quality'); + if((! $quality) || ($quality > 100)) + $quality = JPEG_QUALITY; + imagejpeg($this->image,$path,$quality); + } + } public function imageString() { ob_start(); - - $quality = get_config('system','jpeg_quality'); - if((! $quality) || ($quality > 100)) - $quality = JPEG_QUALITY; - - imagejpeg($this->image,NULL,$quality); + switch($this->type){ + case "image/png": + $quality = get_config('system','png_quality'); + if((! $quality) || ($quality > 9)) + $quality = PNG_QUALITY; + imagepng($this->image,NULL, $quality); + break; + default: + $quality = get_config('system','jpeg_quality'); + if((! $quality) || ($quality > 100)) + $quality = JPEG_QUALITY; + + imagejpeg($this->image,NULL,$quality); + } $s = ob_get_contents(); ob_end_clean(); return $s; @@ -200,8 +257,8 @@ class Photo { $guid = get_guid(); $r = q("INSERT INTO `photo` - ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) - VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )", + ( `uid`, `contact-id`, `guid`, `resource-id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `scale`, `profile`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) + VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, '%s', '%s', '%s', '%s' )", intval($uid), intval($cid), dbesc($guid), @@ -209,6 +266,7 @@ class Photo { dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc(basename($filename)), + dbesc($this->type), dbesc($album), intval($this->height), intval($this->width), @@ -230,6 +288,40 @@ class Photo { }} +/** + * Guess image mimetype from filename or from Content-Type header + * + * @arg $filename string Image filename + * @arg $fromcurl boolean Check Content-Type header from curl request + */ +function guess_image_type($filename, $fromcurl=false) { + logger('Photo: guess_image_type: '.$filename . ($fromcurl?' from curl headers':''), LOGGER_DEBUG); + $type = null; + if ($fromcurl) { + $a = get_app(); + $headers=array(); + $h = explode("\n",$a->get_curl_headers()); + foreach ($h as $l) { + list($k,$v) = array_map("trim", explode(":", trim($l), 2)); + $headers[$k] = $v; + } + if (array_key_exists('Content-Type', $headers)) + $type = $headers['Content-Type']; + } + if (is_null($type)){ + $ext = pathinfo($filename, PATHINFO_EXTENSION); + $types = Photo::supportedTypes(); + $type = "image/jpeg"; + foreach ($types as $m=>$e){ + if ($ext==$e) $type = $m; + } + + } + logger('Photo: guess_image_type: type='.$type, LOGGER_DEBUG); + return $type; + +} + function import_profile_photo($photo,$uid,$cid) { $a = get_app(); @@ -238,7 +330,12 @@ function import_profile_photo($photo,$uid,$cid) { $filename = basename($photo); $img_str = fetch_url($photo,true); - $img = new Photo($img_str); + + // guess mimetype from headers or filename + $type = guess_image_type($photo,true); + + + $img = new Photo($img_str, $type); if($img->is_valid()) { $img->scaleImageSquare(175); @@ -266,9 +363,9 @@ function import_profile_photo($photo,$uid,$cid) { - $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.jpg'; - $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.jpg'; - $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.jpg'; + $photo = $a->get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt(); + $thumb = $a->get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt(); + $micro = $a->get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt(); } else $photo_failure = true; diff --git a/include/conversation.php b/include/conversation.php index a9c6287a9..68693bb9f 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -546,7 +546,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { } $likebuttons = ''; - $shareable = ((($profile_owner == local_user()) && (! $item['private'])) ? true : false); //($mode != 'display') && + $shareable = ((($profile_owner == local_user()) && ((! $item['private']) || $item['network'] === NETWORK_FEED)) ? true : false); if($page_writeable) { if($toplevelpost) { diff --git a/include/follow.php b/include/follow.php index d92d7577d..22288a0da 100644 --- a/include/follow.php +++ b/include/follow.php @@ -94,6 +94,9 @@ function new_contact($uid,$url,$interactive = false) { } $writeable = ((($ret['network'] === NETWORK_OSTATUS) && ($ret['notify'])) ? 1 : 0); + + $subhub = (($ret['network'] === NETWORK_OSTATUS) ? true : false); + $hidden = (($ret['network'] === NETWORK_MAIL) ? 1 : 0); if($ret['network'] === NETWORK_MAIL) { @@ -116,8 +119,9 @@ function new_contact($uid,$url,$interactive = false) { if(count($r)) { // update contact if($r[0]['rel'] == CONTACT_IS_FOLLOWER || ($network === NETWORK_DIASPORA && $r[0]['rel'] == CONTACT_IS_SHARING)) { - q("UPDATE `contact` SET `rel` = %d , `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1", + q("UPDATE `contact` SET `rel` = %d , `subhub` = %d, `readonly` = 0 WHERE `id` = %d AND `uid` = %d LIMIT 1", intval(CONTACT_IS_FRIEND), + intval($subhub), intval($r[0]['id']), intval($uid) ); @@ -131,8 +135,8 @@ function new_contact($uid,$url,$interactive = false) { // create contact record $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, - `writable`, `hidden`, `blocked`, `readonly`, `pending` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0 ) ", + `writable`, `hidden`, `blocked`, `readonly`, `pending`, `subhub` ) + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, 0, 0, 0, %d ) ", intval($uid), dbesc(datetime_convert()), dbesc($ret['url']), @@ -151,7 +155,8 @@ function new_contact($uid,$url,$interactive = false) { intval($new_relation), intval($ret['priority']), intval($writeable), - intval($hidden) + intval($hidden), + intval($subhub) ); } diff --git a/include/items.php b/include/items.php index 037de35eb..d543dcab0 100755 --- a/include/items.php +++ b/include/items.php @@ -22,8 +22,6 @@ function get_feed_for(&$a, $dfrn_id, $owner_nick, $last_update, $direction = 0) if($a->argv[$x] === 'category' && $a->argc > ($x + 1) && strlen($a->argv[$x+1])) $category = $a->argv[$x+1]; } - - } @@ -693,6 +691,8 @@ function encode_rel_links($links) { return xmlify($o); } + + function item_store($arr,$force_parent = false) { // If a Diaspora signature structure was passed in, pull it out of the @@ -806,6 +806,14 @@ function item_store($arr,$force_parent = false) { $deny_cid = $r[0]['deny_cid']; $deny_gid = $r[0]['deny_gid']; $arr['wall'] = $r[0]['wall']; + + // if the parent is private, force privacy for the entire conversation + // This differs from the above settings as it subtly allows comments from + // email correspondents to be private even if the overall thread is not. + + if($r[0]['private']) + $arr['private'] = 1; + } else { @@ -1314,6 +1322,7 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) $birthday = ''; $hubs = $feed->get_links('hub'); + logger('consume_feed: hubs: ' . print_r($hubs,true), LOGGER_DATA); if(count($hubs)) $hub = implode(',', $hubs); @@ -1356,7 +1365,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) } $img_str = fetch_url($photo_url,true); - $img = new Photo($img_str); + // guess mimetype from headers or filename + $type = guess_image_type($photo_url,true); + + + $img = new Photo($img_str, $type); if($img->is_valid()) { if($have_photo) { q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d", @@ -1382,9 +1395,9 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1", dbesc(datetime_convert()), - dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.jpg'), - dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.jpg'), - dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.jpg'), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()), + dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()), intval($contact['uid']), intval($contact['id']) ); @@ -1640,6 +1653,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if(count($r)) { if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + + // do not accept (ignore) an earlier edit than one we currently have. + if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited'])) + continue; + $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), dbesc($datarray['body']), @@ -1786,6 +1804,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) if(count($r)) { if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + + // do not accept (ignore) an earlier edit than one we currently have. + if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited'])) + continue; + $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), dbesc($datarray['body']), @@ -1841,9 +1864,11 @@ function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) } if(($contact['network'] === NETWORK_FEED) || (! strlen($contact['notify']))) { - // one way feed - no remote comment ability - $datarray['last-child'] = 0; + // one way feed - no remote comment ability + $datarray['last-child'] = 0; } + if($contact['network'] === NETWORK_FEED) + $datarray['private'] = 1; // This is my contact on another system, but it's really me. // Turn this into a wall post. @@ -2269,7 +2294,12 @@ function local_delivery($importer,$data) { if(count($r)) { $iid = $r[0]['id']; - if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + + // do not accept (ignore) an earlier edit than one we currently have. + if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited'])) + continue; + logger('received updated comment' , LOGGER_DEBUG); $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), @@ -2448,6 +2478,11 @@ function local_delivery($importer,$data) { if(count($r)) { if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + + // do not accept (ignore) an earlier edit than one we currently have. + if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited'])) + continue; + $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), dbesc($datarray['body']), @@ -2614,6 +2649,11 @@ function local_delivery($importer,$data) { if(count($r)) { if((x($datarray,'edited') !== false) && (datetime_convert('UTC','UTC',$datarray['edited']) !== $r[0]['edited'])) { + + // do not accept (ignore) an earlier edit than one we currently have. + if(datetime_convert('UTC','UTC',$datarray['edited'] < $r[0]['edited'])) + continue; + $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `edited` = '%s' WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($datarray['title']), dbesc($datarray['body']), @@ -2958,7 +2998,7 @@ function fix_private_photos($s,$uid, $item = null, $cid = 0) { if(stristr($image , $site . '/photo/')) { $replace = false; $i = basename($image); - $i = str_replace('.jpg','',$i); + $i = str_replace(array('.jpg','.png'),array('',''),$i); $x = strpos($i,'-'); if($x) { $res = substr($i,$x+1); @@ -3000,7 +3040,7 @@ function fix_private_photos($s,$uid, $item = null, $cid = 0) { } if($replace) { logger('fix_private_photos: replacing photo', LOGGER_DEBUG); - $s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s); + $s = str_replace($image, 'data:' . $r[0]['type'] . ';base64,' . base64_encode($r[0]['data']), $s); logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA); } } diff --git a/include/network.php b/include/network.php index eeb2460d1..446413cd8 100644 --- a/include/network.php +++ b/include/network.php @@ -807,8 +807,11 @@ function scale_external_images($s,$include_link = true) { if(stristr($mtch[1],$hostname)) continue; $i = fetch_url($mtch[1]); + // guess mimetype from headers or filename + $type = guess_image_type($mtch[1],true); + if($i) { - $ph = new Photo($i); + $ph = new Photo($i, $type); if($ph->is_valid()) { $orig_width = $ph->getWidth(); $orig_height = $ph->getHeight(); diff --git a/include/oembed.php b/include/oembed.php index 1f45d2814..e2504b7eb 100644..100755 --- a/include/oembed.php +++ b/include/oembed.php @@ -65,7 +65,8 @@ function oembed_fetch_url($embedurl){ } function oembed_format_object($j){ - $embedurl = $j->embedurl; + $a = get_app(); + $embedurl = $j->embedurl; $jhtml = oembed_iframe($j->embedurl,(isset($j->width) ? $j->width : null), (isset($j->height) ? $j->height : null) ); $ret="<span class='oembed ".$j->type."'>"; switch ($j->type) { @@ -78,6 +79,7 @@ function oembed_format_object($j){ $th=120; $tw = $th*$tr; $tpl=get_markup_template('oembed_video.tpl'); $ret.=replace_macros($tpl, array( + '$baseurl' => $a->get_baseurl(), '$embedurl'=>$embedurl, '$escapedhtml'=>base64_encode($jhtml), '$tw'=>$tw, diff --git a/include/onepoll.php b/include/onepoll.php index a64922aa3..02763cf4b 100644 --- a/include/onepoll.php +++ b/include/onepoll.php @@ -94,8 +94,8 @@ function onepoll_run($argv, $argc){ $t = $contact['last-update']; if($contact['subhub']) { - $interval = get_config('system','pushpoll_frequency'); - $contact['priority'] = (($interval !== false) ? intval($interval) : 3); + $poll_interval = get_config('system','pushpoll_frequency'); + $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3); $hub_update = false; if(datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) @@ -477,6 +477,9 @@ function onepoll_run($argv, $argc){ if($contact['network'] === NETWORK_DFRN || $contact['blocked'] || $contact['readonly']) $hubmode = 'unsubscribe'; + if($contact['network'] === NETWORK_OSTATUS && (! $contact['hub-verify'])) + $hub_update = true; + if((strlen($hub)) && ($hub_update) && ($contact['rel'] != CONTACT_IS_FOLLOWER)) { logger('poller: hub ' . $hubmode . ' : ' . $hub . ' contact name : ' . $contact['name'] . ' local user : ' . $importer['name']); $hubs = explode(',', $hub); diff --git a/include/poller.php b/include/poller.php index 6b12445d1..fefc9b381 100644 --- a/include/poller.php +++ b/include/poller.php @@ -201,8 +201,8 @@ function poller_run($argv, $argc){ if($contact['subhub']) { - $interval = get_config('system','pushpoll_frequency'); - $contact['priority'] = (($interval !== false) ? intval($interval) : 3); + $poll_interval = get_config('system','pushpoll_frequency'); + $contact['priority'] = (($poll_interval !== false) ? intval($poll_interval) : 3); $hub_update = false; if((datetime_convert('UTC','UTC', 'now') > datetime_convert('UTC','UTC', $t . " + 1 day")) || $force) diff --git a/include/text.php b/include/text.php index d4a4d5580..f408e0df6 100644 --- a/include/text.php +++ b/include/text.php @@ -1541,3 +1541,16 @@ function protect_sprintf($s) { return(str_replace('%','%%',$s)); } + +function is_a_date_arg($s) { + $i = intval($s); + if($i > 1900) { + $y = date('Y'); + if($i <= $y+1 && strpos($s,'-') == 4) { + $m = intval(substr($s,5)); + if($m > 0 && $m <= 12) + return true; + } + } + return false; +} diff --git a/include/user.php b/include/user.php index af43a2b52..2477438bf 100644 --- a/include/user.php +++ b/include/user.php @@ -284,7 +284,11 @@ function create_user($arr) { $filename = basename($photo); $img_str = fetch_url($photo,true); - $img = new Photo($img_str); + // guess mimetype from headers or filename + $type = guess_image_type($photo,true); + + + $img = new Photo($img_str, $type); if($img->is_valid()) { $img->scaleImageSquare(175); @@ -324,4 +328,4 @@ function create_user($arr) { $result['user'] = $u; return $result; -}
\ No newline at end of file +} @@ -59,8 +59,7 @@ if(! $install) { /** * * Important stuff we always need to do. - * Initialise authentication and date and time. - * Create the HTML head for the page, even if we may not use it (xml, etc.) + * * The order of these may be important so use caution if you think they're all * intertwingled with no logical order and decide to sort it out. Some of the * dependencies have changed, but at least at one time in the recent past - the @@ -68,12 +67,6 @@ if(! $install) { * */ -require_once("datetime.php"); - -$a->timezone = (($default_timezone) ? $default_timezone : 'UTC'); - -date_default_timezone_set($a->timezone); - session_start(); /** diff --git a/mod/events.php b/mod/events.php index 069046ff9..2a6fb692e 100644..100755 --- a/mod/events.php +++ b/mod/events.php @@ -230,8 +230,8 @@ function events_content(&$a) { $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`, `item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` WHERE `event`.`uid` = %d - AND (( `adjust` = 0 AND `start` >= '%s' AND `start` <= '%s' ) - OR ( `adjust` = 1 AND `start` >= '%s' AND `start` <= '%s' )) ", + AND (( `adjust` = 0 AND `finish` >= '%s' AND `start` <= '%s' ) + OR ( `adjust` = 1 AND `finish` >= '%s' AND `start` <= '%s' )) ", intval(local_user()), dbesc($start), dbesc($finish), diff --git a/mod/fbrowser.php b/mod/fbrowser.php index 66ff9252e..3f034226e 100644 --- a/mod/fbrowser.php +++ b/mod/fbrowser.php @@ -4,7 +4,9 @@ * @subpackage FileBrowser * @author Fabio Comuni <fabrixxm@kirgroup.com> */ - + +require_once('include/Photo.php'); + /** * @param App $a */ @@ -43,14 +45,22 @@ function fbrowser_content($a){ $path[]=array($a->get_baseurl()."/fbrowser/image/".$a->argv[2]."/", $album); } - $r = q("SELECT `resource-id`, `id`, `filename`, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc` + $r = q("SELECT `resource-id`, `id`, `filename`, type, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `desc` FROM `photo` WHERE `uid` = %d $sql_extra GROUP BY `resource-id` $sql_extra2", intval(local_user()) ); - - function files1($rr){ global $a; return array( $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['hiq'] . '.jpg', template_escape($rr['filename']), $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.jpg'); } + function files1($rr){ + global $a; + $types = Photo::supportedTypes(); + $ext = $types[$rr['type']]; + return array( + $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['hiq'] . '.' .$ext, + template_escape($rr['filename']), + $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['loq'] . '.'. $ext + ); + } $files = array_map("files1", $r); $tpl = get_markup_template("filebrowser.tpl"); diff --git a/mod/msearch.php b/mod/msearch.php index 94def7d89..89de5b705 100644 --- a/mod/msearch.php +++ b/mod/msearch.php @@ -28,7 +28,7 @@ function msearch_post(&$a) { $results[] = array( 'name' => $rr['name'], 'url' => $a->get_baseurl() . '/profile/' . $rr['nickname'], - 'photo' => $a->get_baseurl() . '/photo/avatar/' . $rr['uid'] . 'jpg', + 'photo' => $a->get_baseurl() . '/photo/avatar/' . $rr['uid'] . '.jpg', 'tags' => str_replace(array(',',' '),array(' ',' '),$rr['pub_keywords']) ); } diff --git a/mod/network.php b/mod/network.php index b998a3107..45983053c 100644 --- a/mod/network.php +++ b/mod/network.php @@ -6,7 +6,31 @@ function network_init(&$a) { notice( t('Permission denied.') . EOL); return; } - + + + // fetch last used tab and redirect if needed + $sel_tabs = network_query_get_sel_tab($a); + $last_sel_tabs = get_pconfig(local_user(), 'network.view','tab.selected'); + if (is_array($last_sel_tabs)){ + $tab_urls = array( + '/network?f=&order=comment', //all + '/network?f=&order=post', //postord + '/network?f=&conv=1', //conv + '/network/new', //new + '/network?f=&star=1', //starred + '/network?f=&bmark=1', //bookmarked + '/network?f=&spam=1', //spam + ); + + // redirect if current selected tab is 'no_active' and + // last selected tab is _not_ 'all_active'. + if ($sel_tabs[0] == 'active' && $last_sel_tabs[0]!='active') { + $k = array_search('active', $last_sel_tabs); + //echo "<pre>"; var_dump($sel_tabs, $last_sel_tabs, $tab_urlsm, $k, $tab_urls[$k]); killme(); + goaway($a->get_baseurl() . $tab_urls[$k]); + } + } + $group_id = (($a->argc > 1 && intval($a->argv[1])) ? intval($a->argv[1]) : 0); require_once('include/group.php'); @@ -98,26 +122,23 @@ function saved_searches($search) { } - -function network_content(&$a, $update = 0) { - - require_once('include/conversation.php'); - - if(! local_user()) { - $_SESSION['return_url'] = $a->query_string; - return login(false); - } - - $arr = array('query' => $a->query_string); - - call_hooks('network_content_init', $arr); - - $o = ''; - - // item filter tabs - // TODO: fix this logic, reduce duplication - //$a->page['content'] .= '<div class="tabs-wrapper">'; - +/** + * Return selected tab from query + * + * urls -> returns + * '/network' => $no_active = 'active' + * '/network?f=&order=comment' => $comment_active = 'active' + * '/network?f=&order=post' => $postord_active = 'active' + * '/network?f=&conv=1', => $conv_active = 'active' + * '/network/new', => $new_active = 'active' + * '/network?f=&star=1', => $starred_active = 'active' + * '/network?f=&bmark=1', => $bookmarked_active = 'active' + * '/network?f=&spam=1', => $spam_active = 'active' + * + * @return Array ( $no_active, $comment_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active ); + */ +function network_query_get_sel_tab($a) { + $no_active=''; $starred_active = ''; $new_active = ''; $bookmarked_active = ''; @@ -125,6 +146,7 @@ function network_content(&$a, $update = 0) { $search_active = ''; $conv_active = ''; $spam_active = ''; + $postord_active = ''; if(($a->argc > 1 && $a->argv[1] === 'new') || ($a->argc > 2 && $a->argv[2] === 'new')) { @@ -152,28 +174,80 @@ function network_content(&$a, $update = 0) { } + if (($new_active == '') && ($starred_active == '') && ($bookmarked_active == '') && ($conv_active == '') && ($search_active == '') && ($spam_active == '')) { - $all_active = 'active'; + $no_active = 'active'; } + if ($no_active=='active' && x($_GET,'order')) { + switch($_GET['order']){ + case 'post': $postord_active = 'active'; $no_active=''; break; + case 'comment' : $all_active = 'active'; $no_active=''; break; + } + } - $postord_active = ''; + return array($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); +} + + +function network_content(&$a, $update = 0) { + + require_once('include/conversation.php'); - if($all_active && x($_GET,'order') && $_GET['order'] !== 'comment') { - $all_active = ''; - $postord_active = 'active'; + if(! local_user()) { + $_SESSION['return_url'] = $a->query_string; + return login(false); } - + + $arr = array('query' => $a->query_string); + + call_hooks('network_content_init', $arr); + + + $datequery = $datequery2 = ''; + + if($a->argc > 1) { + for($x = 1; $x < $a->argc; $x ++) { + if(is_a_date_arg($a->argv[$x])) { + if($datequery) + $datequery2 = escape_tags($a->argv[$x]); + else { + $datequery = escape_tags($a->argv[$x]); + $_GET['order'] = 'post'; + } + } + elseif($a->argv[$x] === 'new') { + $nouveau = true; + } + elseif(intval($a->argv[$x])) { + $group = intval($a->argv[$x]); + $def_acl = array('allow_gid' => '<' . $group . '>'); + } + } + } + + + $o = ''; + + // item filter tabs + // TODO: fix this logic, reduce duplication + //$a->page['content'] .= '<div class="tabs-wrapper">'; + + list($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) = network_query_get_sel_tab($a); + // if no tabs are selected, defaults to comments + if ($no_active=='active') $all_active='active'; + //echo "<pre>"; var_dump($no_active, $all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active); killme(); + // tabs $tabs = array( array( 'label' => t('Commented Order'), - 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . ((x($_GET,'cid')) ? '?f=&cid=' . $_GET['cid'] : ''), + 'url'=>$a->get_baseurl(true) . '/' . str_replace('/new', '', $a->cmd) . '?f=&order=comment' . ((x($_GET,'cid')) ? '&cid=' . $_GET['cid'] : ''), 'sel'=>$all_active, 'title'=> t('Sort by Comment Date'), ), @@ -215,8 +289,12 @@ function network_content(&$a, $update = 0) { // 'title' => t('Posts flagged as SPAM'), // ), - ); + + // save selected tab, but only if not in search or file mode + if(!x($_GET,'search') && !x($_GET,'file')) { + set_pconfig( local_user(), 'network.view','tab.selected',array($all_active, $postord_active, $conv_active, $new_active, $starred_active, $bookmarked_active, $spam_active) ); + } $arr = array('tabs' => $tabs); call_hooks('network_tabs', $arr); @@ -248,17 +326,7 @@ function network_content(&$a, $update = 0) { $cmax = ((x($_GET,'cmax')) ? intval($_GET['cmax']) : 99); $file = ((x($_GET,'file')) ? $_GET['file'] : ''); - if(($a->argc > 2) && $a->argv[2] === 'new') - $nouveau = true; - if($a->argc > 1) { - if($a->argv[1] === 'new') - $nouveau = true; - else { - $group = intval($a->argv[1]); - $def_acl = array('allow_gid' => '<' . $group . '>'); - } - } if(x($_GET,'search') || x($_GET,'file')) $nouveau = true; @@ -398,7 +466,17 @@ function network_content(&$a, $update = 0) { . "'; var profile_page = " . $a->pager['page'] . "; </script>\r\n"; } + $sql_extra3 = ''; + + if($datequery) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert('','',$datequery)))); + } + if($datequery2) { + $sql_extra3 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert('','',$datequery2)))); + } + $sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` "); + $sql_extra3 = (($nouveau) ? '' : $sql_extra3); if(x($_GET,'search')) { $search = escape_tags($_GET['search']); @@ -454,7 +532,7 @@ function network_content(&$a, $update = 0) { FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - $sql_extra2 + $sql_extra2 $sql_extra3 $sql_extra $sql_nets ", intval($_SESSION['uid']) ); @@ -506,7 +584,7 @@ function network_content(&$a, $update = 0) { WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 and `item`.`unseen` = 1 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 - $sql_extra $sql_nets ", + $sql_extra3 $sql_extra $sql_nets ", intval(local_user()) ); } @@ -516,7 +594,7 @@ function network_content(&$a, $update = 0) { WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 AND `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`parent` = `item`.`id` - $sql_extra $sql_nets + $sql_extra3 $sql_extra $sql_nets ORDER BY `item`.$ordering DESC $pager_sql ", intval(local_user()) ); diff --git a/mod/parse_url.php b/mod/parse_url.php index 27dac4d5d..cdf2223a8 100644 --- a/mod/parse_url.php +++ b/mod/parse_url.php @@ -215,8 +215,11 @@ function parse_url_content(&$a) { $i = fetch_url($image); if($i) { + // guess mimetype from headers or filename + $type = guess_image_type($image,true); + require_once('include/Photo.php'); - $ph = new Photo($i); + $ph = new Photo($i, $type); if($ph->is_valid()) { if($ph->getWidth() > 300 || $ph->getHeight() > 300) { $ph->scaleImage(300); diff --git a/mod/photo.php b/mod/photo.php index 3cd8250a9..dee483d83 100644 --- a/mod/photo.php +++ b/mod/photo.php @@ -1,6 +1,7 @@ <?php require_once('include/security.php'); +require_once('include/Photo.php'); function photo_init(&$a) { @@ -75,7 +76,7 @@ function photo_init(&$a) { break; } - $uid = str_replace('.jpg', '', $person); + $uid = str_replace(array('.jpg','.png'),array('',''), $person); $r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1", intval($resolution), @@ -83,9 +84,11 @@ function photo_init(&$a) { ); if(count($r)) { $data = $r[0]['data']; + $mimetype = $r[0]['type']; } if(! isset($data)) { $data = file_get_contents($default); + $mimetype = 'image/jpeg'; } } else { @@ -95,7 +98,9 @@ function photo_init(&$a) { */ $resolution = 0; - $photo = str_replace('.jpg','',$photo); + foreach( Photo::supportedTypes() as $m=>$e){ + $photo = str_replace(".$e",'',$photo); + } if(substr($photo,-2,1) == '-') { $resolution = intval(substr($photo,-1,1)); @@ -119,6 +124,7 @@ function photo_init(&$a) { if(count($r)) { $data = $r[0]['data']; + $mimetype = $r[0]['type']; } else { @@ -136,6 +142,7 @@ function photo_init(&$a) { ); if(count($r)) { $data = file_get_contents('images/nosign.jpg'); + $mimetype = 'image/jpeg'; $prvcachecontrol = true; } } @@ -148,12 +155,15 @@ function photo_init(&$a) { case 4: $data = file_get_contents('images/person-175.jpg'); + $mimetype = 'image/jpeg'; break; case 5: $data = file_get_contents('images/person-80.jpg'); + $mimetype = 'image/jpeg'; break; case 6: $data = file_get_contents('images/person-48.jpg'); + $mimetype = 'image/jpeg'; break; default: killme(); @@ -164,11 +174,11 @@ function photo_init(&$a) { } if(isset($customres) && $customres > 0 && $customres < 500) { - require_once('include/Photo.php'); - $ph = new Photo($data); + $ph = new Photo($data, $mimetype); if($ph->is_valid()) { $ph->scaleImageSquare($customres); $data = $ph->imageString(); + $mimetype = $ph->getType(); } } @@ -181,7 +191,7 @@ function photo_init(&$a) { header_remove('pragma'); } - header("Content-type: image/jpeg"); + header("Content-type: ".$mimetype); if($prvcachecontrol) { diff --git a/mod/photos.php b/mod/photos.php index 3ce6f9934..efeab8fa3 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -5,6 +5,7 @@ require_once('include/acl_selectors.php'); require_once('include/bbcode.php'); require_once('include/security.php'); + function photos_init(&$a) { @@ -105,6 +106,8 @@ function photos_post(&$a) { logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA); logger('mod_photos: FILES ' . print_r($_FILES,true), LOGGER_DATA); + $phototypes = Photo::supportedTypes(); + $can_post = false; $visitor = 0; @@ -311,7 +314,7 @@ function photos_post(&$a) { intval($page_owner_uid) ); if(count($r)) { - $ph = new Photo($r[0]['data']); + $ph = new Photo($r[0]['data'], $r[0]['type']); if($ph->is_valid()) { $ph->rotate(270); @@ -362,6 +365,7 @@ function photos_post(&$a) { intval($page_owner_uid) ); if(count($p)) { + $ext = $phototypes[$p[0]['type']]; $r = q("UPDATE `photo` SET `desc` = '%s', `album` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `resource-id` = '%s' AND `uid` = %d", dbesc($desc), dbesc($albname), @@ -386,7 +390,7 @@ function photos_post(&$a) { $title = ''; $uri = item_new_uri($a->get_hostname(),$page_owner_uid); - + $arr = array(); $arr['uid'] = $page_owner_uid; @@ -412,7 +416,7 @@ function photos_post(&$a) { $arr['origin'] = 1; $arr['body'] = '[url=' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $p[0]['resource-id'] . ']' - . '[img]' . $a->get_baseurl() . '/photo/' . $p[0]['resource-id'] . '-' . $p[0]['scale'] . '.jpg' . '[/img]' + . '[img]' . $a->get_baseurl() . '/photo/' . $p[0]['resource-id'] . '-' . $p[0]['scale'] . '.'. $ext . '[/img]' . '[/url]'; $item_id = item_store($arr); @@ -581,17 +585,17 @@ function photos_post(&$a) { $arr['inform'] = $tagged[2]; $arr['origin'] = 1; $arr['body'] = '[url=' . $tagged[1] . ']' . $tagged[0] . '[/url]' . ' ' . t('was tagged in a') . ' ' . '[url=' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . ']' . t('photo') . '[/url]' . ' ' . t('by') . ' ' . '[url=' . $owner_record['url'] . ']' . $owner_record['name'] . '[/url]' ; - $arr['body'] .= "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . ']' . '[img]' . $a->get_baseurl() . "/photo/" . $p[0]['resource-id'] . '-' . $best . '.jpg' . '[/img][/url]' . "\n" ; + $arr['body'] .= "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . ']' . '[img]' . $a->get_baseurl() . "/photo/" . $p[0]['resource-id'] . '-' . $best . '.' . $ext . '[/img][/url]' . "\n" ; $arr['object'] = '<object><type>' . ACTIVITY_OBJ_PERSON . '</type><title>' . $tagged[0] . '</title><id>' . $tagged[1] . '/' . $tagged[0] . '</id>'; $arr['object'] .= '<link>' . xmlify('<link rel="alternate" type="text/html" href="' . $tagged[1] . '" />' . "\n"); if($tagged[3]) - $arr['object'] .= xmlify('<link rel="photo" type="image/jpeg" href="' . $tagged[3]['photo'] . '" />' . "\n"); + $arr['object'] .= xmlify('<link rel="photo" type="'.$p[0]['type'].'" href="' . $tagged[3]['photo'] . '" />' . "\n"); $arr['object'] .= '</link></object>' . "\n"; $arr['target'] = '<target><type>' . ACTIVITY_OBJ_PHOTO . '</type><title>' . $p[0]['desc'] . '</title><id>' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . '</id>'; - $arr['target'] .= '<link>' . xmlify('<link rel="alternate" type="text/html" href="' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . '" />' . "\n" . '<link rel="preview" type="image/jpeg" href="' . $a->get_baseurl() . "/photo/" . $p[0]['resource-id'] . '-' . $best . '.jpg' . '" />') . '</link></target>'; + $arr['target'] .= '<link>' . xmlify('<link rel="alternate" type="text/html" href="' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $p[0]['resource-id'] . '" />' . "\n" . '<link rel="preview" type="'.$p[0]['type'].'" href="' . $a->get_baseurl() . "/photo/" . $p[0]['resource-id'] . '-' . $best . '.' . $ext . '" />') . '</link></target>'; $item_id = item_store($arr); if($item_id) { @@ -662,7 +666,7 @@ function photos_post(&$a) { $str_group_deny = perms2str(((is_array($_REQUEST['group_deny'])) ? $_REQUEST['group_deny'] : explode(',',$_REQUEST['group_deny']))); $str_contact_deny = perms2str(((is_array($_REQUEST['contact_deny'])) ? $_REQUEST['contact_deny'] : explode(',',$_REQUEST['contact_deny']))); - $ret = array('src' => '', 'filename' => '', 'filesize' => 0); + $ret = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); call_hooks('photo_post_file',$ret); @@ -670,15 +674,17 @@ function photos_post(&$a) { $src = $ret['src']; $filename = $ret['filename']; $filesize = $ret['filesize']; + $type = $ret['type']; } else { $src = $_FILES['userfile']['tmp_name']; $filename = basename($_FILES['userfile']['name']); $filesize = intval($_FILES['userfile']['size']); + $type = $_FILES['userfile']['type']; } + if ($type=="") $type=guess_image_type($filename); - - logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ' . $filesize . ' bytes', LOGGER_DEBUG); + logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); $maximagesize = get_config('system','maximagesize'); @@ -701,7 +707,7 @@ function photos_post(&$a) { logger('mod/photos.php: photos_post(): loading the contents of ' . $src , LOGGER_DEBUG); $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata); + $ph = new Photo($imagedata, $type); if(! $ph->is_valid()) { logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG); @@ -771,7 +777,7 @@ function photos_post(&$a) { $arr['origin'] = 1; $arr['body'] = '[url=' . $a->get_baseurl() . '/photos/' . $owner_record['nickname'] . '/image/' . $photo_hash . ']' - . '[img]' . $a->get_baseurl() . "/photo/{$photo_hash}-{$smallest}.jpg" . '[/img]' + . '[img]' . $a->get_baseurl() . "/photo/{$photo_hash}-{$smallest}.".$ph->getExt() . '[/img]' . '[/url]'; $item_id = item_store($arr); @@ -814,8 +820,8 @@ function photos_content(&$a) { notice( t('Public access denied.') . EOL); return; } - - + + require_once('include/bbcode.php'); require_once('include/security.php'); require_once('include/conversation.php'); @@ -825,6 +831,8 @@ function photos_content(&$a) { return; } + $phototypes = Photo::supportedTypes(); + $_SESSION['photo_return'] = $a->cmd; // @@ -991,7 +999,7 @@ function photos_content(&$a) { $a->set_pager_itemspage(20); } - $r = q("SELECT `resource-id`, `id`, `filename`, max(`scale`) AS `scale`, `desc` FROM `photo` WHERE `uid` = %d AND `album` = '%s' + $r = q("SELECT `resource-id`, `id`, `filename`, type, max(`scale`) AS `scale`, `desc` FROM `photo` WHERE `uid` = %d AND `album` = '%s' AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", intval($owner_uid), dbesc($album), @@ -1038,13 +1046,15 @@ function photos_content(&$a) { $twist = 'rotleft'; else $twist = 'rotright'; + + $ext = $phototypes[$rr['type']]; $o .= replace_macros($tpl,array( '$id' => $rr['id'], '$twist' => ' ' . $twist . rand(2,4), '$photolink' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'], '$phototitle' => t('View Photo'), - '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.jpg', + '$imgsrc' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext, '$imgalt' => template_escape($rr['filename']), '$desc'=> template_escape($rr['desc']) )); @@ -1158,9 +1168,9 @@ function photos_content(&$a) { $prevlink = array($prevlink, '<div class="icon prev"></div>') ; $photo = array( - 'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg', + 'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']], 'title'=> t('View Full Size'), - 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '?f=&_u=' . datetime_convert('','','','ymdhis') + 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . datetime_convert('','','','ymdhis') ); if($nextlink) @@ -1449,7 +1459,7 @@ function photos_content(&$a) { $a->set_pager_itemspage(20); } - $r = q("SELECT `resource-id`, `id`, `filename`, `album`, max(`scale`) AS `scale` FROM `photo` + $r = q("SELECT `resource-id`, `id`, `filename`, type, `album`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' $sql_extra GROUP BY `resource-id` ORDER BY `created` DESC LIMIT %d , %d", intval($a->data['user']['uid']), @@ -1469,13 +1479,14 @@ function photos_content(&$a) { $twist = 'rotleft'; else $twist = 'rotright'; - + $ext = $phototypes[$rr['type']]; + $photos[] = array( 'id' => $rr['id'], 'twist' => ' ' . $twist . rand(2,4), 'link' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'], 'title' => t('View Photo'), - 'src' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.jpg', + 'src' => $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext, 'alt' => template_escape($rr['filename']), 'album' => array( 'link' => $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($rr['album']), diff --git a/mod/profile.php b/mod/profile.php index 7658a9647..2ac8fe586 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -67,11 +67,23 @@ function profile_init(&$a) { function profile_content(&$a, $update = 0) { - if (x($a->category)) { - $category = $a->category; + $category = $datequery = $datequery2 = ''; + + if($a->argc > 2) { + for($x = 2; $x < $a->argc; $x ++) { + if(is_a_date_arg($a->argv[$x])) { + if($datequery) + $datequery2 = escape_tags($a->argv[$x]); + else + $datequery = escape_tags($a->argv[$x]); + } + else + $category = $a->argv[$x]; + } } - else { - $category = ((x($_GET,'category')) ? $_GET['category'] : ''); + + if(! x($category)) { + $category = ((x($_GET,'category')) ? $_GET['category'] : ''); } if(get_config('system','block_public') && (! local_user()) && (! remote_user())) { @@ -97,6 +109,7 @@ function profile_content(&$a, $update = 0) { } } + $contact = null; $remote_contact = false; @@ -200,16 +213,24 @@ function profile_content(&$a, $update = 0) { } else { - if(x($category)) { - $sql_extra .= file_tag_file_query('item',$category,'category'); + if(x($category)) { + $sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category')); } + if($datequery) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created <= '%s' ", dbesc(datetime_convert('','',$datequery)))); + } + if($datequery2) { + $sql_extra2 .= protect_sprintf(sprintf(" AND item.created >= '%s' ", dbesc(datetime_convert('','',$datequery2)))); + } + + $r = q("SELECT COUNT(*) AS `total` FROM `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1 - $sql_extra ", + $sql_extra $sql_extra2 ", intval($a->profile['profile_uid']) ); @@ -225,7 +246,7 @@ function profile_content(&$a, $update = 0) { WHERE `item`.`uid` = %d AND `item`.`visible` = 1 AND `item`.`deleted` = 0 and `item`.`moderated` = 0 AND `contact`.`blocked` = 0 AND `contact`.`pending` = 0 AND `item`.`id` = `item`.`parent` AND `item`.`wall` = 1 - $sql_extra + $sql_extra $sql_extra2 ORDER BY `item`.`created` DESC $pager_sql ", intval($a->profile['profile_uid']) diff --git a/mod/profile_photo.php b/mod/profile_photo.php index ace8dadd4..e44707f9b 100644 --- a/mod/profile_photo.php +++ b/mod/profile_photo.php @@ -53,7 +53,7 @@ function profile_photo_post(&$a) { $base_image = $r[0]; - $im = new Photo($base_image['data']); + $im = new Photo($base_image['data'], $base_image['type']); if($im->is_valid()) { $im->cropImage(175,$srcX,$srcY,$srcW,$srcH); @@ -108,7 +108,9 @@ function profile_photo_post(&$a) { $src = $_FILES['userfile']['tmp_name']; $filename = basename($_FILES['userfile']['name']); $filesize = intval($_FILES['userfile']['size']); - + $filetype = $_FILES['userfile']['type']; + if ($filetype=="") $filetype=guess_image_type($filename); + $maximagesize = get_config('system','maximagesize'); if(($maximagesize) && ($filesize > $maximagesize)) { @@ -118,7 +120,7 @@ function profile_photo_post(&$a) { } $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata); + $ph = new Photo($imagedata, $filetype); if(! $ph->is_valid()) { notice( t('Unable to process image.') . EOL ); @@ -193,7 +195,7 @@ function profile_photo_content(&$a) { goaway($a->get_baseurl() . '/profiles'); return; // NOTREACHED } - $ph = new Photo($r[0]['data']); + $ph = new Photo($r[0]['data'], $r[0]['type']); profile_photo_crop_ui_head($a, $ph); // go ahead as we have jus uploaded a new photo to crop } @@ -214,7 +216,7 @@ function profile_photo_content(&$a) { return $o; } else { - $filename = $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'] . '.jpg'; + $filename = $a->config['imagecrop'] . '-' . $a->config['imagecrop_resolution'] . '.'.$a->config['imagecrop_ext']; $resolution = $a->config['imagecrop_resolution']; $tpl = get_markup_template("cropbody.tpl"); $o .= replace_macros($tpl,array( @@ -268,6 +270,7 @@ function profile_photo_crop_ui_head(&$a, $ph){ $a->config['imagecrop'] = $hash; $a->config['imagecrop_resolution'] = $smallest; + $a->config['imagecrop_ext'] = $ph->getExt(); $a->page['htmlhead'] .= get_markup_template("crophead.tpl"); return; }} diff --git a/mod/pubsub.php b/mod/pubsub.php index 93d50ef90..64fbda289 100644 --- a/mod/pubsub.php +++ b/mod/pubsub.php @@ -47,22 +47,30 @@ function pubsub_init(&$a) { $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `account_expired` = 0 LIMIT 1", dbesc($nick) ); - if(! count($r)) + if(! count($r)) { + logger('pubsub: local account not found: ' . $nick); hub_return(false, ''); + } $owner = $r[0]; $sql_extra = ((strlen($hub_verify)) ? sprintf(" AND `hub-verify` = '%s' ", dbesc($hub_verify)) : ''); - $r = q("SELECT * FROM `contact` WHERE `poll` = '%s' AND `id` = %d AND `uid` = %d + $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d AND `blocked` = 0 AND `pending` = 0 $sql_extra LIMIT 1", - dbesc($hub_topic), intval($contact_id), intval($owner['uid']) ); - if(! count($r)) + if(! count($r)) { + logger('pubsub: contact not found.'); hub_return(false, ''); + } + + if(! link_compare($hub_topic,$r[0]['poll'])) { + logger('pubsub: hub topic ' . $hub_topic . ' != ' . $r[0]['poll']); + // should abort but let's humour them. + } $contact = $r[0]; diff --git a/mod/salmon.php b/mod/salmon.php index 6172d17a1..1e16f9d14 100644 --- a/mod/salmon.php +++ b/mod/salmon.php @@ -170,14 +170,28 @@ function salmon_post(&$a) { * */ - $r = q("SELECT * FROM `contact` WHERE `network` = 'stat' AND ( `url` = '%s' OR `alias` = '%s') + $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND ( `url` = '%s' OR `alias` = '%s' ) AND `uid` = %d LIMIT 1", + dbesc(NETWORK_OSTATUS), dbesc($author_link), dbesc($author_link), intval($importer['uid']) ); if(! count($r)) { logger('mod-salmon: Author unknown to us.'); + if(get_pconfig($importer['uid'],'system','ostatus_autofriend')) { + require_once('include/follow.php'); + $result = new_contact($importer['uid'],$author_link); + if($result['success']) { + $r = q("SELECT * FROM `contact` WHERE `network` = '%s' AND ( `url` = '%s' OR `alias` = '%s' ) + AND `uid` = %d LIMIT 1", + dbesc(NETWORK_OSTATUS), + dbesc($author_link), + dbesc($author_link), + intval($importer['uid']) + ); + } + } } // is this a follower? Or have we ignored the person? diff --git a/mod/wall_upload.php b/mod/wall_upload.php index fa66561e8..4b81f8d1c 100644 --- a/mod/wall_upload.php +++ b/mod/wall_upload.php @@ -57,17 +57,20 @@ function wall_upload_post(&$a) { if(! x($_FILES,'userfile') && ! x($_FILES,'media')) killme(); - if(x($_FILES,'userfile')) { - $src = $_FILES['userfile']['tmp_name']; - $filename = basename($_FILES['userfile']['name']); - $filesize = intval($_FILES['userfile']['size']); - } - elseif(x($_FILES,'media')) { - $src = $_FILES['media']['tmp_name']; - $filename = basename($_FILES['media']['name']); - $filesize = intval($_FILES['media']['size']); - } - + if(x($_FILES,'userfile')) { + $src = $_FILES['userfile']['tmp_name']; + $filename = basename($_FILES['userfile']['name']); + $filesize = intval($_FILES['userfile']['size']); + $filetype = $_FILES['userfile']['type']; + } + elseif(x($_FILES,'media')) { + $src = $_FILES['media']['tmp_name']; + $filename = basename($_FILES['media']['name']); + $filesize = intval($_FILES['media']['size']); + $filetype = $_FILES['media']['type']; + } + + if ($filetype=="") $filetype=guess_image_type($filename); $maximagesize = get_config('system','maximagesize'); if(($maximagesize) && ($filesize > $maximagesize)) { @@ -77,7 +80,7 @@ function wall_upload_post(&$a) { } $imagedata = @file_get_contents($src); - $ph = new Photo($imagedata); + $ph = new Photo($imagedata, $filetype); if(! $ph->is_valid()) { echo ( t('Unable to process image.') . EOL); @@ -123,19 +126,19 @@ function wall_upload_post(&$a) { /* mod Waitman Gobble NO WARRANTY */ //if we get the signal then return the image url info in BBCODE, otherwise this outputs the info and bails (for the ajax image uploader on wall post) - if ($_REQUEST['hush']!='yeah') { + if ($_REQUEST['hush']!='yeah') { /*existing code*/ if(local_user() && intval(get_pconfig(local_user(),'system','plaintext'))) - echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]\n\n"; + echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]\n\n"; else - echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />"; + echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."\" alt=\"$basename\" /></a><br /><br />"; /*existing code*/ } else { - $m = '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]"; + $m = '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.".$ph->getExt()."[/img][/url]"; return($m); - } + } /* mod Waitman Gobble NO WARRANTY */ killme(); diff --git a/update.php b/update.php index 35a6771b0..0f7bf664d 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1148 ); +define( 'UPDATE_VERSION' , 1149 ); /** * @@ -1283,3 +1283,9 @@ function update_1147() { return UPDATE_SUCCESS ; } +function update_1148() { + $r = q("ALTER TABLE photo ADD type CHAR(128) NOT NULL DEFAULT 'image/jpeg' AFTER filename"); + if (!$r) + return UPDATE_FAILED; + return UPDATE_SUCCESS; +} diff --git a/util/messages.po b/util/messages.po index ba1f927cc..5264e740f 100644 --- a/util/messages.po +++ b/util/messages.po @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: 3.0.1366\n" +"Project-Id-Version: 3.0.1371\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-06-06 10:00-0700\n" +"POT-Creation-Date: 2012-06-11 10:00-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -36,7 +36,7 @@ msgstr "" #: ../../mod/crepair.php:115 ../../mod/wall_attach.php:44 #: ../../mod/fsuggest.php:78 ../../mod/events.php:138 ../../mod/api.php:26 -#: ../../mod/api.php:31 ../../mod/photos.php:130 ../../mod/photos.php:920 +#: ../../mod/api.php:31 ../../mod/photos.php:133 ../../mod/photos.php:928 #: ../../mod/editpost.php:10 ../../mod/install.php:151 #: ../../mod/notifications.php:66 ../../mod/contacts.php:145 #: ../../mod/settings.php:106 ../../mod/settings.php:537 @@ -47,15 +47,15 @@ msgstr "" #: ../../mod/group.php:19 ../../mod/viewcontacts.php:22 #: ../../mod/register.php:38 ../../mod/regmod.php:116 ../../mod/item.php:124 #: ../../mod/item.php:140 ../../mod/profile_photo.php:19 -#: ../../mod/profile_photo.php:139 ../../mod/profile_photo.php:150 -#: ../../mod/profile_photo.php:163 ../../mod/message.php:45 +#: ../../mod/profile_photo.php:141 ../../mod/profile_photo.php:152 +#: ../../mod/profile_photo.php:165 ../../mod/message.php:45 #: ../../mod/message.php:97 ../../mod/allfriends.php:9 #: ../../mod/nogroup.php:25 ../../mod/wall_upload.php:53 #: ../../mod/follow.php:9 ../../mod/display.php:138 ../../mod/profiles.php:7 #: ../../mod/profiles.php:385 ../../mod/delegate.php:6 #: ../../mod/suggest.php:28 ../../mod/invite.php:13 ../../mod/invite.php:81 #: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:503 -#: ../../addon/dav/layout.fnk.php:387 ../../include/items.php:3332 +#: ../../addon/dav/layout.fnk.php:353 ../../include/items.php:3355 #: ../../index.php:306 msgid "Permission denied." msgstr "" @@ -86,7 +86,7 @@ msgid "Return to contact editor" msgstr "" #: ../../mod/crepair.php:148 ../../mod/settings.php:557 -#: ../../mod/settings.php:583 ../../mod/admin.php:656 ../../mod/admin.php:665 +#: ../../mod/settings.php:583 ../../mod/admin.php:659 ../../mod/admin.php:668 msgid "Name" msgstr "" @@ -123,17 +123,18 @@ msgid "New photo from this URL" msgstr "" #: ../../mod/crepair.php:166 ../../mod/fsuggest.php:107 -#: ../../mod/events.php:428 ../../mod/photos.php:955 ../../mod/photos.php:1013 -#: ../../mod/photos.php:1256 ../../mod/photos.php:1296 -#: ../../mod/photos.php:1336 ../../mod/photos.php:1367 +#: ../../mod/events.php:428 ../../mod/photos.php:963 ../../mod/photos.php:1021 +#: ../../mod/photos.php:1266 ../../mod/photos.php:1306 +#: ../../mod/photos.php:1346 ../../mod/photos.php:1377 #: ../../mod/install.php:246 ../../mod/install.php:284 #: ../../mod/localtime.php:45 ../../mod/contacts.php:342 #: ../../mod/settings.php:555 ../../mod/settings.php:701 #: ../../mod/settings.php:762 ../../mod/settings.php:969 #: ../../mod/manage.php:109 ../../mod/group.php:85 ../../mod/message.php:216 -#: ../../mod/admin.php:417 ../../mod/admin.php:653 ../../mod/admin.php:789 -#: ../../mod/admin.php:988 ../../mod/admin.php:1075 ../../mod/profiles.php:554 +#: ../../mod/admin.php:420 ../../mod/admin.php:656 ../../mod/admin.php:792 +#: ../../mod/admin.php:991 ../../mod/admin.php:1078 ../../mod/profiles.php:554 #: ../../mod/invite.php:119 ../../addon/facebook/facebook.php:605 +#: ../../addon/snautofollow/snautofollow.php:64 #: ../../addon/yourls/yourls.php:76 ../../addon/ljpost/ljpost.php:93 #: ../../addon/nsfw/nsfw.php:57 ../../addon/planets/planets.php:158 #: ../../addon/uhremotestorage/uhremotestorage.php:89 @@ -155,7 +156,7 @@ msgstr "" #: ../../addon/statusnet/statusnet.php:353 #: ../../addon/statusnet/statusnet.php:561 ../../addon/tumblr/tumblr.php:90 #: ../../addon/numfriends/numfriends.php:85 ../../addon/gnot/gnot.php:88 -#: ../../addon/wppost/wppost.php:109 ../../addon/showmore/showmore.php:48 +#: ../../addon/wppost/wppost.php:110 ../../addon/showmore/showmore.php:48 #: ../../addon/piwik/piwik.php:89 ../../addon/twitter/twitter.php:180 #: ../../addon/twitter/twitter.php:209 ../../addon/twitter/twitter.php:381 #: ../../addon/irc/irc.php:55 ../../addon/blogger/blogger.php:102 @@ -172,7 +173,7 @@ msgstr "" msgid "Help:" msgstr "" -#: ../../mod/help.php:34 ../../addon/dav/layout.fnk.php:112 +#: ../../mod/help.php:34 ../../addon/dav/layout.fnk.php:116 #: ../../include/nav.php:86 msgid "Help" msgstr "" @@ -224,7 +225,7 @@ msgid "link to source" msgstr "" #: ../../mod/events.php:324 ../../view/theme/diabook/theme.php:131 -#: ../../include/nav.php:52 ../../boot.php:1520 +#: ../../include/nav.php:52 ../../boot.php:1525 msgid "Events" msgstr "" @@ -232,12 +233,12 @@ msgstr "" msgid "Create New Event" msgstr "" -#: ../../mod/events.php:326 ../../addon/dav/layout.fnk.php:147 +#: ../../mod/events.php:326 ../../addon/dav/layout.fnk.php:154 msgid "Previous" msgstr "" #: ../../mod/events.php:327 ../../mod/install.php:205 -#: ../../addon/dav/layout.fnk.php:150 +#: ../../addon/dav/layout.fnk.php:157 msgid "Next" msgstr "" @@ -275,7 +276,7 @@ msgid "Description:" msgstr "" #: ../../mod/events.php:423 ../../include/event.php:37 -#: ../../include/bb2diaspora.php:265 ../../boot.php:1100 +#: ../../include/bb2diaspora.php:265 ../../boot.php:1105 msgid "Location:" msgstr "" @@ -352,58 +353,58 @@ msgstr "" msgid "No" msgstr "" -#: ../../mod/photos.php:43 ../../boot.php:1514 +#: ../../mod/photos.php:44 ../../boot.php:1519 msgid "Photo Albums" msgstr "" -#: ../../mod/photos.php:51 ../../mod/photos.php:151 ../../mod/photos.php:934 -#: ../../mod/photos.php:1005 ../../mod/photos.php:1020 -#: ../../mod/photos.php:1445 ../../mod/photos.php:1457 +#: ../../mod/photos.php:52 ../../mod/photos.php:154 ../../mod/photos.php:942 +#: ../../mod/photos.php:1013 ../../mod/photos.php:1028 +#: ../../mod/photos.php:1455 ../../mod/photos.php:1467 #: ../../addon/communityhome/communityhome.php:110 #: ../../view/theme/diabook/theme.php:598 msgid "Contact Photos" msgstr "" -#: ../../mod/photos.php:58 ../../mod/photos.php:1030 ../../mod/photos.php:1494 +#: ../../mod/photos.php:59 ../../mod/photos.php:1038 ../../mod/photos.php:1505 msgid "Upload New Photos" msgstr "" -#: ../../mod/photos.php:69 ../../mod/settings.php:21 +#: ../../mod/photos.php:70 ../../mod/settings.php:21 msgid "everybody" msgstr "" -#: ../../mod/photos.php:140 +#: ../../mod/photos.php:143 msgid "Contact information unavailable" msgstr "" -#: ../../mod/photos.php:151 ../../mod/photos.php:652 ../../mod/photos.php:1005 -#: ../../mod/photos.php:1020 ../../mod/profile_photo.php:60 +#: ../../mod/photos.php:154 ../../mod/photos.php:656 ../../mod/photos.php:1013 +#: ../../mod/photos.php:1028 ../../mod/profile_photo.php:60 #: ../../mod/profile_photo.php:67 ../../mod/profile_photo.php:74 -#: ../../mod/profile_photo.php:174 ../../mod/profile_photo.php:252 -#: ../../mod/profile_photo.php:261 +#: ../../mod/profile_photo.php:176 ../../mod/profile_photo.php:254 +#: ../../mod/profile_photo.php:263 #: ../../addon/communityhome/communityhome.php:111 -#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:294 -#: ../../include/user.php:301 ../../include/user.php:308 +#: ../../view/theme/diabook/theme.php:599 ../../include/user.php:298 +#: ../../include/user.php:305 ../../include/user.php:312 msgid "Profile Photos" msgstr "" -#: ../../mod/photos.php:161 +#: ../../mod/photos.php:164 msgid "Album not found." msgstr "" -#: ../../mod/photos.php:179 ../../mod/photos.php:1014 +#: ../../mod/photos.php:182 ../../mod/photos.php:1022 msgid "Delete Album" msgstr "" -#: ../../mod/photos.php:242 ../../mod/photos.php:1257 +#: ../../mod/photos.php:245 ../../mod/photos.php:1267 msgid "Delete Photo" msgstr "" -#: ../../mod/photos.php:583 +#: ../../mod/photos.php:587 msgid "was tagged in a" msgstr "" -#: ../../mod/photos.php:583 ../../mod/like.php:185 ../../mod/tagger.php:70 +#: ../../mod/photos.php:587 ../../mod/like.php:185 ../../mod/tagger.php:70 #: ../../addon/communityhome/communityhome.php:163 #: ../../view/theme/diabook/theme.php:570 ../../include/text.php:1316 #: ../../include/diaspora.php:1671 ../../include/conversation.php:53 @@ -411,172 +412,172 @@ msgstr "" msgid "photo" msgstr "" -#: ../../mod/photos.php:583 +#: ../../mod/photos.php:587 msgid "by" msgstr "" -#: ../../mod/photos.php:686 ../../addon/js_upload/js_upload.php:315 +#: ../../mod/photos.php:692 ../../addon/js_upload/js_upload.php:315 msgid "Image exceeds size limit of " msgstr "" -#: ../../mod/photos.php:694 +#: ../../mod/photos.php:700 msgid "Image file is empty." msgstr "" -#: ../../mod/photos.php:708 ../../mod/profile_photo.php:124 -#: ../../mod/wall_upload.php:83 +#: ../../mod/photos.php:714 ../../mod/profile_photo.php:126 +#: ../../mod/wall_upload.php:86 msgid "Unable to process image." msgstr "" -#: ../../mod/photos.php:728 ../../mod/profile_photo.php:257 -#: ../../mod/wall_upload.php:102 +#: ../../mod/photos.php:734 ../../mod/profile_photo.php:259 +#: ../../mod/wall_upload.php:105 msgid "Image upload failed." msgstr "" -#: ../../mod/photos.php:814 ../../mod/community.php:16 +#: ../../mod/photos.php:820 ../../mod/community.php:16 #: ../../mod/dfrn_request.php:744 ../../mod/viewcontacts.php:17 #: ../../mod/display.php:7 ../../mod/search.php:71 ../../mod/directory.php:29 msgid "Public access denied." msgstr "" -#: ../../mod/photos.php:824 +#: ../../mod/photos.php:830 msgid "No photos selected" msgstr "" -#: ../../mod/photos.php:901 +#: ../../mod/photos.php:909 msgid "Access to this item is restricted." msgstr "" -#: ../../mod/photos.php:962 +#: ../../mod/photos.php:970 msgid "Upload Photos" msgstr "" -#: ../../mod/photos.php:965 ../../mod/photos.php:1009 +#: ../../mod/photos.php:973 ../../mod/photos.php:1017 msgid "New album name: " msgstr "" -#: ../../mod/photos.php:966 +#: ../../mod/photos.php:974 msgid "or existing album name: " msgstr "" -#: ../../mod/photos.php:967 +#: ../../mod/photos.php:975 msgid "Do not show a status post for this upload" msgstr "" -#: ../../mod/photos.php:969 ../../mod/photos.php:1252 +#: ../../mod/photos.php:977 ../../mod/photos.php:1262 msgid "Permissions" msgstr "" -#: ../../mod/photos.php:1024 +#: ../../mod/photos.php:1032 msgid "Edit Album" msgstr "" -#: ../../mod/photos.php:1046 ../../mod/photos.php:1477 +#: ../../mod/photos.php:1056 ../../mod/photos.php:1488 msgid "View Photo" msgstr "" -#: ../../mod/photos.php:1081 +#: ../../mod/photos.php:1091 msgid "Permission denied. Access to this item may be restricted." msgstr "" -#: ../../mod/photos.php:1083 +#: ../../mod/photos.php:1093 msgid "Photo not available" msgstr "" -#: ../../mod/photos.php:1133 +#: ../../mod/photos.php:1143 msgid "View photo" msgstr "" -#: ../../mod/photos.php:1133 +#: ../../mod/photos.php:1143 msgid "Edit photo" msgstr "" -#: ../../mod/photos.php:1134 +#: ../../mod/photos.php:1144 msgid "Use as profile photo" msgstr "" -#: ../../mod/photos.php:1140 ../../include/conversation.php:490 +#: ../../mod/photos.php:1150 ../../include/conversation.php:490 msgid "Private Message" msgstr "" -#: ../../mod/photos.php:1162 +#: ../../mod/photos.php:1172 msgid "View Full Size" msgstr "" -#: ../../mod/photos.php:1230 +#: ../../mod/photos.php:1240 msgid "Tags: " msgstr "" -#: ../../mod/photos.php:1233 +#: ../../mod/photos.php:1243 msgid "[Remove any tag]" msgstr "" -#: ../../mod/photos.php:1243 +#: ../../mod/photos.php:1253 msgid "Rotate CW" msgstr "" -#: ../../mod/photos.php:1245 +#: ../../mod/photos.php:1255 msgid "New album name" msgstr "" -#: ../../mod/photos.php:1248 +#: ../../mod/photos.php:1258 msgid "Caption" msgstr "" -#: ../../mod/photos.php:1250 +#: ../../mod/photos.php:1260 msgid "Add a Tag" msgstr "" -#: ../../mod/photos.php:1254 +#: ../../mod/photos.php:1264 msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping" msgstr "" -#: ../../mod/photos.php:1274 ../../include/conversation.php:554 +#: ../../mod/photos.php:1284 ../../include/conversation.php:554 msgid "I like this (toggle)" msgstr "" -#: ../../mod/photos.php:1275 ../../include/conversation.php:555 +#: ../../mod/photos.php:1285 ../../include/conversation.php:555 msgid "I don't like this (toggle)" msgstr "" -#: ../../mod/photos.php:1276 ../../include/conversation.php:989 +#: ../../mod/photos.php:1286 ../../include/conversation.php:989 msgid "Share" msgstr "" -#: ../../mod/photos.php:1277 ../../mod/editpost.php:104 +#: ../../mod/photos.php:1287 ../../mod/editpost.php:104 #: ../../mod/wallmessage.php:145 ../../mod/message.php:215 #: ../../mod/message.php:410 ../../include/conversation.php:371 #: ../../include/conversation.php:731 ../../include/conversation.php:1008 msgid "Please wait" msgstr "" -#: ../../mod/photos.php:1293 ../../mod/photos.php:1333 -#: ../../mod/photos.php:1364 ../../include/conversation.php:577 +#: ../../mod/photos.php:1303 ../../mod/photos.php:1343 +#: ../../mod/photos.php:1374 ../../include/conversation.php:577 msgid "This is you" msgstr "" -#: ../../mod/photos.php:1295 ../../mod/photos.php:1335 -#: ../../mod/photos.php:1366 ../../include/conversation.php:579 -#: ../../boot.php:514 +#: ../../mod/photos.php:1305 ../../mod/photos.php:1345 +#: ../../mod/photos.php:1376 ../../include/conversation.php:579 +#: ../../boot.php:519 msgid "Comment" msgstr "" -#: ../../mod/photos.php:1297 ../../mod/editpost.php:125 +#: ../../mod/photos.php:1307 ../../mod/editpost.php:125 #: ../../include/conversation.php:589 ../../include/conversation.php:1026 msgid "Preview" msgstr "" -#: ../../mod/photos.php:1394 ../../mod/settings.php:618 -#: ../../mod/settings.php:699 ../../mod/group.php:168 ../../mod/admin.php:660 +#: ../../mod/photos.php:1404 ../../mod/settings.php:618 +#: ../../mod/settings.php:699 ../../mod/group.php:168 ../../mod/admin.php:663 #: ../../include/conversation.php:328 ../../include/conversation.php:609 msgid "Delete" msgstr "" -#: ../../mod/photos.php:1483 +#: ../../mod/photos.php:1494 msgid "View Album" msgstr "" -#: ../../mod/photos.php:1492 +#: ../../mod/photos.php:1503 msgid "Recent Photos" msgstr "" @@ -819,7 +820,7 @@ msgstr "" msgid "Confirm" msgstr "" -#: ../../mod/dfrn_request.php:700 ../../include/items.php:2733 +#: ../../mod/dfrn_request.php:700 ../../include/items.php:2751 msgid "[Name Withheld]" msgstr "" @@ -1191,7 +1192,7 @@ msgid "is interested in:" msgstr "" #: ../../mod/match.php:58 ../../mod/suggest.php:59 -#: ../../include/contact_widgets.php:9 ../../boot.php:1044 +#: ../../include/contact_widgets.php:9 ../../boot.php:1049 msgid "Connect" msgstr "" @@ -1235,7 +1236,7 @@ msgstr "" msgid "Network" msgstr "" -#: ../../mod/notifications.php:85 ../../mod/network.php:188 +#: ../../mod/notifications.php:85 ../../mod/network.php:238 msgid "Personal" msgstr "" @@ -1288,7 +1289,7 @@ msgid "if applicable" msgstr "" #: ../../mod/notifications.php:157 ../../mod/notifications.php:204 -#: ../../mod/admin.php:658 +#: ../../mod/admin.php:661 msgid "Approve" msgstr "" @@ -1489,12 +1490,12 @@ msgid "View all contacts" msgstr "" #: ../../mod/contacts.php:310 ../../mod/contacts.php:367 -#: ../../mod/admin.php:662 +#: ../../mod/admin.php:665 msgid "Unblock" msgstr "" #: ../../mod/contacts.php:310 ../../mod/contacts.php:367 -#: ../../mod/admin.php:661 +#: ../../mod/admin.php:664 msgid "Block" msgstr "" @@ -1587,7 +1588,7 @@ msgstr "" msgid "Update public posts" msgstr "" -#: ../../mod/contacts.php:364 ../../mod/admin.php:1133 +#: ../../mod/contacts.php:364 ../../mod/admin.php:1136 msgid "Update now" msgstr "" @@ -1717,8 +1718,8 @@ msgstr "" #: ../../addon/facebook/facebook.php:688 #: ../../addon/facebook/facebook.php:1178 #: ../../addon/public_server/public_server.php:62 -#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:2742 -#: ../../boot.php:694 +#: ../../addon/testdrive/testdrive.php:67 ../../include/items.php:2760 +#: ../../boot.php:699 msgid "Administrator" msgstr "" @@ -1728,7 +1729,7 @@ msgid "" "Password reset failed." msgstr "" -#: ../../mod/lostpass.php:83 ../../boot.php:826 +#: ../../mod/lostpass.php:83 ../../boot.php:831 msgid "Password Reset" msgstr "" @@ -1800,8 +1801,8 @@ msgstr "" msgid "Remove account" msgstr "" -#: ../../mod/settings.php:89 ../../mod/admin.php:748 ../../mod/admin.php:953 -#: ../../addon/dav/layout.fnk.php:112 ../../addon/mathjax/mathjax.php:36 +#: ../../mod/settings.php:89 ../../mod/admin.php:751 ../../mod/admin.php:956 +#: ../../addon/dav/layout.fnk.php:116 ../../addon/mathjax/mathjax.php:36 #: ../../view/theme/diabook/theme.php:643 #: ../../view/theme/diabook/theme.php:773 ../../include/nav.php:137 msgid "Settings" @@ -2121,7 +2122,7 @@ msgstr "" msgid "Profile is <strong>not published</strong>." msgstr "" -#: ../../mod/settings.php:937 ../../mod/profile_photo.php:211 +#: ../../mod/settings.php:937 ../../mod/profile_photo.php:213 msgid "or" msgstr "" @@ -2307,67 +2308,67 @@ msgstr "" msgid "Select an identity to manage: " msgstr "" -#: ../../mod/network.php:43 +#: ../../mod/network.php:67 msgid "Search Results For:" msgstr "" -#: ../../mod/network.php:82 ../../mod/search.php:16 +#: ../../mod/network.php:106 ../../mod/search.php:16 msgid "Remove term" msgstr "" -#: ../../mod/network.php:91 ../../mod/search.php:13 +#: ../../mod/network.php:115 ../../mod/search.php:13 msgid "Saved Searches" msgstr "" -#: ../../mod/network.php:92 ../../include/group.php:244 +#: ../../mod/network.php:116 ../../include/group.php:244 msgid "add" msgstr "" -#: ../../mod/network.php:175 +#: ../../mod/network.php:225 msgid "Commented Order" msgstr "" -#: ../../mod/network.php:178 +#: ../../mod/network.php:228 msgid "Sort by Comment Date" msgstr "" -#: ../../mod/network.php:181 +#: ../../mod/network.php:231 msgid "Posted Order" msgstr "" -#: ../../mod/network.php:184 +#: ../../mod/network.php:234 msgid "Sort by Post Date" msgstr "" -#: ../../mod/network.php:191 +#: ../../mod/network.php:241 msgid "Posts that mention or involve you" msgstr "" -#: ../../mod/network.php:194 +#: ../../mod/network.php:244 msgid "New" msgstr "" -#: ../../mod/network.php:197 +#: ../../mod/network.php:247 msgid "Activity Stream - by date" msgstr "" -#: ../../mod/network.php:200 +#: ../../mod/network.php:250 msgid "Starred" msgstr "" -#: ../../mod/network.php:203 +#: ../../mod/network.php:253 msgid "Favourite Posts" msgstr "" -#: ../../mod/network.php:206 +#: ../../mod/network.php:256 msgid "Shared Links" msgstr "" -#: ../../mod/network.php:209 +#: ../../mod/network.php:259 msgid "Interesting Links" msgstr "" -#: ../../mod/network.php:285 +#: ../../mod/network.php:339 #, php-format msgid "Warning: This group contains %s member from an insecure network." msgid_plural "" @@ -2375,42 +2376,42 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: ../../mod/network.php:288 +#: ../../mod/network.php:342 msgid "Private messages to this group are at risk of public disclosure." msgstr "" -#: ../../mod/network.php:333 +#: ../../mod/network.php:387 msgid "No such group" msgstr "" -#: ../../mod/network.php:344 +#: ../../mod/network.php:398 msgid "Group is empty" msgstr "" -#: ../../mod/network.php:348 +#: ../../mod/network.php:402 msgid "Group: " msgstr "" -#: ../../mod/network.php:358 +#: ../../mod/network.php:412 msgid "Contact: " msgstr "" -#: ../../mod/network.php:360 +#: ../../mod/network.php:414 msgid "Private messages to this person are at risk of public disclosure." msgstr "" -#: ../../mod/network.php:365 +#: ../../mod/network.php:419 msgid "Invalid contact." msgstr "" -#: ../../mod/notes.php:44 ../../boot.php:1526 +#: ../../mod/notes.php:44 ../../boot.php:1531 msgid "Personal Notes" msgstr "" #: ../../mod/notes.php:63 ../../mod/filer.php:30 #: ../../addon/facebook/facebook.php:756 -#: ../../addon/privacy_image_cache/privacy_image_cache.php:150 -#: ../../addon/dav/layout.fnk.php:418 ../../include/text.php:652 +#: ../../addon/privacy_image_cache/privacy_image_cache.php:185 +#: ../../addon/dav/layout.fnk.php:384 ../../include/text.php:652 msgid "Save" msgstr "" @@ -2654,7 +2655,7 @@ msgstr "" #: ../../mod/profperm.php:103 ../../view/theme/diabook/theme.php:128 #: ../../include/profile_advanced.php:7 ../../include/profile_advanced.php:79 -#: ../../include/nav.php:50 ../../boot.php:1505 +#: ../../include/nav.php:50 ../../boot.php:1510 msgid "Profile" msgstr "" @@ -2735,7 +2736,7 @@ msgstr "" msgid "Your invitation ID: " msgstr "" -#: ../../mod/register.php:255 ../../mod/admin.php:418 +#: ../../mod/register.php:255 ../../mod/admin.php:421 msgid "Registration" msgstr "" @@ -2758,7 +2759,7 @@ msgstr "" msgid "Choose a nickname: " msgstr "" -#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:792 +#: ../../mod/register.php:269 ../../include/nav.php:81 ../../boot.php:797 msgid "Register" msgstr "" @@ -2790,9 +2791,9 @@ msgstr "" msgid "%1$s doesn't like %2$s's %3$s" msgstr "" -#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:156 -#: ../../mod/admin.php:697 ../../mod/admin.php:896 ../../mod/display.php:37 -#: ../../mod/display.php:142 ../../include/items.php:3179 +#: ../../mod/notice.php:15 ../../mod/viewsrc.php:15 ../../mod/admin.php:159 +#: ../../mod/admin.php:700 ../../mod/admin.php:899 ../../mod/display.php:37 +#: ../../mod/display.php:142 ../../include/items.php:3202 msgid "Item not found." msgstr "" @@ -2800,12 +2801,12 @@ msgstr "" msgid "Access denied." msgstr "" -#: ../../mod/fbrowser.php:23 ../../view/theme/diabook/theme.php:130 -#: ../../include/nav.php:51 ../../boot.php:1511 +#: ../../mod/fbrowser.php:25 ../../view/theme/diabook/theme.php:130 +#: ../../include/nav.php:51 ../../boot.php:1516 msgid "Photos" msgstr "" -#: ../../mod/fbrowser.php:86 +#: ../../mod/fbrowser.php:96 msgid "Files" msgstr "" @@ -2830,8 +2831,8 @@ msgstr "" msgid "Empty post discarded." msgstr "" -#: ../../mod/item.php:379 ../../mod/wall_upload.php:99 -#: ../../mod/wall_upload.php:108 ../../mod/wall_upload.php:115 +#: ../../mod/item.php:379 ../../mod/wall_upload.php:102 +#: ../../mod/wall_upload.php:111 ../../mod/wall_upload.php:118 #: ../../include/message.php:144 msgid "Wall Photos" msgstr "" @@ -2867,7 +2868,7 @@ msgid "Image uploaded but image cropping failed." msgstr "" #: ../../mod/profile_photo.php:63 ../../mod/profile_photo.php:70 -#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:264 +#: ../../mod/profile_photo.php:77 ../../mod/profile_photo.php:266 #, php-format msgid "Image size reduction [%s] failed." msgstr "" @@ -2882,44 +2883,44 @@ msgstr "" msgid "Unable to process image" msgstr "" -#: ../../mod/profile_photo.php:115 ../../mod/wall_upload.php:74 +#: ../../mod/profile_photo.php:117 ../../mod/wall_upload.php:77 #, php-format msgid "Image exceeds size limit of %d" msgstr "" -#: ../../mod/profile_photo.php:207 +#: ../../mod/profile_photo.php:209 msgid "Upload File:" msgstr "" -#: ../../mod/profile_photo.php:208 +#: ../../mod/profile_photo.php:210 msgid "Upload Profile Photo" msgstr "" -#: ../../mod/profile_photo.php:209 +#: ../../mod/profile_photo.php:211 msgid "Upload" msgstr "" -#: ../../mod/profile_photo.php:211 +#: ../../mod/profile_photo.php:213 msgid "skip this step" msgstr "" -#: ../../mod/profile_photo.php:211 +#: ../../mod/profile_photo.php:213 msgid "select a photo from your photo albums" msgstr "" -#: ../../mod/profile_photo.php:224 +#: ../../mod/profile_photo.php:226 msgid "Crop Image" msgstr "" -#: ../../mod/profile_photo.php:225 +#: ../../mod/profile_photo.php:227 msgid "Please adjust the image cropping for optimum viewing." msgstr "" -#: ../../mod/profile_photo.php:227 +#: ../../mod/profile_photo.php:229 msgid "Done Editing" msgstr "" -#: ../../mod/profile_photo.php:255 +#: ../../mod/profile_photo.php:257 msgid "Image uploaded successfully." msgstr "" @@ -3022,19 +3023,19 @@ msgstr "" msgid "Theme settings updated." msgstr "" -#: ../../mod/admin.php:96 ../../mod/admin.php:416 +#: ../../mod/admin.php:96 ../../mod/admin.php:419 msgid "Site" msgstr "" -#: ../../mod/admin.php:97 ../../mod/admin.php:652 ../../mod/admin.php:664 +#: ../../mod/admin.php:97 ../../mod/admin.php:655 ../../mod/admin.php:667 msgid "Users" msgstr "" -#: ../../mod/admin.php:98 ../../mod/admin.php:746 ../../mod/admin.php:788 +#: ../../mod/admin.php:98 ../../mod/admin.php:749 ../../mod/admin.php:791 msgid "Plugins" msgstr "" -#: ../../mod/admin.php:99 ../../mod/admin.php:951 ../../mod/admin.php:987 +#: ../../mod/admin.php:99 ../../mod/admin.php:954 ../../mod/admin.php:990 msgid "Themes" msgstr "" @@ -3042,561 +3043,569 @@ msgstr "" msgid "DB updates" msgstr "" -#: ../../mod/admin.php:115 ../../mod/admin.php:1074 +#: ../../mod/admin.php:115 ../../mod/admin.php:122 ../../mod/admin.php:1077 msgid "Logs" msgstr "" -#: ../../mod/admin.php:120 +#: ../../mod/admin.php:120 ../../include/nav.php:146 +msgid "Admin" +msgstr "" + +#: ../../mod/admin.php:121 +msgid "Plugin Features" +msgstr "" + +#: ../../mod/admin.php:123 msgid "User registrations waiting for confirmation" msgstr "" -#: ../../mod/admin.php:180 ../../mod/admin.php:634 +#: ../../mod/admin.php:183 ../../mod/admin.php:637 msgid "Normal Account" msgstr "" -#: ../../mod/admin.php:181 ../../mod/admin.php:635 +#: ../../mod/admin.php:184 ../../mod/admin.php:638 msgid "Soapbox Account" msgstr "" -#: ../../mod/admin.php:182 ../../mod/admin.php:636 +#: ../../mod/admin.php:185 ../../mod/admin.php:639 msgid "Community/Celebrity Account" msgstr "" -#: ../../mod/admin.php:183 ../../mod/admin.php:637 +#: ../../mod/admin.php:186 ../../mod/admin.php:640 msgid "Automatic Friend Account" msgstr "" -#: ../../mod/admin.php:202 +#: ../../mod/admin.php:205 msgid "Message queues" msgstr "" -#: ../../mod/admin.php:207 ../../mod/admin.php:415 ../../mod/admin.php:651 -#: ../../mod/admin.php:745 ../../mod/admin.php:787 ../../mod/admin.php:950 -#: ../../mod/admin.php:986 ../../mod/admin.php:1073 +#: ../../mod/admin.php:210 ../../mod/admin.php:418 ../../mod/admin.php:654 +#: ../../mod/admin.php:748 ../../mod/admin.php:790 ../../mod/admin.php:953 +#: ../../mod/admin.php:989 ../../mod/admin.php:1076 msgid "Administration" msgstr "" -#: ../../mod/admin.php:208 +#: ../../mod/admin.php:211 msgid "Summary" msgstr "" -#: ../../mod/admin.php:210 +#: ../../mod/admin.php:213 msgid "Registered users" msgstr "" -#: ../../mod/admin.php:212 +#: ../../mod/admin.php:215 msgid "Pending registrations" msgstr "" -#: ../../mod/admin.php:213 +#: ../../mod/admin.php:216 msgid "Version" msgstr "" -#: ../../mod/admin.php:215 +#: ../../mod/admin.php:218 msgid "Active plugins" msgstr "" -#: ../../mod/admin.php:354 +#: ../../mod/admin.php:357 msgid "Site settings updated." msgstr "" -#: ../../mod/admin.php:402 +#: ../../mod/admin.php:405 msgid "Closed" msgstr "" -#: ../../mod/admin.php:403 +#: ../../mod/admin.php:406 msgid "Requires approval" msgstr "" -#: ../../mod/admin.php:404 +#: ../../mod/admin.php:407 msgid "Open" msgstr "" -#: ../../mod/admin.php:408 +#: ../../mod/admin.php:411 msgid "No SSL policy, links will track page SSL state" msgstr "" -#: ../../mod/admin.php:409 +#: ../../mod/admin.php:412 msgid "Force all links to use SSL" msgstr "" -#: ../../mod/admin.php:410 +#: ../../mod/admin.php:413 msgid "Self-signed certificate, use SSL for local links only (discouraged)" msgstr "" -#: ../../mod/admin.php:419 +#: ../../mod/admin.php:422 msgid "File upload" msgstr "" -#: ../../mod/admin.php:420 +#: ../../mod/admin.php:423 msgid "Policies" msgstr "" -#: ../../mod/admin.php:421 +#: ../../mod/admin.php:424 msgid "Advanced" msgstr "" -#: ../../mod/admin.php:425 ../../addon/statusnet/statusnet.php:552 +#: ../../mod/admin.php:428 ../../addon/statusnet/statusnet.php:552 msgid "Site name" msgstr "" -#: ../../mod/admin.php:426 +#: ../../mod/admin.php:429 msgid "Banner/Logo" msgstr "" -#: ../../mod/admin.php:427 +#: ../../mod/admin.php:430 msgid "System language" msgstr "" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:431 msgid "System theme" msgstr "" -#: ../../mod/admin.php:428 +#: ../../mod/admin.php:431 msgid "" "Default system theme - may be over-ridden by user profiles - <a href='#' " "id='cnftheme'>change theme settings</a>" msgstr "" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:432 msgid "SSL link policy" msgstr "" -#: ../../mod/admin.php:429 +#: ../../mod/admin.php:432 msgid "Determines whether generated links should be forced to use SSL" msgstr "" -#: ../../mod/admin.php:430 +#: ../../mod/admin.php:433 msgid "Maximum image size" msgstr "" -#: ../../mod/admin.php:430 +#: ../../mod/admin.php:433 msgid "" "Maximum size in bytes of uploaded images. Default is 0, which means no " "limits." msgstr "" -#: ../../mod/admin.php:432 +#: ../../mod/admin.php:435 msgid "Register policy" msgstr "" -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:436 msgid "Register text" msgstr "" -#: ../../mod/admin.php:433 +#: ../../mod/admin.php:436 msgid "Will be displayed prominently on the registration page." msgstr "" -#: ../../mod/admin.php:434 +#: ../../mod/admin.php:437 msgid "Accounts abandoned after x days" msgstr "" -#: ../../mod/admin.php:434 +#: ../../mod/admin.php:437 msgid "" "Will not waste system resources polling external sites for abandonded " "accounts. Enter 0 for no time limit." msgstr "" -#: ../../mod/admin.php:435 +#: ../../mod/admin.php:438 msgid "Allowed friend domains" msgstr "" -#: ../../mod/admin.php:435 +#: ../../mod/admin.php:438 msgid "" "Comma separated list of domains which are allowed to establish friendships " "with this site. Wildcards are accepted. Empty to allow any domains" msgstr "" -#: ../../mod/admin.php:436 +#: ../../mod/admin.php:439 msgid "Allowed email domains" msgstr "" -#: ../../mod/admin.php:436 +#: ../../mod/admin.php:439 msgid "" "Comma separated list of domains which are allowed in email addresses for " "registrations to this site. Wildcards are accepted. Empty to allow any " "domains" msgstr "" -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:440 msgid "Block public" msgstr "" -#: ../../mod/admin.php:437 +#: ../../mod/admin.php:440 msgid "" "Check to block public access to all otherwise public personal pages on this " "site unless you are currently logged in." msgstr "" -#: ../../mod/admin.php:438 +#: ../../mod/admin.php:441 msgid "Force publish" msgstr "" -#: ../../mod/admin.php:438 +#: ../../mod/admin.php:441 msgid "" "Check to force all profiles on this site to be listed in the site directory." msgstr "" -#: ../../mod/admin.php:439 +#: ../../mod/admin.php:442 msgid "Global directory update URL" msgstr "" -#: ../../mod/admin.php:439 +#: ../../mod/admin.php:442 msgid "" "URL to update the global directory. If this is not set, the global directory " "is completely unavailable to the application." msgstr "" -#: ../../mod/admin.php:441 +#: ../../mod/admin.php:444 msgid "Block multiple registrations" msgstr "" -#: ../../mod/admin.php:441 +#: ../../mod/admin.php:444 msgid "Disallow users to register additional accounts for use as pages." msgstr "" -#: ../../mod/admin.php:442 +#: ../../mod/admin.php:445 msgid "OpenID support" msgstr "" -#: ../../mod/admin.php:442 +#: ../../mod/admin.php:445 msgid "OpenID support for registration and logins." msgstr "" -#: ../../mod/admin.php:443 +#: ../../mod/admin.php:446 msgid "Fullname check" msgstr "" -#: ../../mod/admin.php:443 +#: ../../mod/admin.php:446 msgid "" "Force users to register with a space between firstname and lastname in Full " "name, as an antispam measure" msgstr "" -#: ../../mod/admin.php:444 +#: ../../mod/admin.php:447 msgid "UTF-8 Regular expressions" msgstr "" -#: ../../mod/admin.php:444 +#: ../../mod/admin.php:447 msgid "Use PHP UTF8 regular expressions" msgstr "" -#: ../../mod/admin.php:445 +#: ../../mod/admin.php:448 msgid "Show Community Page" msgstr "" -#: ../../mod/admin.php:445 +#: ../../mod/admin.php:448 msgid "" "Display a Community page showing all recent public postings on this site." msgstr "" -#: ../../mod/admin.php:446 +#: ../../mod/admin.php:449 msgid "Enable OStatus support" msgstr "" -#: ../../mod/admin.php:446 +#: ../../mod/admin.php:449 msgid "" "Provide built-in OStatus (identi.ca, status.net, etc.) compatibility. All " "communications in OStatus are public, so privacy warnings will be " "occasionally displayed." msgstr "" -#: ../../mod/admin.php:447 +#: ../../mod/admin.php:450 msgid "Enable Diaspora support" msgstr "" -#: ../../mod/admin.php:447 +#: ../../mod/admin.php:450 msgid "Provide built-in Diaspora network compatibility." msgstr "" -#: ../../mod/admin.php:448 +#: ../../mod/admin.php:451 msgid "Only allow Friendica contacts" msgstr "" -#: ../../mod/admin.php:448 +#: ../../mod/admin.php:451 msgid "" "All contacts must use Friendica protocols. All other built-in communication " "protocols disabled." msgstr "" -#: ../../mod/admin.php:449 +#: ../../mod/admin.php:452 msgid "Verify SSL" msgstr "" -#: ../../mod/admin.php:449 +#: ../../mod/admin.php:452 msgid "" "If you wish, you can turn on strict certificate checking. This will mean you " "cannot connect (at all) to self-signed SSL sites." msgstr "" -#: ../../mod/admin.php:450 +#: ../../mod/admin.php:453 msgid "Proxy user" msgstr "" -#: ../../mod/admin.php:451 +#: ../../mod/admin.php:454 msgid "Proxy URL" msgstr "" -#: ../../mod/admin.php:452 +#: ../../mod/admin.php:455 msgid "Network timeout" msgstr "" -#: ../../mod/admin.php:452 +#: ../../mod/admin.php:455 msgid "Value is in seconds. Set to 0 for unlimited (not recommended)." msgstr "" -#: ../../mod/admin.php:453 +#: ../../mod/admin.php:456 msgid "Delivery interval" msgstr "" -#: ../../mod/admin.php:453 +#: ../../mod/admin.php:456 msgid "" "Delay background delivery processes by this many seconds to reduce system " "load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 " "for large dedicated servers." msgstr "" -#: ../../mod/admin.php:454 +#: ../../mod/admin.php:457 msgid "Poll interval" msgstr "" -#: ../../mod/admin.php:454 +#: ../../mod/admin.php:457 msgid "" "Delay background polling processes by this many seconds to reduce system " "load. If 0, use delivery interval." msgstr "" -#: ../../mod/admin.php:455 +#: ../../mod/admin.php:458 msgid "Maximum Load Average" msgstr "" -#: ../../mod/admin.php:455 +#: ../../mod/admin.php:458 msgid "" "Maximum system load before delivery and poll processes are deferred - " "default 50." msgstr "" -#: ../../mod/admin.php:469 +#: ../../mod/admin.php:472 msgid "Update has been marked successful" msgstr "" -#: ../../mod/admin.php:479 +#: ../../mod/admin.php:482 #, php-format msgid "Executing %s failed. Check system logs." msgstr "" -#: ../../mod/admin.php:482 +#: ../../mod/admin.php:485 #, php-format msgid "Update %s was successfully applied." msgstr "" -#: ../../mod/admin.php:486 +#: ../../mod/admin.php:489 #, php-format msgid "Update %s did not return a status. Unknown if it succeeded." msgstr "" -#: ../../mod/admin.php:489 +#: ../../mod/admin.php:492 #, php-format msgid "Update function %s could not be found." msgstr "" -#: ../../mod/admin.php:504 +#: ../../mod/admin.php:507 msgid "No failed updates." msgstr "" -#: ../../mod/admin.php:508 +#: ../../mod/admin.php:511 msgid "Failed Updates" msgstr "" -#: ../../mod/admin.php:509 +#: ../../mod/admin.php:512 msgid "" "This does not include updates prior to 1139, which did not return a status." msgstr "" -#: ../../mod/admin.php:510 +#: ../../mod/admin.php:513 msgid "Mark success (if update was manually applied)" msgstr "" -#: ../../mod/admin.php:511 +#: ../../mod/admin.php:514 msgid "Attempt to execute this update step automatically" msgstr "" -#: ../../mod/admin.php:536 +#: ../../mod/admin.php:539 #, php-format msgid "%s user blocked/unblocked" msgid_plural "%s users blocked/unblocked" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:543 +#: ../../mod/admin.php:546 #, php-format msgid "%s user deleted" msgid_plural "%s users deleted" msgstr[0] "" msgstr[1] "" -#: ../../mod/admin.php:582 +#: ../../mod/admin.php:585 #, php-format msgid "User '%s' deleted" msgstr "" -#: ../../mod/admin.php:590 +#: ../../mod/admin.php:593 #, php-format msgid "User '%s' unblocked" msgstr "" -#: ../../mod/admin.php:590 +#: ../../mod/admin.php:593 #, php-format msgid "User '%s' blocked" msgstr "" -#: ../../mod/admin.php:654 +#: ../../mod/admin.php:657 msgid "select all" msgstr "" -#: ../../mod/admin.php:655 +#: ../../mod/admin.php:658 msgid "User registrations waiting for confirm" msgstr "" -#: ../../mod/admin.php:656 +#: ../../mod/admin.php:659 msgid "Request date" msgstr "" -#: ../../mod/admin.php:656 ../../mod/admin.php:665 +#: ../../mod/admin.php:659 ../../mod/admin.php:668 #: ../../include/contact_selectors.php:79 msgid "Email" msgstr "" -#: ../../mod/admin.php:657 +#: ../../mod/admin.php:660 msgid "No registrations." msgstr "" -#: ../../mod/admin.php:659 +#: ../../mod/admin.php:662 msgid "Deny" msgstr "" -#: ../../mod/admin.php:665 +#: ../../mod/admin.php:668 msgid "Register date" msgstr "" -#: ../../mod/admin.php:665 +#: ../../mod/admin.php:668 msgid "Last login" msgstr "" -#: ../../mod/admin.php:665 +#: ../../mod/admin.php:668 msgid "Last item" msgstr "" -#: ../../mod/admin.php:665 +#: ../../mod/admin.php:668 msgid "Account" msgstr "" -#: ../../mod/admin.php:667 +#: ../../mod/admin.php:670 msgid "" "Selected users will be deleted!\\n\\nEverything these users had posted on " "this site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../mod/admin.php:668 +#: ../../mod/admin.php:671 msgid "" "The user {0} will be deleted!\\n\\nEverything this user has posted on this " "site will be permanently deleted!\\n\\nAre you sure?" msgstr "" -#: ../../mod/admin.php:709 +#: ../../mod/admin.php:712 #, php-format msgid "Plugin %s disabled." msgstr "" -#: ../../mod/admin.php:713 +#: ../../mod/admin.php:716 #, php-format msgid "Plugin %s enabled." msgstr "" -#: ../../mod/admin.php:723 ../../mod/admin.php:921 +#: ../../mod/admin.php:726 ../../mod/admin.php:924 msgid "Disable" msgstr "" -#: ../../mod/admin.php:725 ../../mod/admin.php:923 +#: ../../mod/admin.php:728 ../../mod/admin.php:926 msgid "Enable" msgstr "" -#: ../../mod/admin.php:747 ../../mod/admin.php:952 +#: ../../mod/admin.php:750 ../../mod/admin.php:955 msgid "Toggle" msgstr "" -#: ../../mod/admin.php:755 ../../mod/admin.php:962 +#: ../../mod/admin.php:758 ../../mod/admin.php:965 msgid "Author: " msgstr "" -#: ../../mod/admin.php:756 ../../mod/admin.php:963 +#: ../../mod/admin.php:759 ../../mod/admin.php:966 msgid "Maintainer: " msgstr "" -#: ../../mod/admin.php:885 +#: ../../mod/admin.php:888 msgid "No themes found." msgstr "" -#: ../../mod/admin.php:944 +#: ../../mod/admin.php:947 msgid "Screenshot" msgstr "" -#: ../../mod/admin.php:992 +#: ../../mod/admin.php:995 msgid "[Experimental]" msgstr "" -#: ../../mod/admin.php:993 +#: ../../mod/admin.php:996 msgid "[Unsupported]" msgstr "" -#: ../../mod/admin.php:1020 +#: ../../mod/admin.php:1023 msgid "Log settings updated." msgstr "" -#: ../../mod/admin.php:1076 +#: ../../mod/admin.php:1079 msgid "Clear" msgstr "" -#: ../../mod/admin.php:1082 +#: ../../mod/admin.php:1085 msgid "Debugging" msgstr "" -#: ../../mod/admin.php:1083 +#: ../../mod/admin.php:1086 msgid "Log file" msgstr "" -#: ../../mod/admin.php:1083 +#: ../../mod/admin.php:1086 msgid "" "Must be writable by web server. Relative to your Friendica top-level " "directory." msgstr "" -#: ../../mod/admin.php:1084 +#: ../../mod/admin.php:1087 msgid "Log level" msgstr "" -#: ../../mod/admin.php:1134 +#: ../../mod/admin.php:1137 msgid "Close" msgstr "" -#: ../../mod/admin.php:1140 +#: ../../mod/admin.php:1143 msgid "FTP Host" msgstr "" -#: ../../mod/admin.php:1141 +#: ../../mod/admin.php:1144 msgid "FTP Path" msgstr "" -#: ../../mod/admin.php:1142 +#: ../../mod/admin.php:1145 msgid "FTP User" msgstr "" -#: ../../mod/admin.php:1143 +#: ../../mod/admin.php:1146 msgid "FTP Password" msgstr "" -#: ../../mod/profile.php:21 ../../boot.php:957 +#: ../../mod/profile.php:21 ../../boot.php:962 msgid "Requested profile is not available." msgstr "" @@ -3749,7 +3758,7 @@ msgstr "" msgid "Address" msgstr "" -#: ../../mod/profiles.php:194 +#: ../../mod/profiles.php:194 ../../addon/dav/layout.fnk.php:310 msgid "Location" msgstr "" @@ -3971,23 +3980,23 @@ msgstr "" msgid "Edit/Manage Profiles" msgstr "" -#: ../../mod/profiles.php:645 ../../boot.php:1066 +#: ../../mod/profiles.php:645 ../../boot.php:1071 msgid "Change profile photo" msgstr "" -#: ../../mod/profiles.php:646 ../../boot.php:1067 +#: ../../mod/profiles.php:646 ../../boot.php:1072 msgid "Create New Profile" msgstr "" -#: ../../mod/profiles.php:657 ../../boot.php:1077 +#: ../../mod/profiles.php:657 ../../boot.php:1082 msgid "Profile Image" msgstr "" -#: ../../mod/profiles.php:659 ../../boot.php:1080 +#: ../../mod/profiles.php:659 ../../boot.php:1085 msgid "visible to everybody" msgstr "" -#: ../../mod/profiles.php:660 ../../boot.php:1081 +#: ../../mod/profiles.php:660 ../../boot.php:1086 msgid "Edit visibility" msgstr "" @@ -4412,7 +4421,7 @@ msgstr "" msgid "Activate Real-Time Updates" msgstr "" -#: ../../addon/facebook/facebook.php:785 ../../addon/dav/layout.fnk.php:394 +#: ../../addon/facebook/facebook.php:785 ../../addon/dav/layout.fnk.php:360 msgid "The new values have been saved." msgstr "" @@ -4452,23 +4461,35 @@ msgid "" "connection again, you have to %3$sre-authenticate the Facebook-connector%4$s." msgstr "" -#: ../../addon/privacy_image_cache/privacy_image_cache.php:147 +#: ../../addon/snautofollow/snautofollow.php:32 +msgid "StatusNet AutoFollow settings updated." +msgstr "" + +#: ../../addon/snautofollow/snautofollow.php:56 +msgid "StatusNet AutoFollow Settings" +msgstr "" + +#: ../../addon/snautofollow/snautofollow.php:58 +msgid "Automatically follow any StatusNet followers/mentioners" +msgstr "" + +#: ../../addon/privacy_image_cache/privacy_image_cache.php:182 msgid "Lifetime of the cache (in hours)" msgstr "" -#: ../../addon/privacy_image_cache/privacy_image_cache.php:152 +#: ../../addon/privacy_image_cache/privacy_image_cache.php:187 msgid "Cache Statistics" msgstr "" -#: ../../addon/privacy_image_cache/privacy_image_cache.php:155 +#: ../../addon/privacy_image_cache/privacy_image_cache.php:190 msgid "Number of items" msgstr "" -#: ../../addon/privacy_image_cache/privacy_image_cache.php:157 +#: ../../addon/privacy_image_cache/privacy_image_cache.php:192 msgid "Size of the cache" msgstr "" -#: ../../addon/privacy_image_cache/privacy_image_cache.php:159 +#: ../../addon/privacy_image_cache/privacy_image_cache.php:194 msgid "Delete the whole cache" msgstr "" @@ -4595,7 +4616,7 @@ msgstr "" #: ../../addon/page/page.php:63 ../../addon/showmore/showmore.php:87 #: ../../include/contact_widgets.php:188 ../../include/conversation.php:476 -#: ../../boot.php:515 +#: ../../boot.php:520 msgid "show more" msgstr "" @@ -4611,7 +4632,7 @@ msgstr "" #: ../../addon/communityhome/communityhome.php:34 #: ../../addon/communityhome/twillingham/communityhome.php:28 #: ../../addon/communityhome/twillingham/communityhome.php:34 -#: ../../include/nav.php:64 ../../boot.php:813 +#: ../../include/nav.php:64 ../../boot.php:818 msgid "Login" msgstr "" @@ -4652,98 +4673,116 @@ msgstr "" msgid "German Time Format (dd.mm.YYYY)" msgstr "" -#: ../../addon/dav/common/calendar.fnk.php:507 -#: ../../addon/dav/common/calendar.fnk.php:576 -#: ../../addon/dav/common/calendar.fnk.php:603 -#: ../../addon/dav/layout.fnk.php:266 +#: ../../addon/dav/common/calendar.fnk.php:517 +#: ../../addon/dav/common/calendar.fnk.php:533 +#: ../../addon/dav/layout.fnk.php:200 +msgid "Error" +msgstr "" + +#: ../../addon/dav/common/calendar.fnk.php:568 +#: ../../addon/dav/common/calendar.fnk.php:637 +#: ../../addon/dav/common/calendar.fnk.php:664 +#: ../../addon/dav/layout.fnk.php:231 msgid "No access" msgstr "" -#: ../../addon/dav/layout.fnk.php:116 +#: ../../addon/dav/layout.fnk.php:119 +msgid "New event" +msgstr "" + +#: ../../addon/dav/layout.fnk.php:123 msgid "Today" msgstr "" #: ../../addon/dav/layout.fnk.php:132 -msgid "Week" +msgid "Day" msgstr "" #: ../../addon/dav/layout.fnk.php:139 +msgid "Week" +msgstr "" + +#: ../../addon/dav/layout.fnk.php:146 msgid "Month" msgstr "" -#: ../../addon/dav/layout.fnk.php:144 +#: ../../addon/dav/layout.fnk.php:151 msgid "Reload" msgstr "" -#: ../../addon/dav/layout.fnk.php:155 +#: ../../addon/dav/layout.fnk.php:162 msgid "Date" msgstr "" -#: ../../addon/dav/layout.fnk.php:193 ../../addon/dav/layout.fnk.php:237 -msgid "Error" -msgstr "" - -#: ../../addon/dav/layout.fnk.php:259 +#: ../../addon/dav/layout.fnk.php:224 msgid "Not found" msgstr "" -#: ../../addon/dav/layout.fnk.php:326 ../../addon/dav/layout.fnk.php:399 +#: ../../addon/dav/layout.fnk.php:292 ../../addon/dav/layout.fnk.php:365 msgid "Go back to the calendar" msgstr "" -#: ../../addon/dav/layout.fnk.php:346 +#: ../../addon/dav/layout.fnk.php:300 +msgid "Starts" +msgstr "" + +#: ../../addon/dav/layout.fnk.php:305 +msgid "Ends" +msgstr "" + +#: ../../addon/dav/layout.fnk.php:312 msgid "Description" msgstr "" -#: ../../addon/dav/layout.fnk.php:349 +#: ../../addon/dav/layout.fnk.php:315 msgid "Notification" msgstr "" -#: ../../addon/dav/layout.fnk.php:358 +#: ../../addon/dav/layout.fnk.php:324 msgid "Minutes" msgstr "" -#: ../../addon/dav/layout.fnk.php:361 +#: ../../addon/dav/layout.fnk.php:327 msgid "Hours" msgstr "" -#: ../../addon/dav/layout.fnk.php:364 +#: ../../addon/dav/layout.fnk.php:330 msgid "Days" msgstr "" -#: ../../addon/dav/layout.fnk.php:365 +#: ../../addon/dav/layout.fnk.php:331 msgid "before" msgstr "" -#: ../../addon/dav/layout.fnk.php:401 +#: ../../addon/dav/layout.fnk.php:367 msgid "Calendar Settings" msgstr "" -#: ../../addon/dav/layout.fnk.php:407 +#: ../../addon/dav/layout.fnk.php:373 msgid "Date format" msgstr "" -#: ../../addon/dav/layout.fnk.php:416 +#: ../../addon/dav/layout.fnk.php:382 msgid "Time zone" msgstr "" -#: ../../addon/dav/layout.fnk.php:421 +#: ../../addon/dav/layout.fnk.php:387 msgid "Limitations" msgstr "" -#: ../../addon/dav/layout.fnk.php:425 +#: ../../addon/dav/layout.fnk.php:391 msgid "Warning" msgstr "" -#: ../../addon/dav/layout.fnk.php:429 +#: ../../addon/dav/layout.fnk.php:395 msgid "Synchronization (iPhone, Thunderbird Lightning, Android, ...)" msgstr "" -#: ../../addon/dav/layout.fnk.php:436 +#: ../../addon/dav/layout.fnk.php:402 msgid "Synchronizing this calendar with the iPhone" msgstr "" -#: ../../addon/dav/layout.fnk.php:447 +#: ../../addon/dav/layout.fnk.php:413 msgid "Synchronizing your Friendica-Contacts with the iPhone" msgstr "" @@ -4755,71 +4794,71 @@ msgstr "" msgid "Your Friendica-Contacts" msgstr "" -#: ../../addon/dav/main.php:223 +#: ../../addon/dav/main.php:244 msgid "Calendar" msgstr "" -#: ../../addon/dav/main.php:226 +#: ../../addon/dav/main.php:247 msgid "Extended calendar with CalDAV-support" msgstr "" -#: ../../addon/dav/main.php:242 +#: ../../addon/dav/main.php:263 msgid "The database tables have been installed." msgstr "" -#: ../../addon/dav/main.php:243 +#: ../../addon/dav/main.php:264 msgid "An error occurred during the installation." msgstr "" -#: ../../addon/dav/main.php:259 +#: ../../addon/dav/main.php:280 msgid "No system-wide settings yet." msgstr "" -#: ../../addon/dav/main.php:262 +#: ../../addon/dav/main.php:283 msgid "Database status" msgstr "" -#: ../../addon/dav/main.php:265 +#: ../../addon/dav/main.php:286 msgid "Installed" msgstr "" -#: ../../addon/dav/main.php:268 +#: ../../addon/dav/main.php:289 msgid "Upgrade needed" msgstr "" -#: ../../addon/dav/main.php:268 +#: ../../addon/dav/main.php:289 msgid "Upgrade" msgstr "" -#: ../../addon/dav/main.php:271 +#: ../../addon/dav/main.php:292 msgid "Not installed" msgstr "" -#: ../../addon/dav/main.php:271 +#: ../../addon/dav/main.php:292 msgid "Install" msgstr "" -#: ../../addon/dav/main.php:276 +#: ../../addon/dav/main.php:297 msgid "Troubleshooting" msgstr "" -#: ../../addon/dav/main.php:277 +#: ../../addon/dav/main.php:298 msgid "Manual creation of the database tables:" msgstr "" -#: ../../addon/dav/main.php:278 +#: ../../addon/dav/main.php:299 msgid "Show SQL-statements" msgstr "" -#: ../../addon/dav/calendar.friendica.fnk.php:128 +#: ../../addon/dav/calendar.friendica.fnk.php:151 msgid "Private Calendar" msgstr "" -#: ../../addon/dav/calendar.friendica.fnk.php:135 +#: ../../addon/dav/calendar.friendica.fnk.php:158 msgid "Friendica Events: Mine" msgstr "" -#: ../../addon/dav/calendar.friendica.fnk.php:138 +#: ../../addon/dav/calendar.friendica.fnk.php:161 msgid "Friendica Events: Contacts" msgstr "" @@ -4969,7 +5008,7 @@ msgstr "" msgid "Post to Drupal by default" msgstr "" -#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:198 +#: ../../addon/drpost/drpost.php:184 ../../addon/wppost/wppost.php:199 #: ../../addon/blogger/blogger.php:172 ../../addon/posterous/posterous.php:189 msgid "Post from Friendica" msgstr "" @@ -5569,11 +5608,11 @@ msgstr "" msgid "Post to WordPress by default" msgstr "" -#: ../../addon/wppost/wppost.php:102 +#: ../../addon/wppost/wppost.php:103 msgid "Provide a backlink to the Friendica post" msgstr "" -#: ../../addon/wppost/wppost.php:204 +#: ../../addon/wppost/wppost.php:205 msgid "Read the original post and comment stream on Friendica" msgstr "" @@ -5995,7 +6034,7 @@ msgstr "" msgid "Set colour scheme" msgstr "" -#: ../../include/profile_advanced.php:17 ../../boot.php:1102 +#: ../../include/profile_advanced.php:17 ../../boot.php:1107 msgid "Gender:" msgstr "" @@ -6008,7 +6047,7 @@ msgid "j F" msgstr "" #: ../../include/profile_advanced.php:30 ../../include/datetime.php:450 -#: ../../include/items.php:1423 +#: ../../include/items.php:1438 msgid "Birthday:" msgstr "" @@ -6016,7 +6055,7 @@ msgstr "" msgid "Age:" msgstr "" -#: ../../include/profile_advanced.php:37 ../../boot.php:1105 +#: ../../include/profile_advanced.php:37 ../../boot.php:1110 msgid "Status:" msgstr "" @@ -6025,7 +6064,7 @@ msgstr "" msgid "for %1$d %2$s" msgstr "" -#: ../../include/profile_advanced.php:48 ../../boot.php:1107 +#: ../../include/profile_advanced.php:48 ../../boot.php:1112 msgid "Homepage:" msgstr "" @@ -6557,15 +6596,15 @@ msgstr "" msgid "Attachments:" msgstr "" -#: ../../include/network.php:824 +#: ../../include/network.php:827 msgid "view full size" msgstr "" -#: ../../include/oembed.php:132 +#: ../../include/oembed.php:134 msgid "Embedded content" msgstr "" -#: ../../include/oembed.php:141 +#: ../../include/oembed.php:143 msgid "Embedding disabled" msgstr "" @@ -6604,7 +6643,7 @@ msgstr "" msgid "Contacts not in any group" msgstr "" -#: ../../include/nav.php:46 ../../boot.php:812 +#: ../../include/nav.php:46 ../../boot.php:817 msgid "Logout" msgstr "" @@ -6612,7 +6651,7 @@ msgstr "" msgid "End this session" msgstr "" -#: ../../include/nav.php:49 ../../boot.php:1499 +#: ../../include/nav.php:49 ../../boot.php:1504 msgid "Status" msgstr "" @@ -6692,11 +6731,11 @@ msgstr "" msgid "Manage other pages" msgstr "" -#: ../../include/nav.php:138 ../../boot.php:1060 +#: ../../include/nav.php:138 ../../boot.php:1065 msgid "Profiles" msgstr "" -#: ../../include/nav.php:138 ../../boot.php:1060 +#: ../../include/nav.php:138 ../../boot.php:1065 msgid "Manage/edit profiles" msgstr "" @@ -6705,10 +6744,6 @@ msgid "Manage/edit friends and contacts" msgstr "" #: ../../include/nav.php:146 -msgid "Admin" -msgstr "" - -#: ../../include/nav.php:146 msgid "Site setup and configuration" msgstr "" @@ -7122,19 +7157,19 @@ msgid "" "notifications from you." msgstr "" -#: ../../include/follow.php:164 +#: ../../include/follow.php:169 msgid "Unable to retrieve contact information." msgstr "" -#: ../../include/follow.php:218 +#: ../../include/follow.php:223 msgid "following" msgstr "" -#: ../../include/items.php:2740 +#: ../../include/items.php:2758 msgid "A new person is sharing with you at " msgstr "" -#: ../../include/items.php:2740 +#: ../../include/items.php:2758 msgid "You have a new follower at " msgstr "" @@ -7486,96 +7521,96 @@ msgstr "" msgid "permissions" msgstr "" -#: ../../boot.php:513 +#: ../../boot.php:518 msgid "Delete this item?" msgstr "" -#: ../../boot.php:516 +#: ../../boot.php:521 msgid "show fewer" msgstr "" -#: ../../boot.php:689 +#: ../../boot.php:694 #, php-format msgid "Update %s failed. See error logs." msgstr "" -#: ../../boot.php:691 +#: ../../boot.php:696 #, php-format msgid "Update Error at %s" msgstr "" -#: ../../boot.php:791 +#: ../../boot.php:796 msgid "Create a New Account" msgstr "" -#: ../../boot.php:815 +#: ../../boot.php:820 msgid "Nickname or Email address: " msgstr "" -#: ../../boot.php:816 +#: ../../boot.php:821 msgid "Password: " msgstr "" -#: ../../boot.php:819 +#: ../../boot.php:824 msgid "Or login using OpenID: " msgstr "" -#: ../../boot.php:825 +#: ../../boot.php:830 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:992 +#: ../../boot.php:997 msgid "Edit profile" msgstr "" -#: ../../boot.php:1052 +#: ../../boot.php:1057 msgid "Message" msgstr "" -#: ../../boot.php:1168 ../../boot.php:1244 +#: ../../boot.php:1173 ../../boot.php:1249 msgid "g A l F d" msgstr "" -#: ../../boot.php:1169 ../../boot.php:1245 +#: ../../boot.php:1174 ../../boot.php:1250 msgid "F d" msgstr "" -#: ../../boot.php:1214 ../../boot.php:1285 +#: ../../boot.php:1219 ../../boot.php:1290 msgid "[today]" msgstr "" -#: ../../boot.php:1226 +#: ../../boot.php:1231 msgid "Birthday Reminders" msgstr "" -#: ../../boot.php:1227 +#: ../../boot.php:1232 msgid "Birthdays this week:" msgstr "" -#: ../../boot.php:1278 +#: ../../boot.php:1283 msgid "[No description]" msgstr "" -#: ../../boot.php:1296 +#: ../../boot.php:1301 msgid "Event Reminders" msgstr "" -#: ../../boot.php:1297 +#: ../../boot.php:1302 msgid "Events this week:" msgstr "" -#: ../../boot.php:1502 +#: ../../boot.php:1507 msgid "Status Messages and Posts" msgstr "" -#: ../../boot.php:1508 +#: ../../boot.php:1513 msgid "Profile Details" msgstr "" -#: ../../boot.php:1523 +#: ../../boot.php:1528 msgid "Events and Calendar" msgstr "" -#: ../../boot.php:1529 +#: ../../boot.php:1534 msgid "Only You Can See This" msgstr "" diff --git a/view/oembed_video.tpl b/view/oembed_video.tpl index 5824d8d4e..d3a9a9311 100644..100755 --- a/view/oembed_video.tpl +++ b/view/oembed_video.tpl @@ -1,4 +1,4 @@ <a href='$embedurl' onclick='this.innerHTML=Base64.decode("$escapedhtml"); return false;' style='float:left; margin: 1em; position: relative;'> <img width='$tw' height='$th' src='$turl' > - <div style='position: absolute; top: 0px; left: 0px; width: $twpx; height: $thpx; background: url(images/icons/48/play.png) no-repeat center center;'></div> + <div style='position: absolute; top: 0px; left: 0px; width: $twpx; height: $thpx; background: url($baseurl/images/icons/48/play.png) no-repeat center center;'></div> </a> diff --git a/view/theme/dispy/wall_item.tpl b/view/theme/dispy/wall_item.tpl index d2878d17d..6263eef51 100644 --- a/view/theme/dispy/wall_item.tpl +++ b/view/theme/dispy/wall_item.tpl @@ -1,3 +1,4 @@ +<a name="$item.id" /> <div class="wall-item-outside-wrapper$item.indent$item.previewing" id="wall-item-outside-wrapper-$item.id" > <div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" > <div class="wall-item-info" id="wall-item-info-$item.id"> @@ -82,7 +83,6 @@ <div class="wall-item-comment-wrapper"> $item.comment </div> -</div> - -<div class="wall-item-outside-wrapper-end$item.indent"></div> +<div class="wall-item-outside-wrapper-end$item.indent" ></div> +</div> diff --git a/view/theme/dispy/wallwall_item.tpl b/view/theme/dispy/wallwall_item.tpl index 2705d3e68..e2a972790 100644 --- a/view/theme/dispy/wallwall_item.tpl +++ b/view/theme/dispy/wallwall_item.tpl @@ -1,14 +1,17 @@ -<div class="wall-item-outside-wrapper$item.indent wallwall" id="wall-item-outside-wrapper-$item.id" > +<a name="$item.id" /> +<div class="wall-item-outside-wrapper$item.indent$item.previewing wallwall" id="wall-item-outside-wrapper-$item.id" > <div class="wall-item-content-wrapper$item.indent" id="wall-item-content-wrapper-$item.id" > <div class="wall-item-info wallwall" id="wall-item-info-$item.id"> <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$item.id" > - <a href="$item.owner_url" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id"><img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a> + <a href="$item.owner_url" target="redir" title="$item.olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$item.id"> + <img src="$item.owner_photo" class="wall-item-photo$item.osparkle" id="wall-item-ownerphoto-$item.id" style="height: 80px; width: 80px;" alt="$item.owner_name" /></a> </div> <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$item.wall" /></div> <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$item.id" onmouseover="if (typeof t$item.id != 'undefined') clearTimeout(t$item.id); openMenu('wall-item-photo-menu-button-$item.id')" onmouseout="t$item.id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$item.id\'); closeMenu(\'wall-item-photo-menu-$item.id\');',200)"> - <a href="$item.profile_url" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id"><img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a> + <a href="$item.profile_url" target="redir" title="$item.linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$item.id"> + <img src="$item.thumb" class="wall-item-photo$item.sparkle" id="wall-item-photo-$item.id" style="height: 80px; width: 80px;" alt="$item.name" /></a> <span onclick="openClose('wall-item-photo-menu-$item.id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$item.id">menu</span> <div class="wall-item-photo-menu" id="wall-item-photo-menu-$item.id"> <ul> @@ -88,7 +91,7 @@ class="icon recycle wall-item-share-buttons" title="$item.vote.share.0" onclick <div class="wall-item-comment-wrapper"> $item.comment </div> -</div> <div class="wall-item-outside-wrapper-end$item.indent" ></div> +</div> diff --git a/view/theme/slackr/events_reminder.tpl b/view/theme/slackr/events_reminder.tpl index 99407fc3e..bd1a57d18 100644 --- a/view/theme/slackr/events_reminder.tpl +++ b/view/theme/slackr/events_reminder.tpl @@ -35,5 +35,5 @@ }); }); </script> -<div id="events-reminder"></div> +<div id="events-reminder" class="$classtoday"></div> <br> diff --git a/view/theme/slackr/style.css b/view/theme/slackr/style.css index 479a8ec06..aa4d4b800 100644 --- a/view/theme/slackr/style.css +++ b/view/theme/slackr/style.css @@ -54,14 +54,23 @@ nav #site-location { color: #000000; } -.fc { +#events-reminder { + border-radius: 3px; + -moz-border-radius: 3px; opacity: 0.3; filter:alpha(opacity=30); } -.fc:hover { +#events-reminder.birthday-today, #events-reminder.event-today { + opacity: 1.0; + filter:alpha(opacity=100); + box-shadow: 4px 4px 3px 0 #444444; +} + +#events-reminder:hover { opacity: 1.0; filter:alpha(opacity=100); + box-shadow: 4px 4px 3px 0 #444444; } .fc-event-skin { @@ -79,7 +88,7 @@ nav #site-location { box-shadow: 4px 4px 3px 0 #444444; } -.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .fc, .profile-jot-text, .group-selected, .nets-selected, .fileas-selected, #profile-jot-submit, .categories-selected { +.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .profile-jot-text, .group-selected, .nets-selected, .fileas-selected, #profile-jot-submit, .categories-selected { border-radius: 3px; -moz-border-radius: 3px; box-shadow: 4px 4px 3px 0 #444444; |