aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--boot.php23
-rw-r--r--database.sql1
-rw-r--r--include/Photo.php131
-rw-r--r--include/conversation.php2
-rw-r--r--include/follow.php13
-rwxr-xr-xinclude/items.php62
-rw-r--r--include/network.php5
-rwxr-xr-x[-rw-r--r--]include/oembed.php4
-rw-r--r--include/onepoll.php7
-rw-r--r--include/poller.php4
-rw-r--r--include/text.php13
-rw-r--r--include/user.php8
-rw-r--r--index.php9
-rwxr-xr-x[-rw-r--r--]mod/events.php4
-rw-r--r--mod/fbrowser.php18
-rw-r--r--mod/msearch.php2
-rw-r--r--mod/network.php162
-rw-r--r--mod/parse_url.php5
-rw-r--r--mod/photo.php20
-rw-r--r--mod/photos.php51
-rw-r--r--mod/profile.php37
-rw-r--r--mod/profile_photo.php13
-rw-r--r--mod/pubsub.php16
-rw-r--r--mod/salmon.php16
-rw-r--r--mod/wall_upload.php37
-rw-r--r--update.php8
-rw-r--r--util/messages.po789
-rwxr-xr-x[-rw-r--r--]view/oembed_video.tpl2
-rw-r--r--view/theme/dispy/wall_item.tpl6
-rw-r--r--view/theme/dispy/wallwall_item.tpl11
-rw-r--r--view/theme/slackr/events_reminder.tpl2
-rw-r--r--view/theme/slackr/style.css15
32 files changed, 940 insertions, 556 deletions
diff --git a/boot.php b/boot.php
index 7961efc4a..dfe072578 100644
--- a/boot.php
+++ b/boot.php
@@ -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
+}
diff --git a/index.php b/index.php
index 94329eedc..6967d0f31 100644
--- a/index.php
+++ b/index.php
@@ -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;