aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addon/facebook/facebook.php529
-rw-r--r--boot.php32
-rw-r--r--database.sql2
-rw-r--r--doc/Home.md8
-rw-r--r--doc/Profiles.md6
-rw-r--r--doc/Settings.md11
-rw-r--r--htconfig.php2
-rw-r--r--images/icons.pngbin0 -> 8426 bytes
-rw-r--r--include/Photo.php12
-rw-r--r--include/acl_selectors.php6
-rw-r--r--include/auth.php12
-rw-r--r--include/bbcode.php2
-rw-r--r--include/conversation.php8
-rw-r--r--include/group.php2
-rw-r--r--include/items.php46
-rw-r--r--include/main.js15
-rw-r--r--include/notifier.php2
-rw-r--r--include/poller.php6
-rw-r--r--index.php2
-rw-r--r--mod/contacts.php2
-rw-r--r--mod/dfrn_poll.php4
-rw-r--r--mod/dfrn_request.php10
-rw-r--r--mod/directory.php6
-rw-r--r--mod/display.php5
-rw-r--r--mod/editpost.php1
-rw-r--r--mod/item.php6
-rw-r--r--mod/like.php4
-rw-r--r--mod/network.php6
-rw-r--r--mod/openid.php11
-rw-r--r--mod/photos.php114
-rw-r--r--mod/profile.php9
-rw-r--r--mod/profile_photo.php7
-rw-r--r--mod/search.php5
-rw-r--r--mod/settings.php4
-rw-r--r--mod/viewcontacts.php10
-rw-r--r--update.php4
-rw-r--r--util/messages.po595
-rw-r--r--util/strings.php28
-rw-r--r--view/contact_edit.tpl8
-rw-r--r--view/contact_template.tpl2
-rw-r--r--view/de/htconfig.tpl2
-rw-r--r--view/en/htconfig.tpl2
-rw-r--r--view/es/htconfig.tpl2
-rw-r--r--view/fr/htconfig.tpl2
-rw-r--r--view/group_drop.tpl11
-rw-r--r--view/it/htconfig.tpl2
-rw-r--r--view/jot-header.tpl22
-rw-r--r--view/jot.tpl26
-rw-r--r--view/like.tpl6
-rw-r--r--view/like_noshare.tpl4
-rw-r--r--view/mail_list.tpl5
-rw-r--r--view/photo_view.tpl37
-rw-r--r--view/prv_message.tpl6
-rw-r--r--view/register.tpl2
-rw-r--r--view/sv/htconfig.tpl2
-rw-r--r--view/theme/dispy/connect.pngbin0 -> 443 bytes
-rw-r--r--view/theme/dispy/icons.pngbin0 -> 16306 bytes
-rw-r--r--view/theme/dispy/jot-header.tpl175
-rw-r--r--view/theme/dispy/jot.tpl72
-rw-r--r--view/theme/dispy/mail_head.tpl7
-rw-r--r--view/theme/dispy/menu-user-pin.jpgbin0 -> 385 bytes
-rw-r--r--view/theme/dispy/nav.tpl51
-rw-r--r--view/theme/dispy/next.pngbin0 -> 891 bytes
-rw-r--r--view/theme/dispy/notifications.pngbin0 -> 2253 bytes
-rw-r--r--view/theme/dispy/photo_view.tpl40
-rw-r--r--view/theme/dispy/prev.pngbin0 -> 853 bytes
-rw-r--r--view/theme/dispy/profile_tabs.tpl7
-rw-r--r--view/theme/dispy/search_item.tpl40
-rw-r--r--view/theme/dispy/settings.tpl212
-rw-r--r--view/theme/dispy/style.css789
-rw-r--r--view/theme/dispy/wall_item.tpl47
-rw-r--r--view/theme/dispy/wallwall_item.tpl51
-rw-r--r--view/theme/duepuntozero/style.css52
-rw-r--r--view/theme/loozah/style.css46
-rw-r--r--view/wall_item_drop.tpl6
75 files changed, 2834 insertions, 436 deletions
diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php
index f3f313efe..8fe6f3717 100644
--- a/addon/facebook/facebook.php
+++ b/addon/facebook/facebook.php
@@ -24,8 +24,8 @@
* Replace with the settings Facebook gives you.
* 2. Enable the facebook plugin by including it in .htconfig.php - e.g.
* $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
- * 3. Visit your site url + '/facebook' (e.g. http://example.com/facebook)
- * and click 'Install Facebook posting'.
+ * 3. Visit the Facebook Settings from "Settings->Plugin Settings" page.
+ * and click 'Install Facebook Connector'.
* 4. This will ask you to login to Facebook and grant permission to the
* plugin to do its stuff. Allow it to do so.
* 5. You're done. To turn it off visit your site's /facebook page again and
@@ -88,6 +88,10 @@ function facebook_init(&$a) {
$token = substr($token,0,strpos($token,'&'));
set_pconfig($uid,'facebook','access_token',$token);
set_pconfig($uid,'facebook','post','1');
+ fb_get_self($uid);
+ fb_get_friends($uid);
+ fb_consume_all($uid);
+
}
// todo: is this a browser session or a server session? where do we go?
@@ -95,6 +99,113 @@ function facebook_init(&$a) {
}
+
+function fb_get_self($uid) {
+ $access_token = get_pconfig($uid,'facebook','access_token');
+ if(! $access_token)
+ return;
+ $s = fetch_url('https://graph.facebook.com/me/?access_token=' . $access_token);
+ if($s) {
+ $j = json_decode($s);
+ set_pconfig($uid,'facebook','self_id',(string) $j->id);
+ }
+}
+
+
+
+function fb_get_friends($uid) {
+
+ $access_token = get_pconfig($uid,'facebook','access_token');
+ if(! $access_token)
+ return;
+ $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
+ if($s) {
+ logger('facebook: fb_get_friends: ' . $s);
+ $j = json_decode($s);
+ logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
+ foreach($j->data as $person) {
+ $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
+ if($s) {
+ $jp = json_decode($s);
+ logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
+
+ // always use numeric link for consistency
+
+ $jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
+
+ // check if we already have a contact
+
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
+ intval($uid),
+ dbesc($jp->link)
+ );
+
+ if(count($r)) {
+ continue;
+ }
+ else {
+
+ // create contact record
+ $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `addr`, `alias`, `notify`, `poll`,
+ `name`, `nick`, `photo`, `network`, `rel`, `priority`,
+ `writable`, `blocked`, `readonly`, `pending` )
+ VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
+ intval($uid),
+ dbesc(datetime_convert()),
+ dbesc($jp->link),
+ dbesc(''),
+ dbesc(''),
+ dbesc($jp->id),
+ dbesc('facebook ' . $jp->id),
+ dbesc($jp->name),
+ dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
+ dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
+ dbesc(NETWORK_FACEBOOK),
+ intval(REL_BUD),
+ intval(1),
+ intval(1)
+ );
+ }
+
+ $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
+ dbesc($jp->link),
+ intval($uid)
+ );
+
+ if(! count($r)) {
+ continue;
+ }
+
+ $contact = $r[0];
+ $contact_id = $r[0]['id'];
+
+ require_once("Photo.php");
+
+ $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id);
+
+ $r = q("UPDATE `contact` SET `photo` = '%s',
+ `thumb` = '%s',
+ `micro` = '%s',
+ `name-date` = '%s',
+ `uri-date` = '%s',
+ `avatar-date` = '%s'
+ WHERE `id` = %d LIMIT 1
+ ",
+ dbesc($photos[0]),
+ dbesc($photos[1]),
+ dbesc($photos[2]),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ dbesc(datetime_convert()),
+ intval($contact_id)
+ );
+
+ }
+ }
+ }
+}
+
+
function facebook_post(&$a) {
if(local_user()){
@@ -116,6 +227,12 @@ function facebook_content(&$a) {
notice( t('Facebook disabled') . EOL);
}
+ if($a->argc > 1 && $a->argv[1] === 'friends') {
+ fb_get_friends(local_user());
+ notice( t('Updating contacts') . EOL);
+ }
+
+
$fb_installed = get_pconfig(local_user(),'facebook','post');
$appid = get_config('facebook','appid');
@@ -134,14 +251,14 @@ function facebook_content(&$a) {
$o .= '<div id="facebook-enable-wrapper">';
$o .= '<a href="https://www.facebook.com/dialog/oauth?client_id=' . $appid . '&redirect_uri='
- . $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook post connector') . '</a>';
+ . $a->get_baseurl() . '/facebook/' . $a->user['nickname'] . '&scope=publish_stream,read_stream,offline_access">' . t('Install Facebook connector for this account.') . '</a>';
$o .= '</div>';
}
if($fb_installed) {
$o .= '<div id="facebook-disable-wrapper">';
- $o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook post connector') . '</a></div>';
+ $o .= '<a href="' . $a->get_baseurl() . '/facebook/remove' . '">' . t('Remove Facebook connector') . '</a></div>';
$o .= '<div id="facebook-post-default-form">';
$o .= '<form action="facebook" method="post" >';
@@ -158,6 +275,7 @@ function facebook_install() {
register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
+ register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
}
@@ -165,9 +283,46 @@ function facebook_uninstall() {
unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
+ unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
}
+function facebook_cron($a,$b) {
+
+ $last = get_config('facebook','last_poll');
+
+ $poll_interval = intval(get_config('facebook','poll_interval'));
+ if(! $poll_interval)
+ $poll_interval = 3600;
+
+ if($last) {
+ $next = $last + $poll_interval;
+ if($next > time())
+ return;
+ }
+
+ logger('facebook_cron');
+
+ set_config('facebook','last_poll', time());
+
+ $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'post' AND `v` = '1' ");
+ if(count($r)) {
+ foreach($r as $rr) {
+ // check for new friends once a day
+ $last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check');
+ if($last_friend_check)
+ $next_friend_check = $last_friend_check + 86400;
+ if($next_friend_check <= time()) {
+ fb_get_friends($rr['uid']);
+ set_pconfig($rr['uid'],'facebook','friend_check',time());
+ }
+ fb_consume_all($rr['uid']);
+ }
+ }
+}
+
+
+
function facebook_plugin_settings(&$a,&$b) {
$b .= '<div class="settings-block">';
@@ -197,9 +352,75 @@ function facebook_post_hook(&$a,&$b) {
* Post to Facebook stream
*/
+ require_once('include/group.php');
+
logger('Facebook post');
- if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent'])) {
+ $reply = false;
+ $likes = false;
+
+ if((local_user()) && (local_user() == $b['uid'])) {
+
+ if($b['parent']) {
+ $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($b['parent']),
+ intval(local_user())
+ );
+ if(count($r) && substr($r[0]['uri'],0,4) === 'fb::')
+ $reply = substr($r[0]['uri'],4);
+ else
+ return;
+ logger('facebook reply id=' . $reply);
+ }
+
+ if($b['private'] && $reply == false) {
+ $allow_people = expand_acl($b['allow_cid']);
+ $allow_groups = expand_groups(expand_acl($b['allow_gid']));
+ $deny_people = expand_acl($b['deny_cid']);
+ $deny_groups = expand_groups(expand_acl($b['deny_gid']));
+
+ $recipients = array_unique(array_merge($allow_people,$allow_groups));
+ $deny = array_unique(array_merge($deny_people,$deny_groups));
+
+ $allow_str = dbesc(implode(', ',$recipients));
+ if($allow_str) {
+ $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $allow_str ) AND `network` = 'face'");
+ $allow_arr = array();
+ if(count($r))
+ foreach($r as $rr)
+ $allow_arr[] = $rr['notify'];
+ }
+
+ $deny_str = dbesc(implode(', ',$deny));
+ if($deny_str) {
+ $r = q("SELECT `notify` FROM `contact` WHERE `id` IN ( $deny_str ) AND `network` = 'face'");
+ $deny_arr = array();
+ if(count($r))
+ foreach($r as $rr)
+ $deny_arr[] = $rr['notify'];
+ }
+
+ if(count($deny_arr) && (! count($allow_arr))) {
+
+ // One or more FB folks were denied access but nobody on FB was specifically allowed access.
+ // This might cause the post to be open to public on Facebook, but only to selected members
+ // on another network. Since this could potentially leak a post to somebody who was denied,
+ // we will skip posting it to Facebook with a slightly vague but relevant message that will
+ // hopefully lead somebody to this code comment for a better explanation of what went wrong.
+
+ notice( t('Post to Facebook cancelled because of multi-network access permission conflict.') . EOL);
+ return;
+ }
+
+
+ // if it's a private message but no Facebook members are allowed or denied, skip Facebook post
+
+ if((! count($allow_arr)) && (! count($deny_arr)))
+ return;
+ }
+
+ if($b['verb'] == ACTIVITY_LIKE)
+ $likes = true;
$appid = get_config('facebook', 'appid' );
@@ -214,7 +435,12 @@ function facebook_post_hook(&$a,&$b) {
$fb_token = get_pconfig(local_user(),'facebook','access_token');
logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG);
- if($fb_post && $fb_token && $fb_enable) {
+
+ // post to facebook if it's a public post and we've ticked the 'post to Facebook' box,
+ // or it's a private message with facebook participants
+ // or it's a reply or likes action to an existing facebook post
+
+ if($fb_post && $fb_token && ($fb_enable || $b['private'] || $reply)) {
logger('facebook: able to post');
require_once('library/facebook.php');
require_once('include/bbcode.php');
@@ -225,9 +451,21 @@ function facebook_post_hook(&$a,&$b) {
// make links readable before we strip the code
+ if(preg_match("/\[url=(.+?)\](.+?)\[\/url\]/is",$msg,$matches)) {
+
+ $link = $matches[1];
+ if(substr($matches[2],0,5) != '[img]' )
+ $linkname = $matches[2];
+ }
+
$msg = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/is",'$2 $1',$msg);
- $msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1',$msg);
+ if(preg_match("/\[img\](.+?)\[\/img\]/is",$msg,$matches))
+ $image = $matches[1];
+
+ $msg = preg_replace("/\[img\](.+?)\[\/img\]/is", t('Image: ') . '$1', $msg);
+
+
$msg = trim(strip_tags(bbcode($msg)));
$msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8');
@@ -253,9 +491,57 @@ function facebook_post_hook(&$a,&$b) {
logger('Facebook post: msg=' . $msg, LOGGER_DATA);
- $postvars = array('access_token' => $fb_token, 'message' => $msg);
+ if($likes) {
+ $postvars = array('access_token' => $fb_token);
+ }
+ else {
+ $postvars = array(
+ 'access_token' => $fb_token,
+ 'message' => $msg
+ );
+ if(isset($image))
+ $postvars['picture'] = $image;
+ if(isset($link))
+ $postvars['link'] = $link;
+ if(isset($linkname))
+ $postvars['name'] = $linkname;
+ }
+
+ if(($b['private']) && (! $b['parent'])) {
+ $postvars['privacy'] = '{"value": "CUSTOM", "friends": "SOME_FRIENDS"';
+ if(count($allow_arr))
+ $postvars['privacy'] .= ',"allow": "' . implode(',',$allow_arr) . '"';
+ if(count($deny_arr))
+ $postvars['privacy'] .= ',"deny": "' . implode(',',$deny_arr) . '"';
+ $postvars['privacy'] .= '}';
+
+ }
+
+ if($reply) {
+ $url = 'https://graph.facebook.com/' . $reply . '/' . (($likes) ? 'likes' : 'comments');
+ }
+ else {
+ $url = 'https://graph.facebook.com/me/feed';
+ if($b['plink'])
+ $postvars['actions'] = '{"name": "' . t('View on Friendika') . '", "link": "' . $b['plink'] . '"}';
+ }
+
+ logger('facebook: post to ' . $url);
+ logger('facebook: postvars: ' . print_r($postvars,true));
+
+ // "test_mode" prevents anything from actually being posted.
+ // Otherwise, let's do it.
+
+ if(! get_config('facebook','test_mode'))
+ $x = post_url($url, $postvars);
- $x = post_url('https://graph.facebook.com/me/feed', $postvars);
+ $retj = json_decode($x);
+ if($retj->id) {
+ q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d LIMIT 1",
+ dbesc('fb::' . $retj->id),
+ intval($b['id'])
+ );
+ }
logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
@@ -264,3 +550,228 @@ function facebook_post_hook(&$a,&$b) {
}
}
+
+function fb_consume_all($uid) {
+
+ require_once('include/items.php');
+
+ $access_token = get_pconfig($uid,'facebook','access_token');
+ if(! $access_token)
+ return;
+ $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
+ if($s) {
+ $j = json_decode($s);
+ logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA);
+ fb_consume_stream($uid,$j,true);
+ }
+ $s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token);
+ if($s) {
+ $j = json_decode($s);
+ logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
+ fb_consume_stream($uid,$j,false);
+ }
+
+}
+
+function fb_consume_stream($uid,$j,$wall = false) {
+ $a = get_app();
+
+ $self = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+
+ $user = q("SELECT `nickname` FROM `user` WHERE `uid` = %d LIMIT 1",
+ intval($uid)
+ );
+ if(count($user))
+ $my_local_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
+
+
+ $self_id = get_pconfig($uid,'facebook','self_id');
+ if(! count($j->data) || (! strlen($self_id)))
+ return;
+
+ foreach($j->data as $entry) {
+ logger('fb_consume: entry: ' . print_r($entry,true), LOGGER_DATA);
+ $datarray = array();
+ $we_posted = false;
+ $app = $entry->application;
+ if($app->id == get_config('facebook','appid') && $wall)
+ $we_posted = true;
+
+ $r = q("SELECT * FROM `item` WHERE ( `uri` = '%s' OR `extid` = '%s') AND `uid` = %d LIMIT 1",
+ dbesc('fb::' . $entry->id),
+ dbesc('fb::' . $entry->id),
+ intval($uid)
+ );
+ if(count($r)) {
+ $post_exists = true;
+ $orig_post = $r[0];
+ $top_item = $r[0]['id'];
+ }
+ else {
+ $post_exists = false;
+ $orig_post = null;
+ }
+
+ if(! $orig_post) {
+ $datarray['gravity'] = 0;
+ $datarray['uid'] = $uid;
+ $datarray['wall'] = (($wall) ? 1 : 0);
+ $datarray['uri'] = $datarray['parent-uri'] = 'fb::' . $entry->id;
+ $from = $entry->from;
+ if($from->id == $self_id)
+ $datarray['contact-id'] = $self[0]['id'];
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+ dbesc($from->id),
+ intval($uid)
+ );
+ if(count($r))
+ $datarray['contact-id'] = $r[0]['id'];
+ }
+
+ // don't store post if we don't have a contact
+
+ if(! x($datarray,'contact-id'))
+ continue;
+
+ $datarray['verb'] = ACTIVITY_POST;
+ if($wall) {
+ $datarray['owner-name'] = $self[0]['name'];
+ $datarray['owner-link'] = $self[0]['url'];
+ $datarray['owner-avatar'] = $self[0]['thumb'];
+ }
+ $datarray['author-name'] = $from->name;
+ $datarray['author-link'] = 'http://facebook.com/profile.php?id=' . $from->id;
+ $datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture';
+ $datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
+
+ $datarray['body'] = $entry->message;
+ if($entry->picture)
+ $datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
+ if($entry->link)
+ $datarray['body'] .= "\n" . linkify($entry->link);
+ if($entry->name)
+ $datarray['body'] .= "\n" . $entry->name;
+ if($entry->caption)
+ $datarray['body'] .= "\n" . $entry->caption;
+ if($entry->description)
+ $datarray['body'] .= "\n" . $entry->description;
+ $datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
+ $datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
+ if($entry->privacy && $entry->privacy->value !== 'EVERYONE')
+ $datarray['private'] = 1;
+ $top_item = item_store($datarray);
+ $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
+ intval($top_item),
+ intval($uid)
+ );
+ if(count($r))
+ $orig_post = $r[0];
+
+ }
+ $likers = $entry->likes->data;
+ $comments = $entry->comments->data;
+
+ if(is_array($likers)) {
+ foreach($likers as $likes) {
+
+ $r = q("SELECT * FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `verb` = '%s' AND `author-link` = '%s'
+ LIMIT 1",
+ dbesc('fb::' . $entry->id),
+ intval($uid),
+ dbesc(ACTIVITY_LIKE),
+ dbesc('http://facebook.com/profile.php?id=' . $likes->id)
+ );
+ if(count($r))
+ continue;
+
+ $likedata = array();
+ $likedata['parent'] = $top_item;
+ $likedata['verb'] = ACTIVITY_LIKE;
+
+
+ $likedata['gravity'] = 3;
+ $likedata['uid'] = $uid;
+ $likedata['wall'] = (($wall) ? 1 : 0);
+ $likedata['uri'] = item_new_uri($a->get_baseurl(), $uid);
+ $likedata['parent-uri'] = 'fb::' . $entry->id;
+ if($likes->id == $self_id)
+ $likedata['contact-id'] = $self[0]['id'];
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+ dbesc($likes->id),
+ intval($uid)
+ );
+ if(count($r))
+ $likedata['contact-id'] = $r[0]['id'];
+ }
+ if(! x($likedata,'contact-id'))
+ $likedata['contact-id'] = $orig_post['contact-id'];
+
+ $likedata['verb'] = ACTIVITY_LIKE;
+ $likedata['author-name'] = $likes->name;
+ $likedata['author-link'] = 'http://facebook.com/profile.php?id=' . $likes->id;
+ $likedata['author-avatar'] = 'https://graph.facebook.com/' . $likes->id . '/picture';
+
+ $author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]';
+ $objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]';
+ $post_type = t('status');
+ $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]';
+ $likedata['object-type'] = ACTIVITY_OBJ_NOTE;
+
+ $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink);
+ $likedata['object'] = '<object><type>' . ACTIVITY_OBJ_NOTE . '</type><local>1</local>' .
+ '<id>' . $orig_post['uri'] . '</id><link>' . xmlify('<link rel="alternate" type="text/html" href="' . $orig_post['plink'] . '">') . '</link><title>' . $orig_post['title'] . '</title><content>' . $orig_post['body'] . '</content></object>';
+
+ $item = item_store($likedata);
+ }
+ }
+ if(is_array($comments)) {
+ foreach($comments as $cmnt) {
+
+ $r = q("SELECT * FROM `item` WHERE `uid` = %d AND ( `uri` = '%s' OR `extid` = '%s' ) LIMIT 1",
+ intval($uid),
+ dbesc('fb::' . $cmnt->id),
+ dbesc('fb::' . $cmnt->id)
+ );
+ if(count($r))
+ continue;
+
+ $cmntdata = array();
+ $cmntdata['parent'] = $top_item;
+ $cmntdata['verb'] = ACTIVITY_POST;
+ $cmntdata['gravity'] = 6;
+ $cmntdata['uid'] = $uid;
+ $cmntdata['wall'] = (($wall) ? 1 : 0);
+ $cmntdata['uri'] = 'fb::' . $cmnt->id;
+ $cmntdata['parent-uri'] = 'fb::' . $entry->id;
+ if($cmnt->from->id == $self_id) {
+ $cmntdata['contact-id'] = $self[0]['id'];
+ }
+ elseif(is_array($orig_post) && (x($orig_post,'contact-id')))
+ $cmntdata['contact-id'] = $orig_post['contact-id'];
+ else {
+ $r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
+ dbesc($cmnt->from->id),
+ intval($uid)
+ );
+ if(count($r))
+ $cmntdata['contact-id'] = $r[0]['id'];
+ }
+ if(! x($cmntdata,'contact-id'))
+ return;
+ $cmntdata['created'] = datetime_convert('UTC','UTC',$cmnt->created_time);
+ $cmntdata['edited'] = datetime_convert('UTC','UTC',$cmnt->created_time);
+ $cmntdata['verb'] = ACTIVITY_POST;
+ $cmntdata['author-name'] = $cmnt->from->name;
+ $cmntdata['author-link'] = 'http://facebook.com/profile.php?id=' . $cmnt->from->id;
+ $cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
+ $cmntdata['body'] = $cmnt->message;
+ $item = item_store($cmntdata);
+ }
+ }
+ }
+}
+
diff --git a/boot.php b/boot.php
index ab738e213..cddba996c 100644
--- a/boot.php
+++ b/boot.php
@@ -1,15 +1,26 @@
<?php
set_time_limit(0);
+ini_set('pcre.backtrack_limit', 250000);
-define ( 'FRIENDIKA_VERSION', '2.1.955' );
+define ( 'FRIENDIKA_VERSION', '2.1.969' );
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
-define ( 'DB_UPDATE_VERSION', 1053 );
+define ( 'DB_UPDATE_VERSION', 1054 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
define ( 'DOWN_ARROW', '&#x21e9;' );
-
+
+/**
+ *
+ * Image storage quality. Lower numbers save space at cost of image detail.
+ * For ease of upgrade, please do not change here. Change jpeg quality with
+ * set_config('system','jpeg_quality',n) in .htconfig.php
+ * where n is netween 1 and 100, and with very poor results below about 50
+ *
+ */
+
+define ( 'JPEG_QUALITY', 100 );
/**
* SSL redirection policies
@@ -845,8 +856,10 @@ function login($register = false) {
$tpl = load_view_file("view/login.tpl");
}
-
- $o = replace_macros($tpl,array(
+
+ $o = '<script type="text/javascript"> $(document).ready(function() { $("#login-name").focus();} );</script>';
+
+ $o .= replace_macros($tpl,array(
'$logout' => t('Logout'),
'$register_html' => $register_html,
'$classname' => $classname,
@@ -1218,6 +1231,7 @@ function set_config($family,$key,$value) {
global $a;
if(get_config($family,$key,true) === false) {
+ $a->config[$family][$key] = $value;
$ret = q("INSERT INTO `config` ( `cat`, `k`, `v` ) VALUES ( '%s', '%s', '%s' ) ",
dbesc($family),
dbesc($key),
@@ -1312,6 +1326,7 @@ function set_pconfig($uid,$family,$key,$value) {
global $a;
if(get_pconfig($uid,$family,$key,true) === false) {
+ $a->config[$uid][$family][$key] = $value;
$ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
intval($uid),
dbesc($family),
@@ -2125,7 +2140,7 @@ function smilies($s) {
$a = get_app();
return str_replace(
- array( '&lt;3', '&lt;/3', '&lt;\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
+ array( '&lt;3', '&lt;/3', '&lt;\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
array(
'<img src="' . $a->get_baseurl() . '/images/smiley-heart.gif" alt="<3" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-brokenheart.gif" alt="</3" />',
@@ -2135,6 +2150,7 @@ function smilies($s) {
'<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":-(" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-frown.gif" alt=":(" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-tongue-out.gif" alt=":-P" />',
+ '<img src="' . $a->get_baseurl() . '/images/smiley-tongue-out.gif" alt=":P" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-\"" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-x" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-kiss.gif" alt=":-X" />',
@@ -2513,7 +2529,7 @@ function current_theme(){
$a = get_app();
$system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
- $theme_name = ((x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+ $theme_name = ((is_array($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
if($theme_name && file_exists('view/theme/' . $theme_name . '/style.css'))
return($theme_name);
@@ -2628,7 +2644,7 @@ if(! function_exists('get_plink')) {
function get_plink($item) {
$a = get_app();
$plink = (((x($item,'plink')) && (! $item['private'])) ? '<div class="wall-item-links-wrapper"><a href="'
- . $item['plink'] . '" title="' . t('link to source') . '" target="external-link" ><img src="' . $a->get_baseurl() . '/images/remote-link.gif" alt="' . t('link to source') . '" /></a></div>' : '');
+ . $item['plink'] . '" title="' . t('link to source') . '" target="external-link" class="icon remote-link"></a></div>' : '');
return $plink;
}}
diff --git a/database.sql b/database.sql
index 84bb42ff3..c15a9ad9c 100644
--- a/database.sql
+++ b/database.sql
@@ -166,6 +166,7 @@ CREATE TABLE IF NOT EXISTS `item` (
`gravity` tinyint(1) NOT NULL DEFAULT '0',
`parent` int(10) unsigned NOT NULL DEFAULT '0',
`parent-uri` char(255) NOT NULL,
+ `extid` char(255) NOT NULL,
`thr-parent` char(255) NOT NULL,
`created` datetime NOT NULL,
`edited` datetime NOT NULL,
@@ -208,6 +209,7 @@ CREATE TABLE IF NOT EXISTS `item` (
KEY `wall` (`wall`),
KEY `parent` (`parent`),
KEY `parent-uri` (`parent-uri`),
+ KEY `extid` (`extid`),
KEY `created` (`created`),
KEY `edited` (`edited`),
KEY `visible` (`visible`),
diff --git a/doc/Home.md b/doc/Home.md
index 4dccfde84..cf4946f95 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -5,10 +5,10 @@ Friendika Documentation and Resources
**Contents**
* [Account Basics](help/Account-Basics)
-* [Making Friends](help/Making-Friends)
-* [Tags and Mentions](help/Tags-and-Mentions)
* [Profiles](help/Profiles)
+* [Making Friends](help/Making-Friends)
* [Groups and Privacy](help/Groups-and-Privacy)
+* [Tags and Mentions](help/Tags-and-Mentions)
* [Pages](help/Pages)
* [Remove Account](help/Remove-Account)
* [Bugs and Issues](help/Bugs-and-Issues)
@@ -28,3 +28,7 @@ Friendika Documentation and Resources
* [Forums](http://groups.google.com/group/friendika)
* [Developer Forums](http://groups.google.com/group/friendika-dev)
+**About**
+
+* [Site/Version Info](friendika)
+
diff --git a/doc/Profiles.md b/doc/Profiles.md
index 9c81071c5..631a4331b 100644
--- a/doc/Profiles.md
+++ b/doc/Profiles.md
@@ -5,7 +5,7 @@ Profiles
Friendika has unlimited profiles. You may use different profiles to show different "sides of yourself" to different audiences.
-You always have a profile known as your "default" profile (though you may change the name). This profile is always available to the general public and cannot be hidden. You may (and probably should) restrict the information you make available on your public profile.
+You always have a profile known as your "default" or "public" profile. This profile is always available to the general public and cannot be hidden (there may be rare exceptions on privately run or disconnected sites). You may, and probably should restrict the information you make available on your public profile.
That said, if you want other friends to be able to find you, it helps to have the following information in your public profile...
@@ -15,7 +15,7 @@ That said, if you want other friends to be able to find you, it helps to have th
Without this basic information, you could get very lonely here. Most people (even your best friends) will not try and connect with somebody that has a fake name or doesn't contain a real photo.
-In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some "Public Keywords" to your profile. Such as "music, linux, photography" or whatever. You can add as many keywords as you like. Without this, people with similar interests may never know it unless you stumble across them through another friend.
+In addition, if you'd like to meet people that share some general interests with you, please take a moment and add some "Public Keywords" to your profile. Such as "music, linux, photography" or whatever. You can add as many keywords as you like.
Your default or public profile is also shown to contacts on other networks, since they do not have the ability to view your private profiles. Only members of the Friendika network can see alternate/private profiles.
@@ -41,7 +41,7 @@ Although you may have multiple profiles, you only have one profile photo. This i
**Keywords and Directory Search**
-On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. These keywords are *not* displayed on your profile page. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. In Friendika version 2.2 and later there are two sets of Keywords - public and private. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page. Private keywords are hidden and secret. (Keywords from earlier releases are all converted into private keywords during upgrade).
+On the site Directory page, you may search for people with published profiles who are on this site. The search is typically for your nickname or part of your full name. However this search will also match against other profile fields - such as gender, location, "about", work, and education. You may also include "Keywords" in your default profile - which may be used to search for common interests with other members. You have two sets of keywords available - public and private. Private keywords are *not* visible to anybody. You could use these keywords to locate people who share membership in secret societies, or that share a love of fishing (for example) - without making this information visible on your public profile. Public keywords are used in the friend suggestion tool and although they aren't readily visible, they may be seen by viewing the HTML of your profile page.
Directory searches are also able to use "boolean" logic so that you can search for "+lesbian +Florida" and find those who's sexual preference (or keywords) contain the world "lesbian" and that live in Florida. See the section on "Topical Tags" on the [[Tags-and-Mentions]] page for more information on performing boolean searches.
diff --git a/doc/Settings.md b/doc/Settings.md
index 215eeb327..8abb8a567 100644
--- a/doc/Settings.md
+++ b/doc/Settings.md
@@ -75,6 +75,17 @@ Config:
$a->config['system']['allowed_email'] = "sitea.com, *siteb.com";
```
+**Block Public**
+
+Corporate/Edu enhancement
+
+Set to true to block public access to all otherwise public personal pages on this site unless you are currently logged in. This blocks the viewing of profiles, friends, photos, the site directory and search pages to unauthorised persons. A side effect is that entries from this site will not appear in the global directory. We recommend specifically disabling that also (setting is described elsewhere on this page). Note: this is specifically for sites that desire to be "standalone" and do not wish to be connected to any other Friendika sites. Unauthorised persons will also not be able to request friendship with site members. Default is false. Available in version 2.2 or greater.
+
+Config:
+```
+$a->config['system']['block_public'] = true;
+```
+
**Force Publish**
diff --git a/htconfig.php b/htconfig.php
index fb62245d2..0f9222ac5 100644
--- a/htconfig.php
+++ b/htconfig.php
@@ -38,7 +38,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/images/icons.png b/images/icons.png
new file mode 100644
index 000000000..734c75f73
--- /dev/null
+++ b/images/icons.png
Binary files differ
diff --git a/include/Photo.php b/include/Photo.php
index 9934b9a39..707b0de5d 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -162,12 +162,20 @@ class Photo {
}
public function saveImage($path) {
- imagejpeg($this->image,$path,100);
+ $quality = get_config('system','jpeg_quality');
+ if((! $quality) || ($quality > 100))
+ $quality = JPEG_QUALITY;
+ imagejpeg($this->image,$path,$quality);
}
public function imageString() {
ob_start();
- imagejpeg($this->image,NULL,100);
+
+ $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;
diff --git a/include/acl_selectors.php b/include/acl_selectors.php
index d1303d933..f2763a569 100644
--- a/include/acl_selectors.php
+++ b/include/acl_selectors.php
@@ -48,7 +48,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
$o = '';
- // When used for private messages, we limit correspondence to mutual friends and the selector
+ // When used for private messages, we limit correspondence to mutual DFRN/Friendika friends and the selector
// to one recipient. By default our selector allows multiple selects amongst all contacts.
$sql_extra = '';
@@ -61,7 +61,7 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
$sql_extra .= " AND `network` IN ( 'dfrn' ) ";
}
elseif($privatenet) {
- $sql_extra .= " AND `network` IN ( 'dfrn', 'mail' ) ";
+ $sql_extra .= " AND `network` IN ( 'dfrn', 'mail', 'face' ) ";
}
if($privmail)
@@ -83,8 +83,6 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p
call_hooks($a->module . '_pre_' . $selname, $arr);
-
-
if(count($r)) {
foreach($r as $rr) {
if((is_array($preselected)) && in_array($rr['id'], $preselected))
diff --git a/include/auth.php b/include/auth.php
index e8cee3918..4c7e85d86 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -191,9 +191,17 @@ else {
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $record['nickname'];
$_SESSION['addr'] = $_SERVER['REMOTE_ADDR'];
- notice( t("Welcome back ") . $record['username'] . EOL);
$a->user = $record;
+ if($a->user['login_date'] === '0000-00-00 00:00:00') {
+ $_SESSION['return_url'] = 'profile_photo/new';
+ $a->module = 'profile_photo';
+ notice( t("Welcome ") . $a->user['username'] . EOL);
+ notice( t('Please upload a profile photo.') . EOL);
+ }
+ else
+ notice( t("Welcome back ") . $a->user['username'] . EOL);
+
if(strlen($a->user['timezone'])) {
date_default_timezone_set($a->user['timezone']);
$a->timezone = $a->user['timezone'];
@@ -214,6 +222,8 @@ else {
$a->cid = $r[0]['id'];
$_SESSION['cid'] = $a->cid;
}
+
+
q("UPDATE `user` SET `login_date` = '%s' WHERE `uid` = %d LIMIT 1",
dbesc(datetime_convert()),
intval($_SESSION['uid'])
diff --git a/include/bbcode.php b/include/bbcode.php
index 6fadbaf7e..89a14988a 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -80,7 +80,7 @@ function bbcode($Text,$preserve_nl = false) {
// Images
// [img]pathtoimage[/img]
- $Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1">', $Text);
+ $Text = preg_replace("/\[img\](.+?)\[\/img\]/", '<img src="$1" alt="' . t('Image/photo') . '" />', $Text);
// html5 video and audio
diff --git a/include/conversation.php b/include/conversation.php
index 1c56fa1bf..7c30c01c2 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -225,7 +225,7 @@ function conversation(&$a, $items, $mode, $update) {
$comments = array();
foreach($items as $item) {
- if(intval($item['gravity']) == 6) {
+ if((intval($item['gravity']) == 6) && ($item['id'] != $item['parent'])) {
if(! x($comments,$item['parent']))
$comments[$item['parent']] = 1;
else
@@ -294,6 +294,7 @@ function conversation(&$a, $items, $mode, $update) {
$comments_seen ++;
+ $override_comment_box = ((($page_writeable) && ($item_writeable)) ? true : false);
$show_comment_box = ((($page_writeable) && ($item_writeable) && ($comments_seen == $comments[$item['parent']])) ? true : false);
if(($comments[$item['parent']] > 2) && ($comments_seen <= ($comments[$item['parent']] - 2)) && ($item['gravity'] == 6)) {
@@ -368,7 +369,7 @@ function conversation(&$a, $items, $mode, $update) {
));
}
- if(($show_comment_box) || (($show_comment_box == false) && ($item['last-child']))) {
+ if(($show_comment_box) || (($show_comment_box == false) && ($override_comment_box == false) && ($item['last-child']))) {
$comment = replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => (($mode === 'display') ? $_SESSION['return_url'] : ''),
@@ -686,6 +687,7 @@ function status_editor($a,$x) {
'$baseurl' => $a->get_baseurl(),
'$geotag' => $geotag,
'$nickname' => $x['nickname'],
+ '$ispublic' => t('Visible to <strong>everybody</strong>'),
'$linkurl' => t('Please enter a link URL:'),
'$utubeurl' => t('Please enter a YouTube link:'),
'$vidurl' => t("Please enter a video\x28.ogg\x29 link/URL:"),
@@ -744,7 +746,7 @@ function status_editor($a,$x) {
'$content' => '',
'$post_id' => '',
'$baseurl' => $a->get_baseurl(),
- '$defloc' => $x['default-location'],
+ '$defloc' => $x['default_location'],
'$visitor' => $x['visitor'],
'$emailcc' => t('CC: email addresses'),
'$jotnets' => $jotnets,
diff --git a/include/group.php b/include/group.php
index 5dca08c76..8866104fc 100644
--- a/include/group.php
+++ b/include/group.php
@@ -124,7 +124,7 @@ function group_public_members($gid) {
$r = q("SELECT `contact`.`id` AS `contact-id` FROM `group_member`
LEFT JOIN `contact` ON `contact`.`id` = `group_member`.`contact-id`
WHERE `gid` = %d AND `group_member`.`uid` = %d
- AND `contact`.`network` != 'dfrn' AND `contact`.`network` != 'mail' ",
+ AND `contact`.`network` != 'dfrn' AND `contact`.`network` != 'mail' AND `contact`.`network` != 'face' ",
intval($gid),
intval(local_user())
);
diff --git a/include/items.php b/include/items.php
index 733cd8048..3a3085f1b 100644
--- a/include/items.php
+++ b/include/items.php
@@ -701,6 +701,7 @@ function item_store($arr,$force_parent = false) {
$parent_id = 0;
$arr['thr-parent'] = $arr['parent-uri'];
$arr['parent-uri'] = $arr['uri'];
+ $arr['gravity'] = 0;
}
else {
logger('item_store: item parent was not found - ignoring item');
@@ -1496,10 +1497,17 @@ function atom_author($tag,$name,$uri,$h,$w,$photo) {
function atom_entry($item,$type,$author,$owner,$comment = false) {
+ $a = get_app();
+
if($item['deleted'])
return '<at:deleted-entry ref="' . xmlify($item['uri']) . '" when="' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '" />' . "\r\n";
- $a = get_app();
+
+ if($item['allow_cid'] || $item['allow_gid'] || $item['deny_cid'] || $item['deny_gid'])
+ $body = fix_private_photos($item['body'],$owner['uid']);
+ else
+ $body = $item['body'];
+
$o = "\r\n\r\n<entry>\r\n";
@@ -1517,8 +1525,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
$o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n";
$o .= '<published>' . xmlify(datetime_convert('UTC','UTC',$item['created'] . '+00:00',ATOM_TIME)) . '</published>' . "\r\n";
$o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
- $o .= '<dfrn:env>' . base64url_encode($item['body'], true) . '</dfrn:env>' . "\r\n";
- $o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($item['body']) : $item['body']) . '</content>' . "\r\n";
+ $o .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n";
+ $o .= '<content type="' . $type . '" >' . xmlify(($type === 'html') ? bbcode($body) : $body) . '</content>' . "\r\n";
$o .= '<link rel="alternate" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
if($comment)
$o .= '<dfrn:comment-allow>' . intval($item['last-child']) . '</dfrn:comment-allow>' . "\r\n";
@@ -1563,6 +1571,38 @@ function atom_entry($item,$type,$author,$owner,$comment = false) {
return $o;
}
+function fix_private_photos($s,$uid) {
+ $a = get_app();
+ logger('fix_private_photos');
+
+ if(preg_match("/\[img\](.+?)\[\/img\]/is",$s,$matches)) {
+ $image = $matches[1];
+ logger('fix_private_photos: found photo ' . $image);
+ if(stristr($image ,$a->get_baseurl() . '/photo/')) {
+ $i = basename($image);
+ $i = str_replace('.jpg','',$i);
+ $x = strpos($i,'-');
+ if($x) {
+ $res = substr($i,$x+1);
+ $i = substr($i,0,$x);
+ $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` = %d AND `uid` = %d",
+ dbesc($i),
+ intval($res),
+ intval($uid)
+ );
+ if(count($r)) {
+ logger('replacing photo');
+ $s = str_replace($image, 'data:image/jpg;base64,' . base64_encode($r[0]['data']), $s);
+ }
+ }
+ logger('fix_private_photos: replaced: ' . $s, LOGGER_DATA);
+ }
+ }
+ return($s);
+}
+
+
+
function item_getfeedtags($item) {
$ret = array();
$matches = false;
diff --git a/include/main.js b/include/main.js
index a251d8e3a..c7a3aea48 100644
--- a/include/main.js
+++ b/include/main.js
@@ -91,19 +91,20 @@
$.get("ping",function(data) {
$(data).find('result').each(function() {
var net = $(this).find('net').text();
- if(net == 0) { net = ''; }
+ if(net == 0) { net = ''; $('#net-update').hide() } else { $('#net-update').show() }
$('#net-update').html(net);
var home = $(this).find('home').text();
- if(home == 0) { home = ''; }
+ if(home == 0) { home = ''; $('#home-update').hide() } else { $('#home-update').show() }
$('#home-update').html(home);
var mail = $(this).find('mail').text();
- if(mail == 0) { mail = ''; }
+ if(mail == 0) { mail = ''; $('#mail-update').hide() } else { $('#mail-update').show() }
$('#mail-update').html(mail);
var intro = $(this).find('intro').text();
var register = $(this).find('register').text();
if(intro == 0) { intro = ''; }
if(register != 0 && intro != '') { intro = intro+'/'+register; }
if(register != 0 && intro == '') { intro = '0/'+register; }
+ if (intro == '') { $('#notify-update').hide() } else { $('#notify-update').show() }
$('#notify-update').html(intro);
});
@@ -161,15 +162,11 @@
}
function imgbright(node) {
- $(node).attr("src",$(node).attr("src").replace('hide','show'));
- $(node).css('width',24);
- $(node).css('height',24);
+ $(node).removeClass("drophide").addClass("drop");
}
function imgdull(node) {
- $(node).attr("src",$(node).attr("src").replace('show','hide'));
- $(node).css('width',16);
- $(node).css('height',16);
+ $(node).removeClass("drop").addClass("drophide");
}
// Since our ajax calls are asynchronous, we will give a few
diff --git a/include/notifier.php b/include/notifier.php
index 4cc6d7a99..b009cc870 100644
--- a/include/notifier.php
+++ b/include/notifier.php
@@ -20,6 +20,8 @@ function notifier_run($argv, $argc){
require_once('include/items.php');
require_once('include/bbcode.php');
+ load_hooks();
+
if($argc < 3)
return;
diff --git a/include/poller.php b/include/poller.php
index b5639e034..dd2efcb76 100644
--- a/include/poller.php
+++ b/include/poller.php
@@ -26,6 +26,8 @@ function poller_run($argv, $argc){
$a->set_baseurl(get_config('system','url'));
+ load_hooks();
+
logger('poller: start');
// run queue delivery process in the background
@@ -61,10 +63,12 @@ function poller_run($argv, $argc){
$sql_extra = (($manual_id) ? " AND `id` = $manual_id " : "");
+ reload_plugins();
+
$d = datetime_convert();
+
call_hooks('cron', $d);
- reload_plugins();
$contacts = q("SELECT `id` FROM `contact`
WHERE ( `rel` = %d OR `rel` = %d ) AND `poll` != ''
diff --git a/index.php b/index.php
index 074c1c53a..05eef6c6e 100644
--- a/index.php
+++ b/index.php
@@ -1,5 +1,7 @@
<?php
+
error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
/**
*
* Friendika
diff --git a/mod/contacts.php b/mod/contacts.php
index a1219f94d..c22bc3c83 100644
--- a/mod/contacts.php
+++ b/mod/contacts.php
@@ -285,7 +285,7 @@ function contacts_content(&$a) {
'$contact_id' => $r[0]['id'],
'$block_text' => (($r[0]['blocked']) ? t('Unblock this contact') : t('Block this contact') ),
'$ignore_text' => (($r[0]['readonly']) ? t('Unignore this contact') : t('Ignore this contact') ),
- '$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL) ? $insecure : ''),
+ '$insecure' => (($r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_FACEBOOK) ? $insecure : ''),
'$info' => $r[0]['info'],
'$blocked' => (($r[0]['blocked']) ? '<div id="block-message">' . t('Currently blocked') . '</div>' : ''),
'$ignored' => (($r[0]['readonly']) ? '<div id="ignore-message">' . t('Currently ignored') . '</div>' : ''),
diff --git a/mod/dfrn_poll.php b/mod/dfrn_poll.php
index f8c726c1a..718aa165c 100644
--- a/mod/dfrn_poll.php
+++ b/mod/dfrn_poll.php
@@ -27,6 +27,10 @@ function dfrn_poll_init(&$a) {
}
if(($dfrn_id === '') && (! x($_POST,'dfrn_id')) && ($a->argc > 1)) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ killme();
+ }
+
logger('dfrn_poll: public feed request from ' . $_SERVER['REMOTE_ADDR'] );
header("Content-type: application/atom+xml");
$o = get_feed_for($a, '', $a->argv[1],$last_update);
diff --git a/mod/dfrn_request.php b/mod/dfrn_request.php
index 4463c713f..1af0dc85d 100644
--- a/mod/dfrn_request.php
+++ b/mod/dfrn_request.php
@@ -12,6 +12,10 @@
if(! function_exists('dfrn_request_init')) {
function dfrn_request_init(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
+
if($a->argc > 1)
$which = $a->argv[1];
@@ -583,6 +587,12 @@ function dfrn_request_content(&$a) {
* Normal web request. Display our user's introduction form.
*/
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+
/**
* Try to auto-fill the profile address
*/
diff --git a/mod/directory.php b/mod/directory.php
index a02a4a4a5..95ddbda21 100644
--- a/mod/directory.php
+++ b/mod/directory.php
@@ -13,6 +13,12 @@ function directory_post(&$a) {
function directory_content(&$a) {
+
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
$o = '';
$o .= '<script> $(document).ready(function() { $(\'#nav-directory-link\').addClass(\'nav-selected\'); });</script>';
if(x($_SESSION,'theme'))
diff --git a/mod/display.php b/mod/display.php
index c8496160f..fdb93e480 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -3,6 +3,11 @@
function display_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
diff --git a/mod/editpost.php b/mod/editpost.php
index 3c92e8bbe..fd84fc26d 100644
--- a/mod/editpost.php
+++ b/mod/editpost.php
@@ -35,6 +35,7 @@ function editpost_content(&$a) {
$a->page['htmlhead'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
+ '$ispublic' => t('Visible to <strong>everybody</strong>'),
'$geotag' => $geotag,
'$nickname' => $a->user['nickname']
));
diff --git a/mod/item.php b/mod/item.php
index e53cfb033..c4f368fd0 100644
--- a/mod/item.php
+++ b/mod/item.php
@@ -538,7 +538,8 @@ function item_post(&$a) {
proc_run('php', "include/notifier.php", $notify_type, "$post_id");
- $datarray['id'] = $post_id;
+ $datarray['id'] = $post_id;
+ $datarray['plink'] = $a->get_baseurl() . '/display/' . $user['nickname'] . '/' . $post_id;
call_hooks('post_local_end', $datarray);
@@ -670,7 +671,8 @@ function item_content(&$a) {
// send the notification upstream/downstream as the case may be
proc_run('php',"include/notifier.php","drop","$drop_id");
-
+// We seem to lose the return url occasionally. Have not been able to reliably duplicate
+// logger('drop_return_url: ' . $_SESSION['return_url']);
goaway($a->get_baseurl() . '/' . $_SESSION['return_url']);
//NOTREACHED
}
diff --git a/mod/like.php b/mod/like.php
index 3e3d69529..966fe500b 100644
--- a/mod/like.php
+++ b/mod/like.php
@@ -173,6 +173,10 @@ EOT;
);
}
+ $arr['id'] = $post_id;
+
+ call_hooks('post_local_end', $arr);
+
proc_run('php',"include/notifier.php","like","$post_id");
return; // NOTREACHED
diff --git a/mod/network.php b/mod/network.php
index f40d34353..7ad5058bf 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -137,7 +137,7 @@ function network_content(&$a, $update = 0) {
notice( t('Group is empty'));
}
- $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( $contact_str )) ";
+ $sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND ( `contact-id` IN ( $contact_str ) OR `allow_gid` REGEXP '<" . intval($group) . ">' )) ";
$o = '<h2>' . t('Group: ') . $r[0]['name'] . '</h2>' . $o;
}
elseif($cid) {
@@ -149,7 +149,7 @@ function network_content(&$a, $update = 0) {
if(count($r)) {
$sql_extra = " AND `item`.`parent` IN ( SELECT `parent` FROM `item` WHERE `id` = `parent` AND `contact-id` IN ( " . intval($cid) . " )) ";
$o = '<h2>' . t('Contact: ') . $r[0]['name'] . '</h2>' . $o;
- if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
+ if($r[0]['network'] !== NETWORK_MAIL && $r[0]['network'] !== NETWORK_DFRN && $r[0]['network'] !== NETWORK_FACEBOOK && $r[0]['writable'] && (! get_pconfig(local_user(),'system','nowarn_insecure'))) {
notice( t('Private messages to this person are at risk of public disclosure.') . EOL);
}
@@ -164,11 +164,13 @@ function network_content(&$a, $update = 0) {
if((! $group) && (! $cid) && (! $update))
$o .= get_birthdays();
+ $sql_extra2 = (($nouveau) ? '' : " AND `item`.`parent` = `item`.`id` ");
$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 `contact`.`blocked` = 0 AND `contact`.`pending` = 0
+ $sql_extra2
$sql_extra ",
intval($_SESSION['uid'])
);
diff --git a/mod/openid.php b/mod/openid.php
index 68d7c3fd2..c3c6c11e9 100644
--- a/mod/openid.php
+++ b/mod/openid.php
@@ -70,9 +70,18 @@ function openid_content(&$a) {
$_SESSION['page_flags'] = $r[0]['page-flags'];
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
- notice( sprintf( t("Welcome back "), $r[0]['username']) . EOL);
$a->user = $r[0];
+ if($a->user['login_date'] === '0000-00-00 00:00:00') {
+ $_SESSION['return_url'] = 'profile_photo/new';
+ $a->module = 'profile_photo';
+ notice( t("Welcome ") . $a->user['username'] . EOL);
+ notice( t('Please upload a profile photo.') . EOL);
+ }
+ else
+ notice( t("Welcome back ") . $a->user['username'] . EOL);
+
+
if(strlen($a->user['timezone'])) {
date_default_timezone_set($a->user['timezone']);
$a->timezone = $a->user['timezone'];
diff --git a/mod/photos.php b/mod/photos.php
index 186873a7b..7f94bc520 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -6,6 +6,10 @@ require_once('include/bbcode.php');
function photos_init(&$a) {
+
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
$o = '';
if($a->argc > 1) {
@@ -635,6 +639,9 @@ foreach($_FILES AS $key => $val) {
$item_id = item_store($arr);
+ if($visible)
+ proc_run('php', "include/notifier.php", 'wall-new', $item_id);
+
call_hooks('photo_post_end',intval($item_id));
// addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
@@ -657,6 +664,12 @@ function photos_content(&$a) {
// photos/name/image/xxxxx/edit
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
+
require_once('include/bbcode.php');
require_once('include/security.php');
require_once('include/conversation.php');
@@ -899,7 +912,7 @@ function photos_content(&$a) {
- $o = '<div id="live-display"></div>' . "\r\n";
+ $o = '';
// fetch image, item containing image, then comments
$ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
@@ -952,34 +965,36 @@ function photos_content(&$a) {
}
}
-
- $o .= '<h3>' . '<a href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']) . '">' . $ph[0]['album'] . '</a></h3>';
+ $album_link = $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($ph[0]['album']);
+ $tools = Null;
+ $lock = Null;
if($can_post && ($ph[0]['uid'] == $owner_uid)) {
- $o .= '<div id="photo-edit-link-wrap" ><a id="photo-edit-link" href="' . $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit' . '">' . t('Edit photo') . '</a>';
-
- $o .= ' - <a id="photo-toprofile-link" href="' . $a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'].'">'.t('Use as profile photo').'</a>';
+ $tools = array(
+ 'edit' => array($a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/image/' . $datum . '/edit', t('Edit photo')),
+ 'profile'=>array($a->get_baseurl() . '/profile_photo/use/'.$ph[0]['resource-id'], t('Use as profile photo')),
+ );
+
// lock
- $o .= ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
+ $lock = ( ( ($ph[0]['uid'] == local_user()) && (strlen($ph[0]['allow_cid']) || strlen($ph[0]['allow_gid'])
|| strlen($ph[0]['deny_cid']) || strlen($ph[0]['deny_gid'])) )
- ? ' - <img src="images/lock_icon.gif" class="lockview" alt="' . t('Private Message') . '" onclick="lockview(event,\'photo/' . $ph[0]['id'] . '\');" />'
- : '');
+ ? t('Private Message')
+ : Null);
- $o .= '</div>';
+
}
if($prevlink)
- $o .= '<div id="photo-prev-link"><a href="' . $prevlink .'">' . t('<< Prev') . '</a></div>' ;
+ $prevlink = array($prevlink, t('<< Prev')) ;
- $o .= '<div id="photo-photo"><a href="' . $a->get_baseurl() . '/photo/'
- . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg" title="'
- . t('View Full Size') . '" ><img src="' . $a->get_baseurl() . '/photo/'
- . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg' . '" /></a></div>';
+ $photo = array(
+ 'href' => $a->get_baseurl() . '/photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.jpg',
+ 'title'=> t('View Full Size'),
+ 'src' => $a->get_baseurl() . '/photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.jpg'
+ );
if($nextlink)
- $o .= '<div id="photo-next-link"><a href="' . $nextlink .'">' . t('Next >>') . '</a></div>';
-
- $o .= '<div id="photo-photo-end"></div>';
+ $nextlink = array($nextlink, t('Next >>'));
// Do we have an item for this photo?
@@ -1031,28 +1046,27 @@ function photos_content(&$a) {
}
}
- $o .= '<div id="photo-caption" >' . $ph[0]['desc'] . '</div>';
-
+ $tags=Null;
if(count($linked_items) && strlen($link_item['tag'])) {
$arr = explode(',',$link_item['tag']);
- // parse tags and add links
- $o .= '<div id="in-this-photo-text">' . t('Tags: ') . '</div>';
- $o .= '<div id="in-this-photo">';
+ // parse tags and add links
$tag_str = '';
foreach($arr as $t) {
if(strlen($tag_str))
$tag_str .= ', ';
$tag_str .= bbcode($t);
}
- $o .= $tag_str . '</div>';
+ $tags = array(t('Tags: '), $tag_str);
if($cmd === 'edit')
- $o .= '<div id="tag-remove"><a href="' . $a->get_baseurl() . '/tagrm/' . $link_item['id'] . '">' . t('[Remove any tag]') . '</a></div>';
+ $tags[] = $a->get_baseurl() . '/tagrm/' . $link_item['id'];
+ $tags[] = t('[Remove any tag]');
}
+ $edit = Null;
if(($cmd === 'edit') && ($can_post)) {
$edit_tpl = load_view_file('view/photo_edit.tpl');
- $o .= replace_macros($edit_tpl, array(
+ $edit = replace_macros($edit_tpl, array(
'$id' => $ph[0]['id'],
'$album' => $ph[0]['album'],
'$newalbum' => t('New album name'),
@@ -1083,22 +1097,19 @@ function photos_content(&$a) {
if($can_post || can_write_wall($a,$owner_uid)) {
$likebuttons = replace_macros($like_tpl,array(
- '$id' => $item['id'],
+ '$id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"),
'$nolike' => t("I don't like this \x28toggle\x29"),
'$share' => t('Share'),
- '$wait' => t('Please wait')
+ '$wait' => t('Please wait')
));
}
+ $comments = '';
if(! count($r)) {
- $o .= '<div id="photo-like-div">';
- $o .= $likebuttons;
- $o .= '</div>';
-
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
- $o .= replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1118,6 +1129,9 @@ function photos_content(&$a) {
$alike = array();
$dlike = array();
+
+ $like = '';
+ $dislike = '';
// display comments
if(count($r)) {
@@ -1130,17 +1144,11 @@ function photos_content(&$a) {
$like = ((isset($alike[$link_item['id']])) ? format_like($alike[$link_item['id']],$alike[$link_item['id'] . '-l'],'like',$link_item['id']) : '');
$dislike = ((isset($dlike[$link_item['id']])) ? format_like($dlike[$link_item['id']],$dlike[$link_item['id'] . '-l'],'dislike',$link_item['id']) : '');
- $o .= '<div id="photo-like-div">';
- $o .= $likebuttons;
- $o .= $like;
- $o .= $dislike;
- $o .= '</div>';
-
if($can_post || can_write_wall($a,$owner_uid)) {
if($link_item['last-child']) {
- $o .= replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1169,7 +1177,7 @@ function photos_content(&$a) {
if($can_post || can_write_wall($a,$owner_uid)) {
if($item['last-child']) {
- $comment = replace_macros($cmnt_tpl,array(
+ $comments .= replace_macros($cmnt_tpl,array(
'$return_path' => '',
'$jsreload' => $return_url,
'$type' => 'wall-comment',
@@ -1208,7 +1216,7 @@ function photos_content(&$a) {
$drop = replace_macros(load_view_file('view/wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete')));
- $o .= replace_macros($template,array(
+ $comments .= replace_macros($template,array(
'$id' => $item['item_id'],
'$profile_url' => $profile_link,
'$name' => $profile_name,
@@ -1224,8 +1232,28 @@ function photos_content(&$a) {
}
}
- $o .= paginate($a);
+ $paginate = paginate($a);
}
+
+ $photo_tpl = load_view_file('view/photo_view.tpl');
+ $o .= replace_macros($photo_tpl, array(
+ '$id' => $ph[0]['id'],
+ '$album' => array($album_link,$ph[0]['album']),
+ '$tools' => $tools,
+ '$lock' => $lock,
+ '$photo' => $photo,
+ '$prevlink' => $prevlink,
+ '$nextlink' => $nextlink,
+ '$desc' => $ph[0]['desc'],
+ '$tags' => $tags,
+ '$edit' => $edit,
+ '$likebuttons' => $likebuttons,
+ '$like' => $like,
+ '$dislike' => $dislike,
+ '$comments' => $comments,
+ '$paginate' => $paginate,
+ ));
+
return $o;
}
diff --git a/mod/profile.php b/mod/profile.php
index dfa5649e0..2af6f2429 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -2,6 +2,9 @@
function profile_init(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
+ return;
+
if($a->argc > 1)
$which = $a->argv[1];
else {
@@ -48,6 +51,12 @@ function profile_init(&$a) {
function profile_content(&$a, $update = 0) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return login();
+ }
+
+
+
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
diff --git a/mod/profile_photo.php b/mod/profile_photo.php
index fe4da3baf..e9008ab29 100644
--- a/mod/profile_photo.php
+++ b/mod/profile_photo.php
@@ -134,6 +134,11 @@ function profile_photo_content(&$a) {
return;
}
+ $newuser = false;
+
+ if($a->argc == 2 && $a->argv[1] === 'new')
+ $newuser = true;
+
if( $a->argv[1]=='use'){
if ($a->argc<3){
notice( t('Permission denied.') . EOL );
@@ -188,7 +193,7 @@ function profile_photo_content(&$a) {
'$lbl_upfile' => t('Upload File:'),
'$title' => t('Upload Profile Photo'),
'$submit' => t('Upload'),
- '$select' => sprintf('%s %s', t('or'), '<a href="'. $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '">' . t('select a photo from your photo albums') . '</a>')
+ '$select' => sprintf('%s %s', t('or'), ($newuser) ? '<a href="' . $a->get_baseurl() . '">' . t('skip this step') . '</a>' : '<a href="'. $a->get_baseurl() . '/photos/' . $a->user['nickname'] . '">' . t('select a photo from your photo albums') . '</a>')
));
return $o;
diff --git a/mod/search.php b/mod/search.php
index 793a8c2bb..33032e183 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -9,6 +9,11 @@ function search_post(&$a) {
function search_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
require_once("include/bbcode.php");
require_once('include/security.php');
require_once('include/conversation.php');
diff --git a/mod/settings.php b/mod/settings.php
index 95b622c4e..66b66d22d 100644
--- a/mod/settings.php
+++ b/mod/settings.php
@@ -95,9 +95,9 @@ function settings_post(&$a) {
}
if(strlen($mail_pass)) {
$pass = '';
- openssl(private_encrypt($mail_pass,$pass,$a->user['pubkey']));
+ openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']);
q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d LIMIT 1",
- dbesc(hex2bin($pass)),
+ dbesc(bin2hex($pass)),
intval(local_user())
);
}
diff --git a/mod/viewcontacts.php b/mod/viewcontacts.php
index 063637bf9..c970db33a 100644
--- a/mod/viewcontacts.php
+++ b/mod/viewcontacts.php
@@ -2,13 +2,21 @@
function viewcontacts_init(&$a) {
- profile_load($a,$a->argv[1]);
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
+ profile_load($a,$a->argv[1]);
}
function viewcontacts_content(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ notice( t('Public access denied.') . EOL);
+ return;
+ }
+
if(((! count($a->profile)) || ($a->profile['hide-friends']))) {
notice( t('Permission denied.') . EOL);
return;
diff --git a/update.php b/update.php
index a8140fe91..541d59946 100644
--- a/update.php
+++ b/update.php
@@ -476,3 +476,7 @@ function update_1052() {
}
+function update_1053() {
+ q("ALTER TABLE `item` ADD `extid` CHAR( 255 ) NOT NULL AFTER `parent-uri` , ADD INDEX ( `extid` ) ");
+}
+
diff --git a/util/messages.po b/util/messages.po
index 8c9893b09..d70504f23 100644
--- a/util/messages.po
+++ b/util/messages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 2.1.954\n"
+"Project-Id-Version: 2.1.967\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-20 04:49-0700\n"
+"POT-Creation-Date: 2011-05-02 20:13-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"
@@ -29,20 +29,20 @@ msgstr ""
msgid "Contact update failed."
msgstr ""
-#: ../../mod/crepair.php:54 ../../mod/photos.php:85 ../../mod/photos.php:777
+#: ../../mod/crepair.php:54 ../../mod/photos.php:89 ../../mod/photos.php:787
#: ../../mod/editpost.php:10 ../../mod/install.php:93
#: ../../mod/notifications.php:56 ../../mod/contacts.php:106
#: ../../mod/settings.php:15 ../../mod/settings.php:20
#: ../../mod/settings.php:251 ../../mod/manage.php:75 ../../mod/network.php:6
-#: ../../mod/group.php:19 ../../mod/viewcontacts.php:13
+#: ../../mod/group.php:19 ../../mod/viewcontacts.php:21
#: ../../mod/register.php:25 ../../mod/regmod.php:16 ../../mod/item.php:57
-#: ../../mod/item.php:678 ../../mod/profile_photo.php:19
-#: ../../mod/profile_photo.php:133 ../../mod/profile_photo.php:139
-#: ../../mod/profile_photo.php:150 ../../mod/message.php:8
+#: ../../mod/item.php:680 ../../mod/profile_photo.php:19
+#: ../../mod/profile_photo.php:133 ../../mod/profile_photo.php:144
+#: ../../mod/profile_photo.php:155 ../../mod/message.php:8
#: ../../mod/message.php:116 ../../mod/wall_upload.php:42
-#: ../../mod/follow.php:8 ../../mod/display.php:133 ../../mod/profiles.php:7
+#: ../../mod/follow.php:8 ../../mod/display.php:138 ../../mod/profiles.php:7
#: ../../mod/profiles.php:227 ../../mod/invite.php:13 ../../mod/invite.php:54
-#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:110
+#: ../../mod/dfrn_confirm.php:53 ../../addon/facebook/facebook.php:221
#: ../../wip/photos.php:77 ../../wip/photos.php:723 ../../wip/follow2.php:8
#: ../../wip/group.php:19 ../../wip/photos-chris.php:97
#: ../../wip/photos-chris.php:770 ../../index.php:265
@@ -98,17 +98,17 @@ msgstr ""
msgid "Poll/Feed URL"
msgstr ""
-#: ../../mod/crepair.php:100 ../../mod/photos.php:805 ../../mod/photos.php:862
-#: ../../mod/photos.php:1069 ../../mod/photos.php:1112
+#: ../../mod/crepair.php:100 ../../mod/photos.php:815 ../../mod/photos.php:872
+#: ../../mod/photos.php:1079 ../../mod/photos.php:1122
#: ../../mod/install.php:133 ../../mod/contacts.php:264
#: ../../mod/settings.php:426 ../../mod/manage.php:106 ../../mod/group.php:76
#: ../../mod/group.php:159 ../../mod/profiles.php:370 ../../mod/invite.php:68
-#: ../../addon/facebook/facebook.php:151
+#: ../../addon/facebook/facebook.php:268
#: ../../addon/randplace/randplace.php:179
#: ../../addon/statusnet/statusnet.php:163
#: ../../addon/statusnet/statusnet.php:189
#: ../../addon/statusnet/statusnet.php:207 ../../addon/twitter/twitter.php:156
-#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:383
+#: ../../addon/twitter/twitter.php:175 ../../include/conversation.php:384
#: ../../wip/photos.php:754 ../../wip/photos.php:793 ../../wip/photos.php:954
#: ../../wip/addon/randplace/randplace.php:178 ../../wip/group.php:99
#: ../../wip/group.php:176 ../../wip/photos-chris.php:801
@@ -125,7 +125,7 @@ msgid "Help"
msgstr ""
#: ../../mod/tagrm.php:11 ../../mod/tagrm.php:94
-#: ../../mod/dfrn_request.php:634 ../../addon/js_upload/js_upload.php:41
+#: ../../mod/dfrn_request.php:644 ../../addon/js_upload/js_upload.php:41
msgid "Cancel"
msgstr ""
@@ -145,19 +145,19 @@ msgstr ""
msgid "Remove"
msgstr ""
-#: ../../mod/dfrn_poll.php:79 ../../mod/dfrn_poll.php:504
+#: ../../mod/dfrn_poll.php:84 ../../mod/dfrn_poll.php:510
#, php-format
msgid "%s welcomes %s"
msgstr ""
-#: ../../mod/photos.php:30 ../../wip/photos.php:31
+#: ../../mod/photos.php:34 ../../wip/photos.php:31
#: ../../wip/photos-chris.php:41
msgid "Photo Albums"
msgstr ""
-#: ../../mod/photos.php:34 ../../mod/photos.php:106 ../../mod/photos.php:785
-#: ../../mod/photos.php:854 ../../mod/photos.php:869 ../../mod/photos.php:1238
-#: ../../mod/photos.php:1249 ../../include/Photo.php:225
+#: ../../mod/photos.php:38 ../../mod/photos.php:110 ../../mod/photos.php:795
+#: ../../mod/photos.php:864 ../../mod/photos.php:879 ../../mod/photos.php:1248
+#: ../../mod/photos.php:1259 ../../include/Photo.php:225
#: ../../include/Photo.php:232 ../../include/Photo.php:239
#: ../../include/items.php:1026 ../../include/items.php:1029
#: ../../include/items.php:1032 ../../wip/photos.php:35
@@ -170,17 +170,17 @@ msgstr ""
msgid "Contact Photos"
msgstr ""
-#: ../../mod/photos.php:95 ../../wip/photos.php:87
+#: ../../mod/photos.php:99 ../../wip/photos.php:87
#: ../../wip/photos-chris.php:107
msgid "Contact information unavailable"
msgstr ""
-#: ../../mod/photos.php:106 ../../mod/photos.php:531 ../../mod/photos.php:854
-#: ../../mod/photos.php:869 ../../mod/register.php:288
+#: ../../mod/photos.php:110 ../../mod/photos.php:535 ../../mod/photos.php:864
+#: ../../mod/photos.php:879 ../../mod/register.php:288
#: ../../mod/register.php:295 ../../mod/register.php:302
#: ../../mod/profile_photo.php:58 ../../mod/profile_photo.php:65
-#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:155
-#: ../../mod/profile_photo.php:231 ../../mod/profile_photo.php:240
+#: ../../mod/profile_photo.php:72 ../../mod/profile_photo.php:160
+#: ../../mod/profile_photo.php:236 ../../mod/profile_photo.php:245
#: ../../wip/photos.php:98 ../../wip/photos.php:493 ../../wip/photos.php:785
#: ../../wip/photos.php:800 ../../wip/photos-chris.php:118
#: ../../wip/photos-chris.php:525 ../../wip/photos-chris.php:832
@@ -188,203 +188,208 @@ msgstr ""
msgid "Profile Photos"
msgstr ""
-#: ../../mod/photos.php:116 ../../wip/photos.php:108
+#: ../../mod/photos.php:120 ../../wip/photos.php:108
#: ../../wip/photos-chris.php:128
msgid "Album not found."
msgstr ""
-#: ../../mod/photos.php:134 ../../mod/photos.php:863 ../../wip/photos.php:126
+#: ../../mod/photos.php:138 ../../mod/photos.php:873 ../../wip/photos.php:126
#: ../../wip/photos.php:794 ../../wip/photos-chris.php:146
#: ../../wip/photos-chris.php:841
msgid "Delete Album"
msgstr ""
-#: ../../mod/photos.php:197 ../../mod/photos.php:1070 ../../wip/photos.php:192
+#: ../../mod/photos.php:201 ../../mod/photos.php:1080 ../../wip/photos.php:192
#: ../../wip/photos.php:955 ../../wip/photos-chris.php:212
#: ../../wip/photos-chris.php:1002
msgid "Delete Photo"
msgstr ""
-#: ../../mod/photos.php:469 ../../wip/photos.php:442
+#: ../../mod/photos.php:473 ../../wip/photos.php:442
#: ../../wip/photos-chris.php:462
msgid "was tagged in a"
msgstr ""
-#: ../../mod/photos.php:469 ../../mod/like.php:110
+#: ../../mod/photos.php:473 ../../mod/like.php:110
#: ../../include/conversation.php:20 ../../wip/photos.php:442
#: ../../wip/photos-chris.php:462
msgid "photo"
msgstr ""
-#: ../../mod/photos.php:469 ../../wip/photos.php:442
+#: ../../mod/photos.php:473 ../../wip/photos.php:442
#: ../../wip/photos-chris.php:462
msgid "by"
msgstr ""
-#: ../../mod/photos.php:559 ../../addon/js_upload/js_upload.php:306
+#: ../../mod/photos.php:563 ../../addon/js_upload/js_upload.php:306
#: ../../wip/photos.php:511 ../../wip/photos-chris.php:555
msgid "Image exceeds size limit of "
msgstr ""
-#: ../../mod/photos.php:571 ../../mod/profile_photo.php:118
+#: ../../mod/photos.php:575 ../../mod/profile_photo.php:118
#: ../../mod/wall_upload.php:65 ../../wip/photos.php:520
#: ../../wip/photos-chris.php:567
msgid "Unable to process image."
msgstr ""
-#: ../../mod/photos.php:589 ../../mod/profile_photo.php:236
+#: ../../mod/photos.php:593 ../../mod/profile_photo.php:241
#: ../../mod/wall_upload.php:82 ../../wip/photos.php:537
#: ../../wip/photos-chris.php:585
msgid "Image upload failed."
msgstr ""
-#: ../../mod/photos.php:665 ../../wip/photos.php:611
+#: ../../mod/photos.php:665 ../../mod/dfrn_request.php:591
+#: ../../mod/viewcontacts.php:16 ../../mod/display.php:7
+#: ../../mod/search.php:13 ../../mod/directory.php:18
+msgid "Public access denied."
+msgstr ""
+
+#: ../../mod/photos.php:675 ../../wip/photos.php:611
#: ../../wip/photos-chris.php:658
msgid "No photos selected"
msgstr ""
-#: ../../mod/photos.php:812 ../../wip/photos.php:742
+#: ../../mod/photos.php:822 ../../wip/photos.php:742
#: ../../wip/photos-chris.php:789
msgid "Upload Photos"
msgstr ""
-#: ../../mod/photos.php:815 ../../mod/photos.php:858 ../../wip/photos.php:745
+#: ../../mod/photos.php:825 ../../mod/photos.php:868 ../../wip/photos.php:745
#: ../../wip/photos.php:789 ../../wip/photos-chris.php:792
#: ../../wip/photos-chris.php:836
msgid "New album name: "
msgstr ""
-#: ../../mod/photos.php:816 ../../wip/photos.php:746
+#: ../../mod/photos.php:826 ../../wip/photos.php:746
#: ../../wip/photos-chris.php:793
msgid "or existing album name: "
msgstr ""
-#: ../../mod/photos.php:818 ../../mod/photos.php:1065 ../../wip/photos.php:749
+#: ../../mod/photos.php:828 ../../mod/photos.php:1075 ../../wip/photos.php:749
#: ../../wip/photos-chris.php:796
msgid "Permissions"
msgstr ""
-#: ../../mod/photos.php:873 ../../wip/photos.php:804
+#: ../../mod/photos.php:883 ../../wip/photos.php:804
#: ../../wip/photos-chris.php:851
msgid "Edit Album"
msgstr ""
-#: ../../mod/photos.php:883 ../../mod/photos.php:1267 ../../wip/photos.php:814
+#: ../../mod/photos.php:893 ../../mod/photos.php:1277 ../../wip/photos.php:814
#: ../../wip/photos.php:1141 ../../wip/photos-chris.php:861
#: ../../wip/photos-chris.php:1188
msgid "View Photo"
msgstr ""
-#: ../../mod/photos.php:912 ../../wip/photos.php:843
+#: ../../mod/photos.php:922 ../../wip/photos.php:843
#: ../../wip/photos-chris.php:890
msgid "Photo not available"
msgstr ""
-#: ../../mod/photos.php:959 ../../wip/photos.php:864
+#: ../../mod/photos.php:969 ../../wip/photos.php:864
#: ../../wip/photos-chris.php:911
msgid "Edit photo"
msgstr ""
-#: ../../mod/photos.php:961
+#: ../../mod/photos.php:971
msgid "Use as profile photo"
msgstr ""
-#: ../../mod/photos.php:965 ../../include/conversation.php:316
+#: ../../mod/photos.php:975 ../../include/conversation.php:317
msgid "Private Message"
msgstr ""
-#: ../../mod/photos.php:972
+#: ../../mod/photos.php:982
msgid "<< Prev"
msgstr ""
-#: ../../mod/photos.php:976 ../../wip/photos.php:870
+#: ../../mod/photos.php:986 ../../wip/photos.php:870
#: ../../wip/photos-chris.php:917
msgid "View Full Size"
msgstr ""
-#: ../../mod/photos.php:980
+#: ../../mod/photos.php:990
msgid "Next >>"
msgstr ""
-#: ../../mod/photos.php:1039 ../../wip/photos.php:928
+#: ../../mod/photos.php:1049 ../../wip/photos.php:928
#: ../../wip/photos-chris.php:975
msgid "Tags: "
msgstr ""
-#: ../../mod/photos.php:1049 ../../wip/photos.php:938
+#: ../../mod/photos.php:1059 ../../wip/photos.php:938
#: ../../wip/photos-chris.php:985
msgid "[Remove any tag]"
msgstr ""
-#: ../../mod/photos.php:1058
+#: ../../mod/photos.php:1068
msgid "New album name"
msgstr ""
-#: ../../mod/photos.php:1061 ../../wip/photos.php:948
+#: ../../mod/photos.php:1071 ../../wip/photos.php:948
#: ../../wip/photos-chris.php:995
msgid "Caption"
msgstr ""
-#: ../../mod/photos.php:1063 ../../wip/photos.php:950
+#: ../../mod/photos.php:1073 ../../wip/photos.php:950
#: ../../wip/photos-chris.php:997
msgid "Add a Tag"
msgstr ""
-#: ../../mod/photos.php:1067 ../../wip/photos.php:952
+#: ../../mod/photos.php:1077 ../../wip/photos.php:952
#: ../../wip/photos-chris.php:999
msgid "Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping"
msgstr ""
-#: ../../mod/photos.php:1087 ../../include/conversation.php:364
+#: ../../mod/photos.php:1097 ../../include/conversation.php:365
msgid "I like this (toggle)"
msgstr ""
-#: ../../mod/photos.php:1088 ../../include/conversation.php:365
+#: ../../mod/photos.php:1098 ../../include/conversation.php:366
msgid "I don't like this (toggle)"
msgstr ""
-#: ../../mod/photos.php:1089 ../../mod/network.php:134
-#: ../../mod/profile.php:181 ../../include/conversation.php:366
+#: ../../mod/photos.php:1099 ../../include/conversation.php:367
+#: ../../include/conversation.php:735
msgid "Share"
msgstr ""
-#: ../../mod/photos.php:1090 ../../mod/editpost.php:95
-#: ../../mod/network.php:143 ../../mod/message.php:190
-#: ../../mod/message.php:324 ../../mod/profile.php:190
-#: ../../include/conversation.php:367
+#: ../../mod/photos.php:1100 ../../mod/editpost.php:95
+#: ../../mod/message.php:190 ../../mod/message.php:324
+#: ../../include/conversation.php:368 ../../include/conversation.php:744
msgid "Please wait"
msgstr ""
-#: ../../mod/photos.php:1109 ../../mod/photos.php:1151
-#: ../../mod/photos.php:1180 ../../include/conversation.php:380
+#: ../../mod/photos.php:1119 ../../mod/photos.php:1161
+#: ../../mod/photos.php:1190 ../../include/conversation.php:381
#: ../../wip/photos.php:986 ../../wip/photos.php:1025
#: ../../wip/photos.php:1053 ../../wip/photos-chris.php:1033
#: ../../wip/photos-chris.php:1072 ../../wip/photos-chris.php:1100
msgid "This is you"
msgstr ""
-#: ../../mod/photos.php:1111 ../../include/conversation.php:382
+#: ../../mod/photos.php:1121 ../../include/conversation.php:383
#: ../../boot.php:373
msgid "Comment"
msgstr ""
-#: ../../mod/photos.php:1208 ../../mod/group.php:146
-#: ../../include/conversation.php:182 ../../include/conversation.php:393
+#: ../../mod/photos.php:1218 ../../mod/group.php:146
+#: ../../include/conversation.php:182 ../../include/conversation.php:394
#: ../../wip/group.php:162
msgid "Delete"
msgstr ""
-#: ../../mod/photos.php:1254 ../../wip/photos.php:1127
+#: ../../mod/photos.php:1264 ../../wip/photos.php:1127
#: ../../wip/photos-chris.php:1174
msgid "Recent Photos"
msgstr ""
-#: ../../mod/photos.php:1258 ../../wip/photos.php:1131
+#: ../../mod/photos.php:1268 ../../wip/photos.php:1131
#: ../../wip/photos-chris.php:1178
msgid "Upload New Photos"
msgstr ""
-#: ../../mod/photos.php:1271 ../../wip/photos.php:1147
+#: ../../mod/photos.php:1281 ../../wip/photos.php:1147
#: ../../wip/photos-chris.php:1194
msgid "View Album"
msgstr ""
@@ -397,182 +402,171 @@ msgstr ""
msgid "Edit post"
msgstr ""
-#: ../../mod/editpost.php:74 ../../mod/network.php:122
-#: ../../mod/profile.php:169
+#: ../../mod/editpost.php:74 ../../include/conversation.php:724
msgid "Post to Email"
msgstr ""
#: ../../mod/editpost.php:87 ../../include/group.php:169
-#: ../../include/conversation.php:391
+#: ../../include/conversation.php:392
msgid "Edit"
msgstr ""
-#: ../../mod/editpost.php:88 ../../mod/network.php:135
-#: ../../mod/message.php:188 ../../mod/message.php:322
-#: ../../mod/profile.php:182
+#: ../../mod/editpost.php:88 ../../mod/message.php:188
+#: ../../mod/message.php:322 ../../include/conversation.php:736
msgid "Upload photo"
msgstr ""
-#: ../../mod/editpost.php:89 ../../mod/network.php:136
-#: ../../mod/message.php:189 ../../mod/message.php:323
-#: ../../mod/profile.php:183
+#: ../../mod/editpost.php:89 ../../mod/message.php:189
+#: ../../mod/message.php:323 ../../include/conversation.php:737
msgid "Insert web link"
msgstr ""
-#: ../../mod/editpost.php:90 ../../mod/network.php:137
-#: ../../mod/profile.php:184
+#: ../../mod/editpost.php:90 ../../include/conversation.php:738
msgid "Insert YouTube video"
msgstr ""
-#: ../../mod/editpost.php:91 ../../mod/network.php:138
-#: ../../mod/profile.php:185
+#: ../../mod/editpost.php:91 ../../include/conversation.php:739
msgid "Insert Vorbis [.ogg] video"
msgstr ""
-#: ../../mod/editpost.php:92 ../../mod/network.php:139
-#: ../../mod/profile.php:186
+#: ../../mod/editpost.php:92 ../../include/conversation.php:740
msgid "Insert Vorbis [.ogg] audio"
msgstr ""
-#: ../../mod/editpost.php:93 ../../mod/network.php:140
-#: ../../mod/profile.php:187
+#: ../../mod/editpost.php:93 ../../include/conversation.php:741
msgid "Set your location"
msgstr ""
-#: ../../mod/editpost.php:94 ../../mod/network.php:141
-#: ../../mod/profile.php:188
+#: ../../mod/editpost.php:94 ../../include/conversation.php:742
msgid "Clear browser location"
msgstr ""
-#: ../../mod/editpost.php:96 ../../mod/network.php:144
-#: ../../mod/profile.php:191
+#: ../../mod/editpost.php:96 ../../include/conversation.php:745
msgid "Permission settings"
msgstr ""
-#: ../../mod/editpost.php:102 ../../mod/network.php:150
-#: ../../mod/profile.php:198
+#: ../../mod/editpost.php:102 ../../include/conversation.php:751
msgid "CC: email addresses"
msgstr ""
-#: ../../mod/editpost.php:104 ../../mod/network.php:152
-#: ../../mod/profile.php:200
+#: ../../mod/editpost.php:104 ../../include/conversation.php:753
msgid "Example: bob@example.com, mary@example.com"
msgstr ""
-#: ../../mod/dfrn_request.php:92
+#: ../../mod/dfrn_request.php:96
msgid "This introduction has already been accepted."
msgstr ""
-#: ../../mod/dfrn_request.php:116 ../../mod/dfrn_request.php:347
+#: ../../mod/dfrn_request.php:120 ../../mod/dfrn_request.php:351
msgid "Profile location is not valid or does not contain profile information."
msgstr ""
-#: ../../mod/dfrn_request.php:121 ../../mod/dfrn_request.php:352
+#: ../../mod/dfrn_request.php:125 ../../mod/dfrn_request.php:356
msgid "Warning: profile location has no identifiable owner name."
msgstr ""
-#: ../../mod/dfrn_request.php:123 ../../mod/dfrn_request.php:354
+#: ../../mod/dfrn_request.php:127 ../../mod/dfrn_request.php:358
msgid "Warning: profile location has no profile photo."
msgstr ""
-#: ../../mod/dfrn_request.php:126 ../../mod/dfrn_request.php:357
+#: ../../mod/dfrn_request.php:130 ../../mod/dfrn_request.php:361
#, php-format
msgid "%d required parameter was not found at the given location"
msgid_plural "%d required parameters were not found at the given location"
msgstr[0] ""
msgstr[1] ""
-#: ../../mod/dfrn_request.php:164
+#: ../../mod/dfrn_request.php:168
msgid "Introduction complete."
msgstr ""
-#: ../../mod/dfrn_request.php:188
+#: ../../mod/dfrn_request.php:192
msgid "Unrecoverable protocol error."
msgstr ""
-#: ../../mod/dfrn_request.php:216
+#: ../../mod/dfrn_request.php:220
msgid "Profile unavailable."
msgstr ""
-#: ../../mod/dfrn_request.php:241
+#: ../../mod/dfrn_request.php:245
#, php-format
msgid "%s has received too many connection requests today."
msgstr ""
-#: ../../mod/dfrn_request.php:242
+#: ../../mod/dfrn_request.php:246
msgid "Spam protection measures have been invoked."
msgstr ""
-#: ../../mod/dfrn_request.php:243
+#: ../../mod/dfrn_request.php:247
msgid "Friends are advised to please try again in 24 hours."
msgstr ""
-#: ../../mod/dfrn_request.php:273
+#: ../../mod/dfrn_request.php:277
msgid "Invalid locator"
msgstr ""
-#: ../../mod/dfrn_request.php:292
+#: ../../mod/dfrn_request.php:296
msgid "Unable to resolve your name at the provided location."
msgstr ""
-#: ../../mod/dfrn_request.php:305
+#: ../../mod/dfrn_request.php:309
msgid "You have already introduced yourself here."
msgstr ""
-#: ../../mod/dfrn_request.php:309
+#: ../../mod/dfrn_request.php:313
#, php-format
msgid "Apparently you are already friends with %s."
msgstr ""
-#: ../../mod/dfrn_request.php:330
+#: ../../mod/dfrn_request.php:334
msgid "Invalid profile URL."
msgstr ""
-#: ../../mod/dfrn_request.php:336 ../../mod/follow.php:16
+#: ../../mod/dfrn_request.php:340 ../../mod/follow.php:16
msgid "Disallowed profile URL."
msgstr ""
-#: ../../mod/dfrn_request.php:402 ../../mod/contacts.php:90
+#: ../../mod/dfrn_request.php:406 ../../mod/contacts.php:90
msgid "Failed to update contact record."
msgstr ""
-#: ../../mod/dfrn_request.php:423
+#: ../../mod/dfrn_request.php:427
msgid "Your introduction has been sent."
msgstr ""
-#: ../../mod/dfrn_request.php:477
+#: ../../mod/dfrn_request.php:481
msgid "Please login to confirm introduction."
msgstr ""
-#: ../../mod/dfrn_request.php:491
+#: ../../mod/dfrn_request.php:495
msgid ""
"Incorrect identity currently logged in. Please login to <strong>this</"
"strong> profile."
msgstr ""
-#: ../../mod/dfrn_request.php:503
+#: ../../mod/dfrn_request.php:507
#, php-format
msgid "Welcome home %s."
msgstr ""
-#: ../../mod/dfrn_request.php:504
+#: ../../mod/dfrn_request.php:508
#, php-format
msgid "Please confirm your introduction/connection request to %s."
msgstr ""
-#: ../../mod/dfrn_request.php:505
+#: ../../mod/dfrn_request.php:509
msgid "Confirm"
msgstr ""
-#: ../../mod/dfrn_request.php:538 ../../include/items.php:1409
+#: ../../mod/dfrn_request.php:542 ../../include/items.php:1409
msgid "[Name Withheld]"
msgstr ""
-#: ../../mod/dfrn_request.php:545
+#: ../../mod/dfrn_request.php:549
msgid "Introduction received at "
msgstr ""
-#: ../../mod/dfrn_request.php:547 ../../mod/lostpass.php:40
+#: ../../mod/dfrn_request.php:551 ../../mod/lostpass.php:40
#: ../../mod/lostpass.php:102 ../../mod/register.php:333
#: ../../mod/register.php:373 ../../mod/regmod.php:94 ../../mod/item.php:480
#: ../../mod/item.php:506 ../../mod/dfrn_notify.php:189
@@ -581,67 +575,67 @@ msgstr ""
msgid "Administrator"
msgstr ""
-#: ../../mod/dfrn_request.php:620
+#: ../../mod/dfrn_request.php:630
msgid "Friend/Connection Request"
msgstr ""
-#: ../../mod/dfrn_request.php:621
+#: ../../mod/dfrn_request.php:631
msgid ""
"Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, "
"testuser@identi.ca"
msgstr ""
-#: ../../mod/dfrn_request.php:622
+#: ../../mod/dfrn_request.php:632
msgid "Please answer the following:"
msgstr ""
-#: ../../mod/dfrn_request.php:623
+#: ../../mod/dfrn_request.php:633
msgid "Does $name know you?"
msgstr ""
-#: ../../mod/dfrn_request.php:624 ../../mod/settings.php:350
+#: ../../mod/dfrn_request.php:634 ../../mod/settings.php:350
#: ../../mod/settings.php:362 ../../mod/register.php:444
#: ../../mod/profiles.php:355
msgid "Yes"
msgstr ""
-#: ../../mod/dfrn_request.php:625 ../../mod/settings.php:351
+#: ../../mod/dfrn_request.php:635 ../../mod/settings.php:351
#: ../../mod/settings.php:363 ../../mod/register.php:445
#: ../../mod/profiles.php:356
msgid "No"
msgstr ""
-#: ../../mod/dfrn_request.php:626
+#: ../../mod/dfrn_request.php:636
msgid "Add a personal note:"
msgstr ""
-#: ../../mod/dfrn_request.php:627
+#: ../../mod/dfrn_request.php:637
msgid ""
"Please enter your 'Identity Address' from one of the following supported "
"social networks:"
msgstr ""
-#: ../../mod/dfrn_request.php:628
+#: ../../mod/dfrn_request.php:638
msgid "Friendika"
msgstr ""
-#: ../../mod/dfrn_request.php:629
+#: ../../mod/dfrn_request.php:639
msgid "StatusNet/Federated Social Web"
msgstr ""
-#: ../../mod/dfrn_request.php:630
+#: ../../mod/dfrn_request.php:640
msgid "Private (secure) network"
msgstr ""
-#: ../../mod/dfrn_request.php:631
+#: ../../mod/dfrn_request.php:641
msgid "Public (insecure) network"
msgstr ""
-#: ../../mod/dfrn_request.php:632
+#: ../../mod/dfrn_request.php:642
msgid "Your Identity Address:"
msgstr ""
-#: ../../mod/dfrn_request.php:633
+#: ../../mod/dfrn_request.php:643
msgid "Submit Request"
msgstr ""
@@ -1117,7 +1111,7 @@ msgid "Currently ignored"
msgstr ""
#: ../../mod/contacts.php:322 ../../include/nav.php:110
-#: ../../include/acl_selectors.php:143 ../../include/acl_selectors.php:158
+#: ../../include/acl_selectors.php:141 ../../include/acl_selectors.php:156
msgid "Contacts"
msgstr ""
@@ -1129,19 +1123,19 @@ msgstr ""
msgid "Hide Blocked Connections"
msgstr ""
-#: ../../mod/contacts.php:326 ../../mod/directory.php:38
+#: ../../mod/contacts.php:326 ../../mod/directory.php:44
msgid "Finding: "
msgstr ""
-#: ../../mod/contacts.php:327 ../../mod/directory.php:40
+#: ../../mod/contacts.php:327 ../../mod/directory.php:46
msgid "Find"
msgstr ""
-#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:44
+#: ../../mod/contacts.php:387 ../../mod/viewcontacts.php:52
msgid "Visit $username's profile"
msgstr ""
-#: ../../mod/contacts.php:388 ../../include/conversation.php:603
+#: ../../mod/contacts.php:388 ../../include/conversation.php:604
msgid "Edit contact"
msgstr ""
@@ -1304,7 +1298,7 @@ msgstr ""
msgid "Profile is <strong>not published</strong>."
msgstr ""
-#: ../../mod/settings.php:398 ../../mod/profile_photo.php:191
+#: ../../mod/settings.php:398 ../../mod/profile_photo.php:196
msgid "or"
msgstr ""
@@ -1509,61 +1503,32 @@ msgstr ""
msgid "Private messages to this group are at risk of public disclosure."
msgstr ""
-#: ../../mod/network.php:82 ../../mod/message.php:172
-#: ../../mod/profile.php:131
-msgid "Please enter a link URL:"
-msgstr ""
-
-#: ../../mod/network.php:83 ../../mod/profile.php:132
-msgid "Please enter a YouTube link:"
-msgstr ""
-
-#: ../../mod/network.php:84 ../../mod/profile.php:133
-msgid "Please enter a video(.ogg) link/URL:"
-msgstr ""
-
-#: ../../mod/network.php:85 ../../mod/profile.php:134
-msgid "Please enter an audio(.ogg) link/URL:"
-msgstr ""
-
-#: ../../mod/network.php:86 ../../mod/profile.php:135
-msgid "Where are you right now?"
-msgstr ""
-
-#: ../../mod/network.php:87 ../../mod/profile.php:136
-msgid "Enter a title for this item"
-msgstr ""
-
-#: ../../mod/network.php:142 ../../mod/profile.php:189
-msgid "Set title"
-msgstr ""
-
-#: ../../mod/network.php:196
+#: ../../mod/network.php:126
msgid "No such group"
msgstr ""
-#: ../../mod/network.php:207
+#: ../../mod/network.php:137
msgid "Group is empty"
msgstr ""
-#: ../../mod/network.php:211
+#: ../../mod/network.php:141
msgid "Group: "
msgstr ""
-#: ../../mod/network.php:221
+#: ../../mod/network.php:151
msgid "Contact: "
msgstr ""
-#: ../../mod/network.php:223
+#: ../../mod/network.php:153
msgid "Private messages to this person are at risk of public disclosure."
msgstr ""
-#: ../../mod/network.php:228
+#: ../../mod/network.php:158
msgid "Invalid contact."
msgstr ""
-#: ../../mod/network.php:327 ../../mod/register.php:450
-#: ../../mod/profile.php:322 ../../mod/display.php:142
+#: ../../mod/network.php:257 ../../mod/register.php:450
+#: ../../mod/profile.php:262 ../../mod/display.php:147
msgid ""
"Shared content is covered by the <a href=\"http://creativecommons.org/"
"licenses/by/3.0/\">Creative Commons Attribution 3.0</a> license."
@@ -1632,7 +1597,7 @@ msgstr ""
msgid "Profile Visibility Editor"
msgstr ""
-#: ../../mod/profperm.php:94 ../../mod/profile.php:104
+#: ../../mod/profperm.php:94 ../../mod/profile.php:113
#: ../../include/profile_advanced.php:7
msgid "Profile"
msgstr ""
@@ -1645,11 +1610,11 @@ msgstr ""
msgid "All Contacts (with secure profile access)"
msgstr ""
-#: ../../mod/viewcontacts.php:17 ../../boot.php:1997
+#: ../../mod/viewcontacts.php:25 ../../boot.php:2001
msgid "View Contacts"
msgstr ""
-#: ../../mod/viewcontacts.php:32
+#: ../../mod/viewcontacts.php:40
msgid "No contacts."
msgstr ""
@@ -1781,11 +1746,13 @@ msgstr ""
msgid "Register"
msgstr ""
-#: ../../mod/like.php:110 ../../include/conversation.php:20
+#: ../../mod/like.php:110 ../../addon/facebook/facebook.php:720
+#: ../../include/conversation.php:20
msgid "status"
msgstr ""
-#: ../../mod/like.php:127 ../../include/conversation.php:25
+#: ../../mod/like.php:127 ../../addon/facebook/facebook.php:724
+#: ../../include/conversation.php:25
#, php-format
msgid "%1$s likes %2$s's %3$s"
msgstr ""
@@ -1875,29 +1842,29 @@ msgstr ""
msgid "System error. Post not saved."
msgstr ""
-#: ../../mod/item.php:552
+#: ../../mod/item.php:553
#, php-format
msgid ""
"This message was sent to you by %s, a member of the Friendika social network."
msgstr ""
-#: ../../mod/item.php:554
+#: ../../mod/item.php:555
#, php-format
msgid "You may visit them online at %s"
msgstr ""
-#: ../../mod/item.php:555
+#: ../../mod/item.php:556
msgid ""
"Please contact the sender by replying to this post if you do not wish to "
"receive these messages."
msgstr ""
-#: ../../mod/item.php:557
+#: ../../mod/item.php:558
#, php-format
msgid "%s posted an update."
msgstr ""
-#: ../../mod/item.php:608 ../../mod/display.php:20 ../../mod/display.php:137
+#: ../../mod/item.php:609 ../../mod/display.php:25 ../../mod/display.php:142
msgid "Item not found."
msgstr ""
@@ -1906,7 +1873,7 @@ msgid "Image uploaded but image cropping failed."
msgstr ""
#: ../../mod/profile_photo.php:61 ../../mod/profile_photo.php:68
-#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:243
+#: ../../mod/profile_photo.php:75 ../../mod/profile_photo.php:248
#, php-format
msgid "Image size reduction [%s] failed."
msgstr ""
@@ -1920,35 +1887,39 @@ msgstr ""
msgid "Image exceeds size limit of %d"
msgstr ""
-#: ../../mod/profile_photo.php:188
+#: ../../mod/profile_photo.php:193
msgid "Upload File:"
msgstr ""
-#: ../../mod/profile_photo.php:189
+#: ../../mod/profile_photo.php:194
msgid "Upload Profile Photo"
msgstr ""
-#: ../../mod/profile_photo.php:190
+#: ../../mod/profile_photo.php:195
msgid "Upload"
msgstr ""
-#: ../../mod/profile_photo.php:191
+#: ../../mod/profile_photo.php:196
+msgid "skip this step"
+msgstr ""
+
+#: ../../mod/profile_photo.php:196
msgid "select a photo from your photo albums"
msgstr ""
-#: ../../mod/profile_photo.php:204
+#: ../../mod/profile_photo.php:209
msgid "Crop Image"
msgstr ""
-#: ../../mod/profile_photo.php:205
+#: ../../mod/profile_photo.php:210
msgid "Please adjust the image cropping for optimum viewing."
msgstr ""
-#: ../../mod/profile_photo.php:206
+#: ../../mod/profile_photo.php:211
msgid "Done Editing"
msgstr ""
-#: ../../mod/profile_photo.php:234
+#: ../../mod/profile_photo.php:239
msgid "Image uploaded successfully."
msgstr ""
@@ -2010,6 +1981,10 @@ msgstr ""
msgid "Conversation removed."
msgstr ""
+#: ../../mod/message.php:172 ../../include/conversation.php:691
+msgid "Please enter a link URL:"
+msgstr ""
+
#: ../../mod/message.php:180
msgid "Send Private Message"
msgstr ""
@@ -2050,24 +2025,32 @@ msgstr ""
msgid "Send Reply"
msgstr ""
-#: ../../mod/profile.php:8 ../../boot.php:2198
+#: ../../mod/profile.php:11 ../../boot.php:2203
msgid "No profile"
msgstr ""
-#: ../../mod/profile.php:103
+#: ../../mod/profile.php:112
msgid "Status"
msgstr ""
-#: ../../mod/profile.php:105
+#: ../../mod/profile.php:114
msgid "Photos"
msgstr ""
-#: ../../mod/openid.php:62 ../../mod/openid.php:109 ../../include/auth.php:105
+#: ../../mod/openid.php:62 ../../mod/openid.php:118 ../../include/auth.php:105
#: ../../include/auth.php:130 ../../include/auth.php:183
msgid "Login failed."
msgstr ""
-#: ../../mod/openid.php:73 ../../include/auth.php:194
+#: ../../mod/openid.php:78 ../../include/auth.php:199
+msgid "Welcome "
+msgstr ""
+
+#: ../../mod/openid.php:79 ../../include/auth.php:200
+msgid "Please upload a profile photo."
+msgstr ""
+
+#: ../../mod/openid.php:82 ../../include/auth.php:203
msgid "Welcome back "
msgstr ""
@@ -2089,7 +2072,7 @@ msgstr ""
msgid "following"
msgstr ""
-#: ../../mod/display.php:130
+#: ../../mod/display.php:135
msgid "Item has been removed."
msgstr ""
@@ -2110,11 +2093,11 @@ msgstr ""
msgid "Applications"
msgstr ""
-#: ../../mod/search.php:21 ../../include/nav.php:71 ../../boot.php:2043
+#: ../../mod/search.php:26 ../../include/nav.php:71 ../../boot.php:2047
msgid "Search"
msgstr ""
-#: ../../mod/search.php:64
+#: ../../mod/search.php:69
msgid "No results."
msgstr ""
@@ -2305,7 +2288,7 @@ msgid ""
"be visible to anybody using the internet."
msgstr ""
-#: ../../mod/profiles.php:421 ../../mod/directory.php:91
+#: ../../mod/profiles.php:421 ../../mod/directory.php:97
msgid "Age: "
msgstr ""
@@ -2333,19 +2316,19 @@ msgstr ""
msgid "Edit visibility"
msgstr ""
-#: ../../mod/directory.php:32
+#: ../../mod/directory.php:38
msgid "Global Directory"
msgstr ""
-#: ../../mod/directory.php:39
+#: ../../mod/directory.php:45
msgid "Site Directory"
msgstr ""
-#: ../../mod/directory.php:94
+#: ../../mod/directory.php:100
msgid "Gender: "
msgstr ""
-#: ../../mod/directory.php:120
+#: ../../mod/directory.php:126
msgid "No entries (some entries may be hidden)."
msgstr ""
@@ -2463,46 +2446,60 @@ msgstr ""
msgid "Connection accepted at %s"
msgstr ""
-#: ../../addon/facebook/facebook.php:116
+#: ../../addon/facebook/facebook.php:227
msgid "Facebook disabled"
msgstr ""
-#: ../../addon/facebook/facebook.php:124
+#: ../../addon/facebook/facebook.php:232
+msgid "Updating contacts"
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:241
msgid "Facebook API key is missing."
msgstr ""
-#: ../../addon/facebook/facebook.php:131
+#: ../../addon/facebook/facebook.php:248
msgid "Facebook Connect"
msgstr ""
-#: ../../addon/facebook/facebook.php:137
-msgid "Install Facebook post connector"
+#: ../../addon/facebook/facebook.php:254
+msgid "Install Facebook connector for this account."
msgstr ""
-#: ../../addon/facebook/facebook.php:144
-msgid "Remove Facebook post connector"
+#: ../../addon/facebook/facebook.php:261
+msgid "Remove Facebook connector"
msgstr ""
-#: ../../addon/facebook/facebook.php:150
+#: ../../addon/facebook/facebook.php:267
msgid "Post to Facebook by default"
msgstr ""
-#: ../../addon/facebook/facebook.php:174
+#: ../../addon/facebook/facebook.php:329
msgid "Facebook"
msgstr ""
-#: ../../addon/facebook/facebook.php:175
+#: ../../addon/facebook/facebook.php:330
msgid "Facebook Connector Settings"
msgstr ""
-#: ../../addon/facebook/facebook.php:189
+#: ../../addon/facebook/facebook.php:344
msgid "Post to Facebook"
msgstr ""
-#: ../../addon/facebook/facebook.php:230
+#: ../../addon/facebook/facebook.php:411
+msgid ""
+"Post to Facebook cancelled because of multi-network access permission "
+"conflict."
+msgstr ""
+
+#: ../../addon/facebook/facebook.php:466
msgid "Image: "
msgstr ""
+#: ../../addon/facebook/facebook.php:526
+msgid "View on Friendika"
+msgstr ""
+
#: ../../addon/tictac/tictac.php:14
msgid "Three Dimensional Tic-Tac-Toe"
msgstr ""
@@ -2714,7 +2711,7 @@ msgstr ""
msgid "Send public postings to Twitter"
msgstr ""
-#: ../../include/profile_advanced.php:23 ../../boot.php:2277
+#: ../../include/profile_advanced.php:23 ../../boot.php:2289
msgid "Gender:"
msgstr ""
@@ -2738,7 +2735,7 @@ msgstr ""
msgid "<span class=\"heart\">&hearts;</span> Status:"
msgstr ""
-#: ../../include/profile_advanced.php:103 ../../boot.php:2283
+#: ../../include/profile_advanced.php:103 ../../boot.php:2295
msgid "Homepage:"
msgstr ""
@@ -3058,7 +3055,7 @@ msgstr ""
msgid "Everybody"
msgstr ""
-#: ../../include/nav.php:41 ../../boot.php:850
+#: ../../include/nav.php:41 ../../boot.php:852
msgid "Logout"
msgstr ""
@@ -3162,24 +3159,28 @@ msgstr ""
msgid " ago"
msgstr ""
+#: ../../include/bbcode.php:83
+msgid "Image/photo"
+msgstr ""
+
#: ../../include/dba.php:31
#, php-format
msgid "Cannot locate DNS info for database server '%s'"
msgstr ""
-#: ../../include/acl_selectors.php:135
+#: ../../include/acl_selectors.php:133
msgid "Visible To:"
msgstr ""
-#: ../../include/acl_selectors.php:139 ../../include/acl_selectors.php:154
+#: ../../include/acl_selectors.php:137 ../../include/acl_selectors.php:152
msgid "Groups"
msgstr ""
-#: ../../include/acl_selectors.php:150
+#: ../../include/acl_selectors.php:148
msgid "Except For:"
msgstr ""
-#: ../../include/notifier.php:412
+#: ../../include/notifier.php:414
msgid "(no subject)"
msgstr ""
@@ -3187,8 +3188,8 @@ msgstr ""
msgid "You have a new follower at "
msgstr ""
-#: ../../include/conversation.php:192 ../../include/conversation.php:458
-#: ../../include/conversation.php:459
+#: ../../include/conversation.php:192 ../../include/conversation.php:459
+#: ../../include/conversation.php:460
#, php-format
msgid "View %s's profile"
msgstr ""
@@ -3201,82 +3202,110 @@ msgstr ""
msgid "See more posts like this"
msgstr ""
-#: ../../include/conversation.php:303
+#: ../../include/conversation.php:304
#, php-format
msgid "See all %d comments"
msgstr ""
-#: ../../include/conversation.php:460
+#: ../../include/conversation.php:461
msgid "to"
msgstr ""
-#: ../../include/conversation.php:461
+#: ../../include/conversation.php:462
msgid "Wall-to-Wall"
msgstr ""
-#: ../../include/conversation.php:462
+#: ../../include/conversation.php:463
msgid "via Wall-To-Wall:"
msgstr ""
-#: ../../include/conversation.php:599
+#: ../../include/conversation.php:600
msgid "View status"
msgstr ""
-#: ../../include/conversation.php:600
+#: ../../include/conversation.php:601
msgid "View profile"
msgstr ""
-#: ../../include/conversation.php:601
+#: ../../include/conversation.php:602
msgid "View photos"
msgstr ""
-#: ../../include/conversation.php:602
+#: ../../include/conversation.php:603
msgid "View recent"
msgstr ""
-#: ../../include/conversation.php:604
+#: ../../include/conversation.php:605
msgid "Send PM"
msgstr ""
-#: ../../include/conversation.php:654
+#: ../../include/conversation.php:655
#, php-format
msgid "%s likes this."
msgstr ""
-#: ../../include/conversation.php:654
+#: ../../include/conversation.php:655
#, php-format
msgid "%s doesn't like this."
msgstr ""
-#: ../../include/conversation.php:658
+#: ../../include/conversation.php:659
#, php-format
msgid "<span %1$s>%2$d people</span> like this."
msgstr ""
-#: ../../include/conversation.php:660
+#: ../../include/conversation.php:661
#, php-format
msgid "<span %1$s>%2$d people</span> don't like this."
msgstr ""
-#: ../../include/conversation.php:666
+#: ../../include/conversation.php:667
msgid "and"
msgstr ""
-#: ../../include/conversation.php:669
+#: ../../include/conversation.php:670
#, php-format
msgid ", and %d other people"
msgstr ""
-#: ../../include/conversation.php:670
+#: ../../include/conversation.php:671
#, php-format
msgid "%s like this."
msgstr ""
-#: ../../include/conversation.php:670
+#: ../../include/conversation.php:671
#, php-format
msgid "%s don't like this."
msgstr ""
+#: ../../include/conversation.php:690
+msgid "Visible to <strong>everybody</strong>"
+msgstr ""
+
+#: ../../include/conversation.php:692
+msgid "Please enter a YouTube link:"
+msgstr ""
+
+#: ../../include/conversation.php:693
+msgid "Please enter a video(.ogg) link/URL:"
+msgstr ""
+
+#: ../../include/conversation.php:694
+msgid "Please enter an audio(.ogg) link/URL:"
+msgstr ""
+
+#: ../../include/conversation.php:695
+msgid "Where are you right now?"
+msgstr ""
+
+#: ../../include/conversation.php:696
+msgid "Enter a title for this item"
+msgstr ""
+
+#: ../../include/conversation.php:743
+msgid "Set title"
+msgstr ""
+
#: ../../boot.php:372
msgid "Delete this item?"
msgstr ""
@@ -3305,146 +3334,146 @@ msgstr ""
msgid "Forgot your password?"
msgstr ""
-#: ../../boot.php:1091
+#: ../../boot.php:1093
msgid "prev"
msgstr ""
-#: ../../boot.php:1093
+#: ../../boot.php:1095
msgid "first"
msgstr ""
-#: ../../boot.php:1122
+#: ../../boot.php:1124
msgid "last"
msgstr ""
-#: ../../boot.php:1125
+#: ../../boot.php:1127
msgid "next"
msgstr ""
-#: ../../boot.php:1984
+#: ../../boot.php:1988
msgid "No contacts"
msgstr ""
-#: ../../boot.php:1992
+#: ../../boot.php:1996
#, php-format
msgid "%d Contact"
msgid_plural "%d Contacts"
msgstr[0] ""
msgstr[1] ""
-#: ../../boot.php:2255
+#: ../../boot.php:2262
msgid "Connect"
msgstr ""
-#: ../../boot.php:2265
+#: ../../boot.php:2277
msgid "Location:"
msgstr ""
-#: ../../boot.php:2269
+#: ../../boot.php:2281
msgid ", "
msgstr ""
-#: ../../boot.php:2281
+#: ../../boot.php:2293
msgid "Status:"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Monday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Tuesday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Wednesday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Thursday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Friday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Saturday"
msgstr ""
-#: ../../boot.php:2374
+#: ../../boot.php:2386
msgid "Sunday"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "January"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "February"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "March"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "April"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "May"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "June"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "July"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "August"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "September"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "October"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "November"
msgstr ""
-#: ../../boot.php:2378
+#: ../../boot.php:2390
msgid "December"
msgstr ""
-#: ../../boot.php:2393
+#: ../../boot.php:2405
msgid "g A l F d"
msgstr ""
-#: ../../boot.php:2410
+#: ../../boot.php:2422
msgid "Birthday Reminders"
msgstr ""
-#: ../../boot.php:2411
+#: ../../boot.php:2423
msgid "Birthdays this week:"
msgstr ""
-#: ../../boot.php:2412
+#: ../../boot.php:2424
msgid "(Adjusted for local time)"
msgstr ""
-#: ../../boot.php:2423
+#: ../../boot.php:2435
msgid "[today]"
msgstr ""
-#: ../../boot.php:2624
+#: ../../boot.php:2636
msgid "link to source"
msgstr ""
diff --git a/util/strings.php b/util/strings.php
index cdfd3e6cf..0000e30f6 100644
--- a/util/strings.php
+++ b/util/strings.php
@@ -143,6 +143,7 @@ $a->strings['Remote site reported: '] = 'Remote site reported: ';
$a->strings["Temporary failure. Please wait and try again."] = "Temporary failure. Please wait and try again.";
$a->strings["Introduction failed or was revoked."] = "Introduction failed or was revoked.";
$a->strings['Unable to set contact photo.'] = 'Unable to set contact photo.';
+$a->strings['%1$s is now friends with %2$s'] = '%1$s is now friends with %2$s';
$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.';
$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Empty site URL was provided or URL could not be decrypted by us.';
$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.';
@@ -177,6 +178,7 @@ $a->strings['Please confirm your introduction/connection request to %s.'] = 'Ple
$a->strings['Confirm'] = 'Confirm';
$a->strings['[Name Withheld]'] = '[Name Withheld]';
$a->strings["Introduction received at "] = "Introduction received at ";
+$a->strings['Public access denied.'] = 'Public access denied.';
$a->strings['Friend/Connection Request'] = 'Friend/Connection Request';
$a->strings['Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca'] = 'Examples: jojo@demo.friendika.com, http://demo.friendika.com/profile/jojo, testuser@identi.ca';
$a->strings['Please answer the following:'] = 'Please answer the following:';
@@ -354,13 +356,6 @@ $a->strings['Normal View'] = 'Normal View';
$a->strings['New Item View'] = 'New Item View';
$a->strings['Warning: This group contains %s from an insecure network.'] = 'Warning: This group contains %s from an insecure network.';
$a->strings['Private messages to this group are at risk of public disclosure.'] = 'Private messages to this group are at risk of public disclosure.';
-$a->strings['Please enter a YouTube link:'] = 'Please enter a YouTube link:';
-$a->strings["Please enter a video\x28.ogg\x29 link/URL:"] = "Please enter a video\x28.ogg\x29 link/URL:";
-$a->strings["Please enter an audio\x28.ogg\x29 link/URL:"] = "Please enter an audio\x28.ogg\x29 link/URL:";
-$a->strings['Where are you right now?'] = 'Where are you right now?';
-$a->strings['Enter a title for this item'] = 'Enter a title for this item';
-$a->strings['Share'] = 'Share';
-$a->strings['Set title'] = 'Set title';
$a->strings['No such group'] = 'No such group';
$a->strings['Group is empty'] = 'Group is empty';
$a->strings['Group: '] = 'Group: ';
@@ -393,6 +388,8 @@ $a->strings['Deny'] = 'Deny';
$a->strings['No registrations.'] = 'No registrations.';
$a->strings['Post successful.'] = 'Post successful.';
$a->strings['Login failed.'] = 'Login failed.';
+$a->strings["Welcome "] = "Welcome ";
+$a->strings['Please upload a profile photo.'] = 'Please upload a profile photo.';
$a->strings["Welcome back "] = "Welcome back ";
$a->strings['Photo Albums'] = 'Photo Albums';
$a->strings['Contact Photos'] = 'Contact Photos';
@@ -427,6 +424,7 @@ $a->strings['Add a Tag'] = 'Add a Tag';
$a->strings['Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping'] = 'Example: @bob, @Barbara_Jensen, @jim@example.com, #California, #camping';
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
+$a->strings['Share'] = 'Share';
$a->strings['This is you'] = 'This is you';
$a->strings['Recent Photos'] = 'Recent Photos';
$a->strings['Upload New Photos'] = 'Upload New Photos';
@@ -440,6 +438,7 @@ $a->strings['Upload File:'] = 'Upload File:';
$a->strings['Upload Profile Photo'] = 'Upload Profile Photo';
$a->strings['Upload'] = 'Upload';
$a->strings['or'] = 'or';
+$a->strings['skip this step'] = 'skip this step';
$a->strings['select a photo from your photo albums'] = 'select a photo from your photo albums';
$a->strings['Crop Image'] = 'Crop Image';
$a->strings['Please adjust the image cropping for optimum viewing.'] = 'Please adjust the image cropping for optimum viewing.';
@@ -606,6 +605,7 @@ $a->strings['Visible To:'] = 'Visible To:';
$a->strings['Groups'] = 'Groups';
$a->strings['Except For:'] = 'Except For:';
$a->strings['Logged out.'] = 'Logged out.';
+$a->strings['Image/photo'] = 'Image/photo';
$a->strings['Unknown | Not categorised'] = 'Unknown | Not categorised';
$a->strings['Block immediately'] = 'Block immediately';
$a->strings['Shady, spammer, self-marketer'] = 'Shady, spammer, self-marketer';
@@ -633,6 +633,13 @@ $a->strings['and'] = 'and';
$a->strings[', and %d other people'] = ', and %d other people';
$a->strings['%s like this.'] = '%s like this.';
$a->strings['%s don\'t like this.'] = '%s don\'t like this.';
+$a->strings['Visible to <strong>everybody</strong>'] = 'Visible to <strong>everybody</strong>';
+$a->strings['Please enter a YouTube link:'] = 'Please enter a YouTube link:';
+$a->strings["Please enter a video\x28.ogg\x29 link/URL:"] = "Please enter a video\x28.ogg\x29 link/URL:";
+$a->strings["Please enter an audio\x28.ogg\x29 link/URL:"] = "Please enter an audio\x28.ogg\x29 link/URL:";
+$a->strings['Where are you right now?'] = 'Where are you right now?';
+$a->strings['Enter a title for this item'] = 'Enter a title for this item';
+$a->strings['Set title'] = 'Set title';
$a->strings['Miscellaneous'] = 'Miscellaneous';
$a->strings['less than a second ago'] = 'less than a second ago';
$a->strings['year'] = 'year';
@@ -730,15 +737,18 @@ $a->strings['Complicated'] = 'Complicated';
$a->strings['Don\'t care'] = 'Don\'t care';
$a->strings['Ask me'] = 'Ask me';
$a->strings['Facebook disabled'] = 'Facebook disabled';
+$a->strings['Updating contacts'] = 'Updating contacts';
$a->strings['Facebook API key is missing.'] = 'Facebook API key is missing.';
$a->strings['Facebook Connect'] = 'Facebook Connect';
-$a->strings['Install Facebook post connector'] = 'Install Facebook post connector';
-$a->strings['Remove Facebook post connector'] = 'Remove Facebook post connector';
+$a->strings['Install Facebook connector for this account.'] = 'Install Facebook connector for this account.';
+$a->strings['Remove Facebook connector'] = 'Remove Facebook connector';
$a->strings['Post to Facebook by default'] = 'Post to Facebook by default';
$a->strings['Facebook'] = 'Facebook';
$a->strings['Facebook Connector Settings'] = 'Facebook Connector Settings';
$a->strings['Post to Facebook'] = 'Post to Facebook';
+$a->strings['Post to Facebook cancelled because of multi-network access permission conflict.'] = 'Post to Facebook cancelled because of multi-network access permission conflict.';
$a->strings['Image: '] = 'Image: ';
+$a->strings['View on Friendika'] = 'View on Friendika';
$a->strings['Select files to upload: '] = 'Select files to upload: ';
$a->strings['Use the following controls only if the Java uploader [above] fails to launch.'] = 'Use the following controls only if the Java uploader [above] fails to launch.';
$a->strings['Upload a file'] = 'Upload a file';
diff --git a/view/contact_edit.tpl b/view/contact_edit.tpl
index 039c8d235..97134aedd 100644
--- a/view/contact_edit.tpl
+++ b/view/contact_edit.tpl
@@ -18,13 +18,13 @@
<div id="contact-edit-nav-wrapper" >
<div id="contact-edit-links" >
- <a href="contacts/$contact_id/block" id="contact-edit-block-link" ><img src="images/b_block.gif" alt="$blockunblock" title="$block_text"/></a>
- <a href="contacts/$contact_id/ignore" id="contact-edit-ignore-link" ><img src="images/no.gif" alt="$ignorecont" title="$ignore_text"/></a>
- <a href="crepair/$contact_id" id="contact-edit-repair" ><img src="images/tools.png" alt="$altcrepair" title="$lblcrepair"/></a>
+ <a href="contacts/$contact_id/block" class="icon block" id="contact-edit-block-link" title="$block_text"></a>
+ <a href="contacts/$contact_id/ignore" class="icon no" id="contact-edit-ignore-link" title="$ignore_text"></a>
+ <a href="crepair/$contact_id" class="icon tools" id="contact-edit-repair" title="$lblcrepair"></a>
</div>
<div id="contact-drop-links" >
- <a href="contacts/$contact_id/drop" id="contact-edit-drop-link" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" /></a>
+ <a href="contacts/$contact_id/drop" class="icon drophide" id="contact-edit-drop-link" onclick="return confirmDelete();" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);"></a>
</div>
<div id="contact-edit-nav-end"></div>
diff --git a/view/contact_template.tpl b/view/contact_template.tpl
index 5b99f1be1..e9f616760 100644
--- a/view/contact_template.tpl
+++ b/view/contact_template.tpl
@@ -7,7 +7,7 @@
</div>
<div class="contact-entry-direction-end" ></div>
<div class="contact-entry-edit-links" >
- <a href="contacts/$id" class="contact-entry-edit-link" ><img src="images/b_edit.gif" alt="$edit_hover" title="$edit_hover" /></a>
+ <a class="icon pencil" href="contacts/$id" class="contact-entry-edit-link" title="$edit_hover"></a>
</div>
<div class="contact-entry-edit-end"></div>
</div>
diff --git a/view/de/htconfig.tpl b/view/de/htconfig.tpl
index d3bb6b411..0ce28b4a0 100644
--- a/view/de/htconfig.tpl
+++ b/view/de/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/en/htconfig.tpl b/view/en/htconfig.tpl
index d3bb6b411..0ce28b4a0 100644
--- a/view/en/htconfig.tpl
+++ b/view/en/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/es/htconfig.tpl b/view/es/htconfig.tpl
index 180f7885c..4de266112 100644
--- a/view/es/htconfig.tpl
+++ b/view/es/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/fr/htconfig.tpl b/view/fr/htconfig.tpl
index d31d5a39f..c65114a68 100644
--- a/view/fr/htconfig.tpl
+++ b/view/fr/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/group_drop.tpl b/view/group_drop.tpl
index c87ea459f..bd9852b96 100644
--- a/view/group_drop.tpl
+++ b/view/group_drop.tpl
@@ -1 +1,10 @@
-<div class="group-delete-wrapper" id="group-delete-wrapper-$id" ><a href="group/drop/$id" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" id="group-delete-icon-$id" class="group-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div><div class="group-delete-end"></div>
+<div class="group-delete-wrapper" id="group-delete-wrapper-$id" >
+ <a href="group/drop/$id"
+ onclick="return confirmDelete();"
+ title="$delete"
+ id="group-delete-icon-$id"
+ class="icon drophide group-delete-icon"
+ onmouseover="imgbright(this);"
+ onmouseout="imgdull(this);" ></a>
+</div>
+<div class="group-delete-end"></div>
diff --git a/view/it/htconfig.tpl b/view/it/htconfig.tpl
index 180f7885c..4de266112 100644
--- a/view/it/htconfig.tpl
+++ b/view/it/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/jot-header.tpl b/view/jot-header.tpl
index 94f0f58f8..3b4c8c615 100644
--- a/view/jot-header.tpl
+++ b/view/jot-header.tpl
@@ -3,6 +3,7 @@
<script language="javascript" type="text/javascript">
var editor;
+var textlen = 0;
tinyMCE.init({
theme : "advanced",
@@ -29,23 +30,29 @@ tinyMCE.init({
//Character count
ed.onKeyUp.add(function(ed, e) {
var txt = tinyMCE.activeEditor.getContent();
- var text = txt.length;
- if(txt.length <= 140) {
+ textlen = txt.length;
+ if(textlen != 0 && $('#jot-perms-icon').is('.unlock')) {
+ $('#profile-jot-desc').html(ispublic);
+ }
+ else {
+ $('#profile-jot-desc').html('&nbsp;');
+ }
+ if(textlen <= 140) {
$('#character-counter').removeClass('red');
$('#character-counter').removeClass('orange');
$('#character-counter').addClass('grey');
}
- if((txt.length > 140) && (txt .length <= 420)) {
+ if((textlen > 140) && (textlen <= 420)) {
$('#character-counter').removeClass('grey');
$('#character-counter').removeClass('red');
$('#character-counter').addClass('orange');
}
- if(txt.length > 420) {
+ if(textlen > 420) {
$('#character-counter').removeClass('grey');
$('#character-counter').removeClass('orange');
$('#character-counter').addClass('red');
}
- $('#character-counter').text(text);
+ $('#character-counter').text(textlen);
});
ed.onInit.add(function(ed) {
@@ -58,6 +65,7 @@ tinyMCE.init({
</script>
<script type="text/javascript" src="include/ajaxupload.js" ></script>
<script>
+ var ispublic = '$ispublic';
$(document).ready(function() {
var uploader = new window.AjaxUpload(
'wall-image-upload',
@@ -74,11 +82,11 @@ tinyMCE.init({
var selstr;
$('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
selstr = $(this).text();
- $('#profile-jot-perms img').attr('src', 'images/lock_icon.gif');
+ $('#jot-perms-icon').removeClass('unlock').addClass('lock');
$('.profile-jot-net input').attr('disabled', 'disabled');
});
if(selstr == null) {
- $('#profile-jot-perms img').attr('src', 'images/unlock_icon.gif');
+ $('#jot-perms-icon').removeClass('lock').addClass('unlock');
$('.profile-jot-net input').attr('disabled', false);
}
diff --git a/view/jot.tpl b/view/jot.tpl
index f5010301f..31f2eff04 100644
--- a/view/jot.tpl
+++ b/view/jot.tpl
@@ -21,28 +21,28 @@
<div id="profile-jot-submit-wrapper" >
<input type="submit" id="profile-jot-submit" name="submit" value="$share" />
<div id="profile-upload-wrapper" style="display: $visitor;" >
- <div id="wall-image-upload-div" ><img id="wall-image-upload" src="images/camera-icon.gif" alt="$upload" title="$upload" /></div>
+ <div id="wall-image-upload-div" ><a href="#" onclick="return false;" id="wall-image-upload" class="icon camera" title="$upload"></a></div>
</div>
<div id="profile-link-wrapper" style="display: $visitor;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >
- <img id="profile-link" src="images/link-icon.gif" alt="$weblink" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink();" />
+ <a id="profile-link" class="icon link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a>
</div>
<div id="profile-youtube-wrapper" style="display: $visitor;" >
- <img id="profile-youtube" src="images/youtube_icon.gif" alt="$youtube" title="$youtube" onclick="jotGetVideo();" />
+ <a id="profile-youtube" class="icon youtube" title="$youtube" onclick="jotGetVideo();return false;"></a>
</div>
<div id="profile-video-wrapper" style="display: $visitor;" >
- <img id="profile-video" src="images/video.gif" alt="$video" title="$video" onclick="jotVideoURL();" />
+ <a id="profile-video" class="icon video" title="$video" onclick="jotVideoURL();return false;"></a>
</div>
<div id="profile-audio-wrapper" style="display: $visitor;" >
- <img id="profile-audio" src="images/audio.gif" alt="$audio" title="$audio" onclick="jotAudioURL();" />
+ <a id="profile-audio" class="icon audio" title="$audio" onclick="jotAudioURL();return false;"></a>
</div>
<div id="profile-location-wrapper" style="display: $visitor;" >
- <img id="profile-location" src="images/globe.gif" alt="$setloc" title="$setloc" onclick="jotGetLocation();" />
+ <a id="profile-location" class="icon globe" title="$setloc" onclick="jotGetLocation();return false;"></a>
</div>
<div id="profile-nolocation-wrapper" style="display: none;" >
- <img id="profile-nolocation" src="images/noglobe.gif" alt="$noloc" title="$noloc" onclick="jotClearLocation();" />
+ <a id="profile-nolocation" class="icon noglobe" title="$noloc" onclick="jotClearLocation();return false;"></a>
</div>
<div id="profile-title-wrapper" style="display: $visitor;" >
- <img id="profile-title" src="images/article.gif" alt="$title" title="$title" onclick="jotTitle();" />
+ <a id="profile-title" class="icon article" title="$title" onclick="jotTitle();return false;"></a>
</div>
<div id="profile-jot-plugin-wrapper">
@@ -52,14 +52,16 @@
<div id="profile-rotator-wrapper" style="display: $visitor;" >
<img id="profile-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>
- <div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif" alt="$permset" title="$permset" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');" />$bang</div>
+ <div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" >
+ <a id="jot-perms-icon" class="icon $lockstate" title="$permset" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');return false;"></a>$bang
+ </div>
<div id="profile-jot-perms-end"></div>
<div id="profile-jot-email-wrapper" style="display: none;" >
- <div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
- <div id="profile-jot-email-end"></div>
+ <div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
+ <div id="profile-jot-email-end"></div>
</div>
<div id="profile-jot-networks" style="display: none;" >
- $jotnets
+ $jotnets
</div>
<div id="profile-jot-networks-end"></div>
<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
diff --git a/view/like.tpl b/view/like.tpl
index 0a1c6bfe8..ce5af04ce 100644
--- a/view/like.tpl
+++ b/view/like.tpl
@@ -1,6 +1,6 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
- <img src="images/like.gif" alt="$likethis" title="$likethis" onclick="dolike($id,'like');" />
- <img src="images/dislike.gif" alt="$nolike" title="$nolike" onclick="dolike($id,'dislike');" />
- <img src="images/recycle.gif" alt="$share" title="$share" class="wall-item-share-buttons" onclick="jotShare($id);" />
+ <a href="#" class="icon like"title="$likethis" onclick="dolike($id,'like'); return false"></a>
+ <a href="#" class="icon dislike" title="$nolike" onclick="dolike($id,'dislike'); return false"></a>
+ <a href="#" class="icon recycle wall-item-share-buttons" title="$share"onclick="jotShare($id); return false"></a>
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>
diff --git a/view/like_noshare.tpl b/view/like_noshare.tpl
index e36a624a4..2c467c3c2 100644
--- a/view/like_noshare.tpl
+++ b/view/like_noshare.tpl
@@ -1,5 +1,5 @@
<div class="wall-item-like-buttons" id="wall-item-like-buttons-$id">
- <img src="images/like.gif" alt="$likethis" title="$likethis" onclick="dolike($id,'like');" />
- <img src="images/dislike.gif" alt="$nolike" title="$nolike" onclick="dolike($id,'dislike');" />
+ <a href="#" class="icon like"title="$likethis" onclick="dolike($id,'like'); return false"></a>
+ <a href="#" class="icon dislike" title="$nolike" onclick="dolike($id,'dislike'); return false"></a>
<img id="like-rotator-$id" class="like-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
</div>
diff --git a/view/mail_list.tpl b/view/mail_list.tpl
index 1ef714f7a..8c8e78276 100644
--- a/view/mail_list.tpl
+++ b/view/mail_list.tpl
@@ -8,6 +8,9 @@
<div class="mail-list-subject"><a href="message/$id" class="mail-list-link">$subject</a></div>
</div>
</div>
-<div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-$id" ><a href="message/dropconv/$id" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" id="mail-list-delete-icon-$id" class="mail-list-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div><div class="mail-list-delete-end"></div>
+<div class="mail-list-delete-wrapper" id="mail-list-delete-wrapper-$id" >
+ <a href="message/dropconv/$id" onclick="return confirmDelete();" title="$delete" class="icon drophide mail-list-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
+</div>
+<div class="mail-list-delete-end"></div>
<div class="mail-list-outside-wrapper-end"></div>
diff --git a/view/photo_view.tpl b/view/photo_view.tpl
new file mode 100644
index 000000000..6287b0898
--- /dev/null
+++ b/view/photo_view.tpl
@@ -0,0 +1,37 @@
+<div id="live-display"></div>
+<h3><a href="$album.0">$album.1</a></h3>
+
+<div id="photo-edit-link-wrap">
+{{ if $tools }}
+<a id="photo-edit-link" href="$tools.edit.0">$tools.edit.1</a>
+-
+<a id="photo-toprofile-link" href="$tools.profile.0">$tools.profile.1</a>
+{{ endif }}
+{{ if $lock }} - <img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,'photo$id');" /> {{ endif }}
+</div>
+
+{{ if $prevlink }}<div id="photo-prev-link"><a href="$prevlink.0">$prevlink.1</a></div>{{ endif }}
+<div id="photo-photo"><a href="$photo.href" title="$photo.title"><img src="$photo.src" /></a></div>
+{{ if $nextlink }}<div id="photo-next-link"><a href="$nextlink.0">$nextlink.1</a></div>{{ endif }}
+<div id="photo-photo-end"></div>
+<div id="photo-caption" >$desc</div>
+{{ if $tags }}
+<div id="in-this-photo-text">$tags.0</div>
+<div id="in-this-photo">$tags.1</div>
+{{ endif }}
+{{ if $tags.2 }}<div id="tag-remove"><a href="$tags.2">$tags.3</a></div>{{ endif }}
+
+{{ if $edit }}$edit{{ endif }}
+
+{{ if $likebuttons }}
+<div id="photo-like-div">
+ $likebuttons
+ $like
+ $dislike
+</div>
+{{ endif }}
+
+$comments
+
+$paginate
+
diff --git a/view/prv_message.tpl b/view/prv_message.tpl
index cf6ff50ee..7c3894145 100644
--- a/view/prv_message.tpl
+++ b/view/prv_message.tpl
@@ -17,12 +17,12 @@ $select
</div>
<div id="prvmail-submit-wrapper" >
-<input type="submit" id="prvmail-submit" name="submit" value="Submit" />
+ <input type="submit" id="prvmail-submit" name="submit" value="Submit" />
<div id="prvmail-upload-wrapper" >
- <div id="prvmail-upload-div" ><img id="prvmail-upload" src="images/camera-icon.gif" alt="$upload" title="$upload" /></div>
+ <div id="prvmail-upload"class="icon border camera" title="$upload" /></div>
</div>
<div id="prvmail-link-wrapper" >
- <img id="prvmail-link" src="images/link-icon.gif" alt="$insert" title="$insert" onclick="jotGetLink();" />
+ <div id="prvmail-link" class="icon border link" title="$insert" onclick="jotGetLink();" ></div>
</div>
<div id="prvmail-rotator-wrapper" >
<img id="prvmail-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" />
diff --git a/view/register.tpl b/view/register.tpl
index 131460828..ac8388de4 100644
--- a/view/register.tpl
+++ b/view/register.tpl
@@ -1,6 +1,6 @@
<h3>$regtitle</h3>
-<form action="register" method="post" >
+<form action="register" method="post" id="register-form">
<input type="hidden" name="photo" value="$photo" />
diff --git a/view/sv/htconfig.tpl b/view/sv/htconfig.tpl
index d3bb6b411..0ce28b4a0 100644
--- a/view/sv/htconfig.tpl
+++ b/view/sv/htconfig.tpl
@@ -37,7 +37,7 @@ $a->config['admin_email'] = '';
// Maximum size of an imported message, 0 is unlimited
-$a->config['max_import_size'] = 10000;
+$a->config['max_import_size'] = 200000;
// maximum size of uploaded photos
diff --git a/view/theme/dispy/connect.png b/view/theme/dispy/connect.png
new file mode 100644
index 000000000..b76fc13dc
--- /dev/null
+++ b/view/theme/dispy/connect.png
Binary files differ
diff --git a/view/theme/dispy/icons.png b/view/theme/dispy/icons.png
new file mode 100644
index 000000000..43228bb9d
--- /dev/null
+++ b/view/theme/dispy/icons.png
Binary files differ
diff --git a/view/theme/dispy/jot-header.tpl b/view/theme/dispy/jot-header.tpl
new file mode 100644
index 000000000..4661161b3
--- /dev/null
+++ b/view/theme/dispy/jot-header.tpl
@@ -0,0 +1,175 @@
+
+<script language="javascript" type="text/javascript" src="$baseurl/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
+<script language="javascript" type="text/javascript">
+
+var editor;
+
+tinyMCE.init({
+ theme : "advanced",
+ mode : "specific_textareas",
+ editor_selector: /(profile-jot-text|prvmail-text)/,
+ plugins : "bbcode,paste",
+ theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "center",
+ theme_advanced_blockformats : "blockquote,code",
+ //theme_advanced_resizing : true,
+ //theme_advanced_statusbar_location : "bottom",
+ paste_text_sticky : true,
+ entity_encoding : "raw",
+ add_unload_trigger : false,
+ remove_linebreaks : false,
+ force_p_newlines : false,
+ force_br_newlines : true,
+ forced_root_block : '',
+ convert_urls: false,
+ content_css: "$baseurl/view/custom_tinymce.css",
+ theme_advanced_path : false,
+ setup : function(ed) {
+ //Character count
+ ed.onKeyUp.add(function(ed, e) {
+ var txt = tinyMCE.activeEditor.getContent();
+ var text = txt.length;
+ if(txt.length <= 140) {
+ $('#character-counter').removeClass('red');
+ $('#character-counter').removeClass('orange');
+ $('#character-counter').addClass('grey');
+ }
+ if((txt.length > 140) && (txt .length <= 420)) {
+ $('#character-counter').removeClass('grey');
+ $('#character-counter').removeClass('red');
+ $('#character-counter').addClass('orange');
+ }
+ if(txt.length > 420) {
+ $('#character-counter').removeClass('grey');
+ $('#character-counter').removeClass('orange');
+ $('#character-counter').addClass('red');
+ }
+ $('#character-counter').text(text);
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ });
+
+ }
+});
+
+</script>
+<script type="text/javascript" src="include/ajaxupload.js" ></script>
+<script>
+ $(document).ready(function() {
+ var uploader = new window.AjaxUpload(
+ 'wall-image-upload',
+ { action: 'wall_upload/$nickname',
+ name: 'userfile',
+ onSubmit: function(file,ext) { $('#profile-rotator').show(); },
+ onComplete: function(file,response) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,response);
+ $('#profile-rotator').hide();
+ }
+ }
+ );
+ $('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
+ var selstr;
+ $('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
+ selstr = $(this).text();
+ $('#jot-perms-icon').removeClass('unlock').addClass('lock');
+ $('.profile-jot-net input').attr('disabled', 'disabled');
+ });
+ if(selstr == null) {
+ $('#jot-perms-icon').removeClass('lock').addClass('unlock');
+ $('.profile-jot-net input').attr('disabled', false);
+ }
+
+ }).trigger('change');
+
+ });
+
+ function jotGetLink() {
+ reply = prompt("$linkurl");
+ if(reply && reply.length) {
+ reply = bin2hex(reply);
+ $('#profile-rotator').show();
+ $.get('parse_url?url=' + reply, function(data) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,data);
+ $('#profile-rotator').hide();
+ });
+ }
+ }
+
+ function jotGetVideo() {
+ reply = prompt("$utubeurl");
+ if(reply && reply.length) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,'[youtube]' + reply + '[/youtube]');
+ }
+ }
+
+ function jotVideoURL() {
+ reply = prompt("$vidurl");
+ if(reply && reply.length) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,'[video]' + reply + '[/video]');
+ }
+ }
+
+ function jotAudioURL() {
+ reply = prompt("$audurl");
+ if(reply && reply.length) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,'[audio]' + reply + '[/audio]');
+ }
+ }
+
+
+ function jotGetLocation() {
+ reply = prompt("$whereareu", $('#jot-location').val());
+ if(reply && reply.length) {
+ $('#jot-location').val(reply);
+ }
+ }
+
+ function jotTitle() {
+ reply = prompt("$title", $('#jot-title').val());
+ if(reply && reply.length) {
+ $('#jot-title').val(reply);
+ }
+ }
+
+ function jotShare(id) {
+ $('#like-rotator-' + id).show();
+ $.get('share/' + id, function(data) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,data);
+ $('#like-rotator-' + id).hide();
+ $(window).scrollTop(0);
+ });
+ }
+
+ function linkdropper(event) {
+ var linkFound = event.dataTransfer.types.contains("text/uri-list");
+ if(linkFound)
+ event.preventDefault();
+ }
+
+ function linkdrop(event) {
+ var reply = event.dataTransfer.getData("text/uri-list");
+ event.target.textContent = reply;
+ event.preventDefault();
+ if(reply && reply.length) {
+ $('#profile-rotator').show();
+ $.get('parse_url?url=' + reply, function(data) {
+ tinyMCE.execCommand('mceInsertRawHTML',false,data);
+ $('#profile-rotator').hide();
+ });
+ }
+ }
+
+ function jotClearLocation() {
+ $('#jot-coord').val('');
+ $('#profile-nolocation-wrapper').hide();
+ }
+
+ $geotag
+
+</script>
+
diff --git a/view/theme/dispy/jot.tpl b/view/theme/dispy/jot.tpl
new file mode 100644
index 000000000..ab121db31
--- /dev/null
+++ b/view/theme/dispy/jot.tpl
@@ -0,0 +1,72 @@
+
+<div id="profile-jot-wrapper" >
+ <div id="profile-jot-banner-wrapper">
+ <div id="profile-jot-desc" >&nbsp;</div>
+ <div id="character-counter" class="grey">0</div>
+ <div id="profile-rotator-wrapper" style="display: $visitor;" >
+ <img id="profile-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display:none;" />
+ </div>
+ </div>
+
+ <form id="profile-jot-form" action="$action" method="post" >
+ <input type="hidden" name="type" value="wall" />
+ <input type="hidden" name="profile_uid" value="$profile_uid" />
+ <input type="hidden" name="return" value="$return_path" />
+ <input type="hidden" name="location" id="jot-location" value="$defloc" />
+ <input type="hidden" name="coord" id="jot-coord" value="" />
+ <input type="hidden" name="title" id="jot-title" value="" />
+ <input type="hidden" name="post_id" value="$post_id" />
+
+ <textarea rows="5" style="width:100%" class="profile-jot-text" id="profile-jot-text" name="body" >$content</textarea>
+
+
+<div id="profile-jot-submit-wrapper" >
+ <div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><a id="jot-perms-icon" class="icon $lockstate" title="$permset" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');return false;"></a>$bang</div>
+ <input type="submit" id="profile-jot-submit" name="submit" value="$share" />
+</div>
+
+ <div id="profile-upload-wrapper" class="jot-tool" style="display: $visitor;" >
+ <div id="wall-image-upload-div" ><a onclick="return false;" id="wall-image-upload" class="icon border camera" title="$upload"></a></div>
+ </div>
+ <div id="profile-link-wrapper" class="jot-tool" style="display: $visitor;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >
+ <a id="profile-link" class="icon border link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a>
+ </div>
+ <div id="profile-youtube-wrapper" class="jot-tool" style="display: $visitor;" >
+ <a id="profile-youtube" class="icon border youtube" title="$youtube" onclick="jotGetVideo(); return false;"></a>
+ </div>
+ <div id="profile-video-wrapper" class="jot-tool" style="display: $visitor;" >
+ <a id="profile-video" class="icon border video" title="$video" onclick="jotVideoURL(); return false;"></a>
+ </div>
+ <div id="profile-audio-wrapper" class="jot-tool" style="display: $visitor;" >
+ <a id="profile-audio" class="icon border audio" title="$audio" onclick="jotAudioURL(); return false;"></a>
+ </div>
+ <div id="profile-location-wrapper" class="jot-tool" style="display: $visitor;" >
+ <a id="profile-location" class="icon border globe" title="$setloc" onclick="jotGetLocation(); return false;"></a>
+ </div>
+ <div id="profile-nolocation-wrapper" class="jot-tool" style="display: none;" >
+ <a id="profile-nolocation" class="icon border noglobe" title="$noloc" onclick="jotClearLocation(); return false;"></a>
+ </div>
+ <div id="profile-title-wrapper" class="jot-tool" style="display: $visitor;" >
+ <a id="profile-title" class="icon border article" title="$title" onclick="jotTitle(); return false;"></a>
+ </div>
+
+ <div id="profile-jot-plugin-wrapper">
+ $jotplugins
+ </div>
+
+ <div id="profile-jot-tools-end"></div>
+
+ <div id="profile-jot-email-wrapper" style="display: none;" >
+ <div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
+ <div id="profile-jot-email-end"></div>
+ </div>
+ <div id="profile-jot-networks" style="display: none;" >
+ $jotnets
+ </div>
+ <div id="profile-jot-networks-end"></div>
+ <div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
+
+
+<div id="profile-jot-end"></div>
+</form>
+</div>
diff --git a/view/theme/dispy/mail_head.tpl b/view/theme/dispy/mail_head.tpl
new file mode 100644
index 000000000..89615cbd0
--- /dev/null
+++ b/view/theme/dispy/mail_head.tpl
@@ -0,0 +1,7 @@
+<h3>$messages</h3>
+
+<ul class="tabs-wrapper">
+<li><a href="message" class="tabs">$inbox</a></li>
+<li><a href="message/sent" class="tabs">$outbox</a></li>
+<li><a href="message/new" class="tabs">$new</a></li>
+</ul>
diff --git a/view/theme/dispy/menu-user-pin.jpg b/view/theme/dispy/menu-user-pin.jpg
new file mode 100644
index 000000000..26449569f
--- /dev/null
+++ b/view/theme/dispy/menu-user-pin.jpg
Binary files differ
diff --git a/view/theme/dispy/nav.tpl b/view/theme/dispy/nav.tpl
new file mode 100644
index 000000000..3938777e9
--- /dev/null
+++ b/view/theme/dispy/nav.tpl
@@ -0,0 +1,51 @@
+$langselector
+
+<span id="banner">$banner</span>
+
+{{ if $nav.login }}<a id="nav-login-link" class="nav-link $nav.login.2" href="$nav.login.0" title="$nav.login.1">$nav.login.1</a> {{ endif }}
+<a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.1">$nav.search.1</a>
+<a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.1">$nav.directory.1</a>
+
+<div id="user-menu" >
+ <a id="user-menu-label" onclick="openClose('user-menu-popup'); return false" href="$nav.home.0">$sitelocation</a>
+
+ <ul id="user-menu-popup"
+ onmouseover="if (typeof tmenu != 'undefined') clearTimeout(tmenu); openMenu('user-menu-popup')"
+ onmouseout="tmenu=setTimeout('closeMenu(\'user-menu-popup\');',200)">
+
+
+ {{ if $nav.register }}<li><a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0" title="$nav.register.1">$nav.register.1</a></li>{{ endif }}
+
+ {{ if $nav.home }}<li><a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0">$nav.home.1</a></li>{{ endif }}
+
+ {{ if $nav.network }}<li><a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0">$nav.network.1</a></li>{{ endif }}
+
+
+ {{ if $nav.notifications }}<li><a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0">$nav.notifications.1</a></li>{{ endif }}
+ {{ if $nav.messages }}<li><a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0">$nav.messages.1</a></li>{{ endif }}
+ {{ if $nav.contacts }}<li><a id="nav-contacts-link" class="nav-commlink $nav.contacts.2" href="$nav.contacts.0">$nav.contacts.1</a></li>{{ endif }}
+
+ {{ if $nav.profiles }}<li><a id="nav-profiles-link" class="nav-commlink nav-sep $nav.profiles.2" href="$nav.profiles.0">$nav.profiles.1</a></li>{{ endif }}
+ {{ if $nav.settings }}<li><a id="nav-settings-link" class="nav-commlink $nav.settings.2" href="$nav.settings.0">$nav.settings.1</a></li>{{ endif }}
+
+ {{ if $nav.manage }}<li><a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0">$nav.manage.1</a></li>{{ endif }}
+
+
+
+ {{ if $nav.logout }}<li><a id="nav-logout-link" class="nav-commlink nav-sep $nav.logout.2" href="$nav.logout.0">$nav.logout.1</a></li> {{ endif }}
+ </ul>
+
+ <div id="notifications">
+ {{ if $nav.network }}<a id="net-update" class="nav-ajax-update" href="$nav.network.0" title="$nav.network.1"></a>{{ endif }}
+ {{ if $nav.home }}<a id="home-update" class="nav-ajax-update" href="$nav.home.0" title="$nav.home.1"></a>{{ endif }}
+ {{ if $nav.notifications }}<a id="notify-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }}
+ {{ if $nav.messages }}<a id="mail-update" class="nav-ajax-update" href="$nav.messages.0" title="$nav.messages.1"></a>{{ endif }}
+ </div>
+
+</div>
+
+
+{{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.1">$nav.apps.1</a>{{ endif }}
+
+
+
diff --git a/view/theme/dispy/next.png b/view/theme/dispy/next.png
new file mode 100644
index 000000000..353e2e72a
--- /dev/null
+++ b/view/theme/dispy/next.png
Binary files differ
diff --git a/view/theme/dispy/notifications.png b/view/theme/dispy/notifications.png
new file mode 100644
index 000000000..f0f6a90e8
--- /dev/null
+++ b/view/theme/dispy/notifications.png
Binary files differ
diff --git a/view/theme/dispy/photo_view.tpl b/view/theme/dispy/photo_view.tpl
new file mode 100644
index 000000000..4582751c6
--- /dev/null
+++ b/view/theme/dispy/photo_view.tpl
@@ -0,0 +1,40 @@
+<div id="live-display"></div>
+<h3><a href="$album.0">$album.1</a></h3>
+
+<div id="photo-edit-link-wrap">
+{{ if $tools }}
+<a id="photo-edit-link" href="$tools.edit.0">$tools.edit.1</a>
+-
+<a id="photo-toprofile-link" href="$tools.profile.0">$tools.profile.1</a>
+{{ endif }}
+{{ if $lock }} - <img src="images/lock_icon.gif" class="lockview" alt="$lock" onclick="lockview(event,'photo$id');" /> {{ endif }}
+</div>
+
+<div id="photo-photo">
+ {{ if $prevlink }}<div id="photo-prev-link"><a href="$prevlink.0">$prevlink.1</a></div>{{ endif }}
+ <a href="$photo.href" title="$photo.title"><img src="$photo.src" /></a>
+ {{ if $nextlink }}<div id="photo-next-link"><a href="$nextlink.0">$nextlink.1</a></div>{{ endif }}
+</div>
+
+<div id="photo-photo-end"></div>
+<div id="photo-caption" >$desc</div>
+{{ if $tags }}
+<div id="in-this-photo-text">$tags.0</div>
+<div id="in-this-photo">$tags.1</div>
+{{ endif }}
+{{ if $tags.2 }}<div id="tag-remove"><a href="$tags.2">$tags.3</a></div>{{ endif }}
+
+{{ if $edit }}$edit{{ endif }}
+
+{{ if $likebuttons }}
+<div id="photo-like-div">
+ $likebuttons
+ $like
+ $dislike
+</div>
+{{ endif }}
+
+$comments
+
+$paginate
+
diff --git a/view/theme/dispy/prev.png b/view/theme/dispy/prev.png
new file mode 100644
index 000000000..0ae6022af
--- /dev/null
+++ b/view/theme/dispy/prev.png
Binary files differ
diff --git a/view/theme/dispy/profile_tabs.tpl b/view/theme/dispy/profile_tabs.tpl
new file mode 100644
index 000000000..63b6d48dd
--- /dev/null
+++ b/view/theme/dispy/profile_tabs.tpl
@@ -0,0 +1,7 @@
+
+<div class="tabs-wrapper" >
+ <a href="$url" id="profile-tab-status-link" class="tabs" >$status</a>
+ <a href="$url?tab=profile" id="profile-tab-profile-link" class="tabs" >$profile</a>
+ <a href="$phototab" id="profile-tab-photos-link" class="tabs" >$photos</a>
+<div class="tabs-end"></div>
+</div> \ No newline at end of file
diff --git a/view/theme/dispy/search_item.tpl b/view/theme/dispy/search_item.tpl
new file mode 100644
index 000000000..41cc95e65
--- /dev/null
+++ b/view/theme/dispy/search_item.tpl
@@ -0,0 +1,40 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+ <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+ <div class="wall-item-info" id="wall-item-info-$id">
+ <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id"
+ onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+ onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+ <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+ <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" height="80" width="80" alt="$name" /></a>
+ <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+ <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+ <ul>
+ $item_photo_menu
+ </ul>
+ </div>
+ </div>
+ <div class="wall-item-photo-end"></div>
+ <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>
+ </div>
+ <div class="wall-item-lock-wrapper">$lock</div>
+ <div class="wall-item-tools" id="wall-item-tools-$id">
+ $drop
+ </div>
+ <div class="wall-item-content" id="wall-item-content-$id" >
+ <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+ <div class="wall-item-title-end"></div>
+ <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+ </div>
+ <div class="wall-item-author">
+ <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+ <div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
+
+ </div>
+
+ </div>
+ <div class="wall-item-wrapper-end"></div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+ <div class="wall-item-conv" id="wall-item-conv-$id" >$conv</div>
+
diff --git a/view/theme/dispy/settings.tpl b/view/theme/dispy/settings.tpl
new file mode 100644
index 000000000..953e5c3f2
--- /dev/null
+++ b/view/theme/dispy/settings.tpl
@@ -0,0 +1,212 @@
+<div class="tabs-wrapper">
+ <a class="tabs" id="profile-settings-link"><a href="settings">$ptitle</a>
+ <a class="tabs" id="plugin-settings-link"><a href="settings/addon">$lbl_plug</a>
+<div class="tabs-end"></div>
+</div>
+
+<h1>$ptitle</h1>
+
+
+$uexport
+
+$nickname_block
+
+
+<form action="settings" id="settings-form" method="post" autocomplete="off" >
+
+
+<h3 class="settings-heading">$lbl_pass1</h3>
+
+
+<div id="settings-password-wrapper" >
+<p id="settings-password-desc" >
+$lbl_pass2
+</p>
+<label id="settings-password-label" for="settings-password" >$lbl_pass3 </label>
+<input type="password" id="settings-password" name="npassword" />
+</div>
+<div id="settings-password-end" ></div>
+
+<div id="settings-confirm-wrapper" >
+<label id="settings-confirm-label" for="settings-confirm" >$lbl_pass4 </label>
+<input type="password" id="settings-confirm" name="confirm" />
+</div>
+<div id="settings-confirm-end" ></div>
+
+<div id="settings-openid-wrapper" >
+ $oidhtml
+</div>
+<div id="settings-openid-end" ></div>
+
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
+</div>
+
+
+<h3 class="settings-heading">$lbl_basic</h3>
+
+<div id="settings-username-wrapper" >
+<label id="settings-username-label" for="settings-username" >$lbl_fn </label>
+<input type="text" name="username" id="settings-username" value="$username" />
+</div>
+<div id="settings-username-end" ></div>
+
+<div id="settings-email-wrapper" >
+<label id="settings-email-label" for="settings-email" >$lbl_email </label>
+<input type="text" name="email" id="settings-email" value="$email" />
+</div>
+<div id="settings-email-end" ></div>
+
+
+
+<div id="settings-timezone-wrapper" >
+<label id="settings-timezone-label" for="timezone_select" >$lbl_tz </label>
+$zoneselect
+</div>
+<div id="settings-timezone-end" ></div>
+
+<div id="settings-defloc-wrapper" >
+<label id="settings-defloc-label" for="settings-defloc" >$lbl_loc1 </label>
+<input type="text" name="defloc" id="settings-defloc" value="$defloc" />
+</div>
+<div id="settings-defloc-end" ></div>
+
+<div id="settings-allowloc-wrapper" >
+<label id="settings-allowloc-label" for="settings-allowloc" >$lbl_loc2 </label>
+<input type="checkbox" name="allow_location" id="settings-allowloc" value="1" $loc_checked />
+</div>
+<div id="settings-allowloc-end" ></div>
+
+
+
+
+<div id="settings-theme-select">
+<label id="settings-theme-label" for="theme-select" >$lbl_theme </label>
+$theme
+</div>
+<div id="settings-theme-end"></div>
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
+</div>
+
+
+<h3 class="settings-heading">$lbl_prv</h3>
+
+
+<input type="hidden" name="visibility" value="$visibility" />
+
+<div id="settings-maxreq-wrapper">
+<label id="settings-maxreq-label" for="settings-maxreq" >$lbl_maxreq</label>
+<input id="settings-maxreq" name="maxreq" value="$maxreq" />
+<div id="settings-maxreq-desc">$lbl_maxrdesc</div>
+</div>
+<div id="settings-maxreq-end"></div>
+
+
+
+
+$profile_in_dir
+
+$profile_in_net_dir
+
+
+<div id="settings-default-perms" class="settings-default-perms" >
+ <div id="settings-default-perms-menu" class="fakelink" onClick="openClose('settings-default-perms-select');" >$permissions $permdesc</div>
+ <div id="settings-default-perms-menu-end"></div>
+
+ <div id="settings-default-perms-select" style="display: none;" >
+
+ $aclselect
+
+ </div>
+</div>
+<div id="settings-default-perms-end"></div>
+
+<div id="settings-blockw-wrapper" >
+<label id="settings-blockw-label" for="settings-blockw" >$lbl_rempost </label>
+<input type="checkbox" name="blockwall" id="settings-blockw" value="1" $blockw_checked />
+</div>
+<div id="settings-blockw-end" ></div>
+
+
+
+<div id="settings-expire-desc">$lbl_exp1 <input type="text" size="3" name="expire" value="$expire" /> $lbl_exp2</div>
+<div id="settings-expire-end"></div>
+
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="Submit" />
+</div>
+
+
+
+<h3 class="settings-heading">$lbl_not1</h3>
+
+
+<div id="settings-notify-wrapper">
+<div id="settings-notify-desc">$lbl_not2 </div>
+<label for="notify1" id="settings-label-notify1">$lbl_not3</label>
+<input id="notify1" type="checkbox" $sel_notify1 name="notify1" value="1" />
+<div id="notify1-end"></div>
+<label for="notify2" id="settings-label-notify2">$lbl_not4</label>
+<input id="notify2" type="checkbox" $sel_notify2 name="notify2" value="2" />
+<div id="notify2-end"></div>
+<label for="notify3" id="settings-label-notify3">$lbl_not5</label>
+<input id="notify3" type="checkbox" $sel_notify3 name="notify3" value="4" />
+<div id="notify3-end"></div>
+<label for="notify4" id="settings-label-notify4">$lbl_not6</label>
+<input id="notify4" type="checkbox" $sel_notify4 name="notify4" value="8" />
+<div id="notify4-end"></div>
+<label for="notify5" id="settings-label-notify5">$lbl_not7</label>
+<input id="notify5" type="checkbox" $sel_notify5 name="notify5" value="16" />
+<div id="notify5-end"></div>
+</div>
+<div id="settings=notify-end"></div>
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
+</div>
+
+<h3 class="settings-imap">$lbl_imap0</h3>
+<p>
+$imap_desc
+$mail_disabled
+</p>
+<label for="imap-server" id="settings-label-imap1">$lbl_imap1</label>
+<input type="text" id="imap-server" name="mail_server" value="$imap_server" $imap_disabled />
+<div id="imap-server-end"></div>
+<label for="imap-port" id="settings-label-imap2">$lbl_imap2</label>
+<input type="text" id="imap-port" name="mail_port" value="$imap_port" $imap_disabled />
+<div id="imap-port-end"></div>
+<label for="imap-ssl" id="settings-label-imap3">$lbl_imap3</label>
+<input type="text" id="imap-ssl" name="mail_ssl" value="$imap_ssl" $imap_disabled />
+<div id="imap-ssl-end"></div>
+<label for="imap-user" id="settings-label-imap4">$lbl_imap4</label>
+<input type="text" id="imap-user" name="mail_user" value="$imap_user" $imap_disabled />
+<div id="imap-user-end"></div>
+<label for="imap-pass" id="settings-label-imap5">$lbl_imap5</label>
+<input type="password" id="imap-pass" name="mail_pass" value="" $imap_disabled />
+<div id="imap-pass-end"></div>
+<label for="imap-replyto" id="settings-label-imap6">$lbl_imap6</label>
+<input type="text" id="imap-replyto" name="mail_replyto" value="$imap_replyto" $imap_disabled />
+<div id="imap-replyto-end"></div>
+<label for="imap-pubmail" id="settings-label-imap7">$lbl_imap7</label>
+<input type="checkbox" name="mail_pubmail" id="imap-pubmail" $pubmail_checked value="1" $imap_disabled />
+<div id="imap-pubmail-end"></div>
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
+</div>
+
+
+<h3 class="settings-heading">$lbl_advn</h3>
+
+$pagetype
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="$submit" />
+</div>
+
+
diff --git a/view/theme/dispy/style.css b/view/theme/dispy/style.css
new file mode 100644
index 000000000..17b3a61b6
--- /dev/null
+++ b/view/theme/dispy/style.css
@@ -0,0 +1,789 @@
+body {
+ margin: 0px;
+ padding: 0px;
+ font-family: freesans,helvetica,arial,clean,sans-serif;
+ font-size: 16px;
+}
+img { border: 0 none; }
+
+a { color: #3465a4; text-decoration: none; margin-bottom:1px;}
+a:hover { color: #729fcf; padding-bottom: 0px; border-bottom: 1px dotted #729fcf;}
+
+
+.required { display: inline; color: #ff0000;}
+.fakelink { color: #3465a4; cursor: pointer; }
+.fakelink :hover{ color: #729fcf; }
+
+input[type=submit] {
+ margin-top: 20px;
+ height: 22px;
+ background-color: #555753;
+ color: #eeeeec;
+ -webkit-border-radius: 5px ;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ border: 0px;
+}
+
+.smalltext { font-size: 0.7em }
+
+#panel {
+ position: absolute;
+ font-size:0.8em;
+ -webkit-border-radius: 5px ;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #ffffff;
+ background-color: #2e3436;
+ color: #eeeeec;
+ padding:1em;
+}
+
+.pager {
+ padding-top: 30px;
+ display:block;
+ clear: both;
+ text-align: center;
+}
+
+.pager span { padding: 4px; margin:4px; }
+.pager_current { background-color: #729fcf; color: #ffffff; }
+
+/**
+ * login
+ */
+#login-extra-links a { margin-right: 20px; }
+
+/*********
+* nav
+*********/
+
+nav {
+ height: 50px;
+ display: block;
+ background-color: #2e3436;
+ color: #eeeeec;
+ position: relative;
+ padding: 0px 10%;
+}
+nav a { text-decoration: none; color: #eeeeec; border:0px;}
+nav a:hover { text-decoration: none; color: #eeeeec; border:0px;}
+
+nav #banner {
+ display: block;
+ position: absolute;
+ margin-left: 20px;
+}
+nav #banner #logo-text a {
+ font-size: 40px;
+ font-weight: bold;
+ margin-left: 3px;
+}
+
+nav #user-menu {
+ display: block;
+ width: auto;
+ float: right;
+ margin-top: 22px;
+ margin-right: 10px;
+ position: relative;
+ vertical-align: middle;
+
+ background-color: #555753;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ background: #555753 url("menu-user-pin.jpg") 98% center no-repeat;
+}
+nav #user-menu-label {
+ float: left;
+ font-size: 12px;
+ padding: 3px 20px 9px 5px;
+ height: 10px;
+}
+
+ul#user-menu-popup {
+ display: none;
+ position: absolute;
+ background-color: #555753;
+ width: 100%;
+ padding: 10px 0px;
+ margin: 0px;
+ top: 20px;
+ left: 0px;
+
+ -webkit-border-radius: 0px 0px 5px 5px;
+ -moz-border-radius: 0px 0px 5px 5px;
+ border-radius: 0px 0px 5px 5px;
+
+ z-index: 10000;
+}
+
+ul#user-menu-popup li { display: block; }
+ul#user-menu-popup li a { display: block; padding: 5px; }
+ul#user-menu-popup li a:hover { color: #2e3436; background-color: #eeeeec; }
+ul#user-menu-popup li a.nav-sep { border-top: 1px solid #eeeeec; }
+nav .nav-link {
+ float: right;
+ display: block;
+ width: 22px;
+ height: 22px;
+ /*border: 1px solid #eeeeec;*/
+ overflow: hidden;
+ margin-top: 22px;
+ margin-right: 10px;
+ text-indent: 50px;
+ background: transparent url('icons.png') 0px 0px no-repeat;
+}
+
+#nav-directory-link { background-position: 0px -22px }
+#nav-directory-link:hover { background-position: -22px -22px;}
+#nav-search-link { background-position: 0px -44px }
+#nav-search-link:hover { background-position: -22px -44px;}
+#nav-apps-link { background-position: 0px -66px }
+#nav-apps-link:hover { background-position: -22px -66px;}
+#nav-login-link { background-position: 0px -88px }
+#nav-login-link:hover { background-position: -22px -88px;}
+
+#notifications {
+ height: 20px; width: 100%;
+ position: absolute;
+ top:-19px; left: 0px;
+}
+.nav-ajax-update {
+ width: 30px;
+ height: 19px;
+ background: transparent url('notifications.png') 0px 0px no-repeat;
+ color: #ffffff;
+ font-weight: bold;
+ font-size: 0.8em;
+ padding-top: 0.2em;
+ text-align: center;
+ float: left;
+ margin-right: -4px;
+ display: none;
+}
+#net-update { background-position: 0px 0px; }
+#mail-update { background-position: -30px 0px; }
+#notify-update { background-position: -60px 0px; }
+#home-update { background-position: -90px 0px; }
+
+/** sysmsg **/
+#sysmsg {
+ position:fixed;
+ bottom: 0px; right:10%;
+ -moz-box-shadow: 0px 0px 5px #888;
+ -webkit-box-shadow: 0px 0px 5px #888;
+ box-shadow: 0px 0px 5px #888;
+ padding: 10px;
+ background-color: #fcaf3e; border:2px solid #f8911b;
+ border-bottom:0px;
+ padding-bottom: 50px;
+ z-index: 1000;
+}
+#sysmsg br {
+ display:block;
+ margin:2px 0px;
+ border-top: 1px solid #ccccce;
+}
+
+/**
+* aside
+**/
+
+aside {
+ position: absolute;
+ right: 11%;
+ width: 200px;
+ font-size: 0.7em;
+
+}
+.vcard .fn { font-size: 1.7em; font-weight: bold; border-bottom: 1px solid #729fcf; padding-top: 1px;}
+
+.vcard #profile-photo-wrapper { margin: 10px 0px }
+
+aside h4 { font-size: 1.2em; }
+
+aside #viewcontacts { text-align: right;}
+
+#profile-extra-links ul { margin-left: 0px; padding-left: 0px; list-style: none; }
+
+#dfrn-request-link {
+ background: #3465A4 url('connect.png') no-repeat 95% center;
+ border-radius: 5px 5px 5px 5px;
+ color: #FFFFFF;
+ display: block;
+ font-size: 1.2em;
+ padding: 0.2em 0.5em;
+}
+
+/**
+* contacts block
+*/
+.contact-block-div { width: 50px; height: 50px; float: left; }
+#contact-block-end { clear: both; }
+
+/**
+ * jot
+ **/
+#profile-jot-text_tbl { margin-bottom: 10px; }
+#profile-jot-text_ifr { width: 99.9%!important }
+#profile-jot-submit-wrapper { float: right;}
+#profile-jot-perms {
+ float: right;
+ background-color: #555753;
+ height: 22px; width: 20px;
+ -webkit-border-radius: 0px 5px 5px 0px;
+ -moz-border-radius: 0px 5px 5px 0px;
+ border-radius: 0px 5px 5px 0px;
+ overflow: hidden;
+ border: 0px;
+ margin-left:2px;
+}
+#profile-jot-submit {
+ float: right;
+ height: 22px;
+ background-color: #555753;
+ color: #eeeeec;
+ -webkit-border-radius: 5px 0px 0px 5px;
+ -moz-border-radius: 5px 0px 0px 5px;
+ border-radius: 5px 0px 0px 5px;
+ border: 0px;
+ margin-top: 0px;
+}
+#character-counter {
+ float: right; padding: 8px 10px;
+}
+#profile-rotator-wrapper {
+ float: right;
+}
+
+.jot-tool {
+ float: left;
+ margin-right: 5px;
+}
+#profile-jot-tools-end,
+#profile-jot-banner-end { clear: both; }
+
+#profile-jot-email-wrapper {
+ margin: 10px 10% 0px 10%;
+ border: 1px solid #555753;
+ border-bottom: 0px;
+}
+#profile-jot-email-label { background-color: #555753; color: #ccccce; padding: 5px;}
+#profile-jot-email { margin: 5px; width: 90%; }
+
+#profile-jot-networks {
+ margin: 0px 10%;
+ border: 1px solid #555753;
+ border-top: 0px;
+ border-bottom: 0px;
+ padding: 5px;
+}
+#profile-jot-acl-wrapper {
+ margin: 0px 10%;
+ border: 1px solid #555753;
+ border-top: 0px;
+}
+#group_allow_wrapper,
+#group_deny_wrapper,
+#acl-permit-outer-wrapper { width: 47%; float: left; }
+
+#contact_allow_wrapper,
+#contact_deny_wrapper,
+#acl-deny-outer-wrapper { width: 47%; float: right; }
+
+#acl-permit-text,
+#acl-deny-text {background-color: #555753; color: #ccccce; padding: 5px;}
+
+#acl-permit-wrapper,
+#acl-deny-wrapper { padding: 5px; }
+
+#acl-allow-group-label,
+#acl-allow-contact-label,
+#acl-deny-group-label,
+#acl-deny-contact-label { display: block }
+
+#group_allow, #contact_allow,
+#group_deny, #contact_deny,
+#profile-jot-acl-wrapper select { width: 100%; }
+
+#acl-wrapper-end,
+#profile-jot-end { clear: both; height: 5px; }
+
+/**
+ * section
+ */
+section { margin: 10px 11% 0px 11%; font-size: 0.8em; padding-right: 230px;}
+
+/** tabs **/
+.tabs-wrapper {list-style: none; padding: 0px; margin: 0px; border-bottom: 1px solid #729fcf; }
+.tabs-wrapper li { display: inline;}
+.tabs { padding: 0px 5px; margin-right: 10px; }
+.tabs:hover { background-color: #729fcf; color: #eeeeec; border: 0px; }
+
+
+/**
+ * items
+ */
+.wall-item-outside-wrapper {
+ margin-top: 50px;
+}
+.wall-item-outside-wrapper-end { clear: both;}
+.wall-item-content-wrapper { position: relative; }
+.wall-item-photo-menu { display: none;}
+.wall-item-photo-menu-button {
+ display:none;
+ text-indent: -99999px;
+ background: #555753 url("menu-user-pin.jpg") no-repeat 75px center;
+ position: absolute;
+ overflow: hidden;
+ height: 20px; width: 90px;
+ top: 85px; left: 0px;
+ -webkit-border-radius: 0px 0px 5px 5px;
+ -moz-border-radius: 0px 0px 5px 5px;
+ border-radius: 0px 0px 5px 5px;
+
+
+}
+
+.wall-item-info { float: left; width: 140px; }
+.wall-item-photo-wrapper {
+ width: 80px; height: 80px;
+ position: relative;
+ padding: 5px;
+ background-color: #555753;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+
+.wall-item-tools {
+ float: right;
+ /*height: 0px;
+ padding-top: 20px;
+ overflow:hidden;
+ background: #ffffff url("icons.png") no-repeat -50px -40px;*/
+ filter: alpha(opacity=20);
+ opacity: 0.2;
+ -webkit-transition: all 1s ease-in-out;
+ -moz-transition: all 1s ease-in-out;
+ -o-transition: all 1s ease-in-out;
+ -ms-transition: all 1s ease-in-out;
+ transition: all 1s ease-in-out;
+}
+.wall-item-tools:hover {
+ /*height:auto;*/
+ filter: alpha(opacity=100);
+ opacity: 1;
+ -webkit-transition: all 1s ease-in-out;
+ -moz-transition: all 1s ease-in-out;
+ -o-transition: all 1s ease-in-out;
+ -ms-transition: all 1s ease-in-out;
+ transition: all 1s ease-in-out;
+
+}
+
+.wall-item-title { font-size: 1.2em; font-weight: bold;}
+.wall-item-body { margin-left: 140px;}
+.wall-item-lock-wrapper { float: right; }
+.wall-item-dislike,
+.wall-item-like,
+.wall-item-author { clear: left; font-size: 0.8em; margin: 10px 0px 0px 140px; color: #babdb6;}
+.wall-item-ago { display: inline; padding-left: 10px;}
+.wall-item-wrapper-end { clear:both; }
+.wall-item-location {
+ margin-top:5px;
+ width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -o-text-overflow: ellipsis;
+}
+.wall-item-location .icon { float: left; }
+.wall-item-location > a { margin-left: 25px; font-size: 0.7em; display: block;}
+.wall-item-location .smalltext { margin-left: 25px; font-size: 0.7em; display: block;}
+.wall-item-location > br { display: none; }
+
+.wallwall .wwto {
+ left: -10px;
+ margin: 0;
+ position: absolute;
+ top: 65px;
+ width: 30px;
+ z-index: 10001;
+ width: 30px;
+ height: 30px;
+
+}
+.wallwall .wwto img { width: 30px; height: 30px;}
+.wallwall .wall-item-photo-end { clear: both; }
+.wall-item-arrowphoto-wrapper {
+ position: absolute;
+ left: 20px;
+ top: 70px;
+ z-index: 10002;
+}
+
+.wall-item-photo-menu {
+ min-width: 92px;
+ border: 2px solid #FFFFFF;
+ border-top: 0px;
+ background: #555753;
+ position: absolute;
+ left: -2px; top: 101px;
+ display: none;
+ z-index: 10000;
+ -webkit-border-radius: 0px 5px 5px 5px;
+ -moz-border-radius: 0px 5px 5px 5px;
+ border-radius: 0px 5px 5px 5px;
+}
+.wall-item-photo-menu ul { margin:0px; padding: 0px; list-style: none }
+.wall-item-photo-menu li a { white-space: nowrap; display: block; padding: 5px 2px; color: #eeeeec; }
+.wall-item-photo-menu li a:hover { color: #555753; background: #eeeeec; }
+
+/**
+ * comment
+ */
+
+ .ccollapse-wrapper { font-size: 0.9em; margin-left: 80px; }
+
+.wall-item-outside-wrapper.comment { margin-left: 80px; }
+.wall-item-outside-wrapper.comment .wall-item-photo { width: 40px; height: 40px;}
+.wall-item-outside-wrapper.comment .wall-item-photo-wrapper {width: 40px; height: 40px; }
+.wall-item-outside-wrapper.comment .wall-item-photo-menu-button {
+ width: 50px; top: 45px; background-position: 35px center;
+}
+.wall-item-outside-wrapper.comment .wall-item-info { width: 60px; }
+.wall-item-outside-wrapper.comment .wall-item-body { margin-left: 60px;}
+.wall-item-outside-wrapper.comment .wall-item-author { margin-left: 60px;}
+
+.wall-item-outside-wrapper.comment .wall-item-photo-menu {
+ min-width: 50px;
+ top: 60px;
+}
+
+
+.comment-wwedit-wrapper,
+.comment-edit-wrapper { margin: 30px 0px 0px 80px;}
+.comment-wwedit-wrapper img,
+.comment-edit-wrapper img { width: 20px; height: 20px; }
+.comment-edit-photo-link { float: left; width: 40px;}
+.comment-edit-text-empty { width: 80%; height: 20px; border: 0px; color: #babdb6;
+ -webkit-transition: all 0.5s ease-in-out;
+ -moz-transition: all 0.5s ease-in-out;
+ -o-transition: all 0.5s ease-in-out;
+ -ms-transition: all 0.5s ease-in-out;
+ transition: all 0.5s ease-in-out;
+}
+.comment-edit-text-empty:hover { color: #999999;}
+.comment-edit-text-full { width: 80%; height: 6em;
+ -webkit-transition: all 0.5s ease-in-out;
+ -moz-transition: all 0.5s ease-in-out;
+ -o-transition: all 0.5s ease-in-out;
+ -ms-transition: all 0.5s ease-in-out;
+ transition: all 0.5s ease-in-out;
+}
+.comment-edit-submit-wrapper { width: 80%; margin-left: 40px; text-align: right; }
+.comment-edit-submit {
+ height: 22px;
+ background-color: #555753;
+ color: #eeeeec;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ border: 0px;
+}
+
+
+
+
+/**
+ * photos
+ **/
+#photo-top-links {
+ margin-bottom:30px;
+}
+.photo-album-image-wrapper,
+.photo-top-image-wrapper {
+ float: left;
+ margin: 0px 10px 10px 0px;
+ -moz-box-shadow: 0px 0px 5px #888;
+ -webkit-box-shadow: 0px 0px 5px #888;
+ box-shadow: 0px 0px 5px #888;
+ background-color: #eeeeee;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ padding-bottom: 30px;
+ position:relative;
+
+}
+
+.photo-top-image-wrapper a:hover,
+#photo-photo a:hover,
+.photo-album-image-wrapper a:hover {
+ border-bottom: 0px;
+}
+
+.photo-top-photo,
+.photo-album-photo {
+ -webkit-border-radius: 5px 5px 0px 0px;
+ -moz-border-radius: 5px 5px 0px 0px;
+ border-radius: 5px 5px 0px 0px;
+ }
+
+.photo-top-album-name { position: absolute; bottom: 0px; padding: 0px 5px;}
+.caption { position: absolute; bottom: 0px; margin: 0px 5px}
+
+
+#photo-photo{
+ position: relative;
+ float:left;
+}
+#photo-photo-end { clear: both; }
+#photo-prev-link,
+#photo-next-link{
+ position: absolute;
+ width:30%;
+ height: 100%;
+ background-color: rgba(255,255,255,0.5);
+ opacity: 0;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ -ms-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+ background-position: center center;
+ background-repeat: no-repeat;
+
+}
+#photo-prev-link { left:0px; top:0px; background-image: url('prev.png'); }
+#photo-next-link { right:0px; top:0px; background-image: url('next.png');}
+
+#photo-prev-link a,
+#photo-next-link a{
+ display: block; width: 100%; height: 100%;
+ overflow: hidden;
+ text-indent: -900000px;
+}
+
+#photo-prev-link:hover,
+#photo-next-link:hover{
+ opacity: 1;
+ -webkit-transition: all 0.2s ease-in-out;
+ -moz-transition: all 0.2s ease-in-out;
+ -o-transition: all 0.2s ease-in-out;
+ -ms-transition: all 0.2s ease-in-out;
+ transition: all 0.2s ease-in-out;
+}
+
+#photos-upload-spacer,
+#photos-upload-new-wrapper,
+#photos-upload-exist-wrapper { margin-bottom: 1em; }
+#photos-upload-existing-album-text,
+#photos-upload-newalbum-div {
+ background-color: #555753;
+ color: #eeeeec;
+ padding: 1px;
+}
+#photos-upload-album-select,
+#photos-upload-newalbum { width: 99% }
+#photos-upload-perms-menu { text-align: right; }
+
+/**
+ * message
+ */
+.prvmail-text { width: 100%;}
+#prvmail-subject { width: 100%;}
+#prvmail-submit-wrapper { margin-top: 10px; }
+#prvmail-submit {
+ float: right;
+ margin-top: 0px;
+}
+#prvmail-submit-wrapper > div {
+ margin-right: 5px;
+ float: left;
+}
+.mail-list-outside-wrapper { margin-top: 20px;}
+.mail-list-sender { float: left; }
+.mail-list-detail { margin-left: 90px; }
+.mail-list-sender-name { display: inline; }
+.mail-list-date { display: inline; font-size: 0.8em; padding-left: 10px;}
+.mail-list-subject { font-size: 1.5em;}
+.mail-list-delete-wrapper { float: right; }
+.mail-list-outside-wrapper-end { clear: both;}
+
+/**
+ * contacts
+ */
+
+.view-contact-wrapper,
+.contact-entry-wrapper { float: left; margin-right: 20px; margin-bottom: 20px; position: relative;}
+.contact-entry-direction-wrapper {position: absolute; top: 20px;}
+.contact-entry-edit-links { position: absolute; top: 60px; }
+.contact-entry-photo {
+ margin-left:20px;
+}
+.contact-entry-edit-links .icon {
+ border: 1px solid #babdb6;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ background-color: #ffffff;
+}
+
+#contact-edit-banner-name { font-size: 1.5em; }
+#contact-edit-photo-wrapper {position: relative; float: left; padding: 20px;}
+#contact-edit-direction-icon { position: absolute; top: 60px; left:0px;}
+#contact-edit-nav-wrapper { margin-left: 210px; }
+#contact-edit-links { float: left; margin-top: 23px; }
+#contact-drop-links { margin-left: 5px; }
+#contact-edit-nav-wrapper .icon {
+ border: 1px solid #babdb6;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+#contact-edit-poll-wrapper { margin-left: 50px; }
+#contact-edit-last-update-text { margin-bottom: 15px; }
+#contact-edit-last-updated { font-weight: bold; }
+#contact-edit-poll-text { display: inline; }
+#contact-edit-end { clear: both; }
+
+/**
+ * register, settings & profile forms
+ */
+#settings-nickname-desc {
+ background-color: #DDEFFF;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ padding: 5px;
+}
+
+#register-form div,
+#profile-edit-form div,
+#settings-form div {
+ clear: both;
+}
+
+#register-form label,
+#profile-edit-form label,
+#settings-form label {
+ width: 300px; float: left;
+}
+
+#register-form span,
+#profile-edit-form span,
+#settings-form span {
+ color: #555753;
+ display:block;
+ margin-bottom: 20px;
+}
+.settings-submit-wrapper,
+.profile-edit-submit-wrapper { margin: 30px 0px;}
+.profile-listing { float: left; margin: 20px 20px 0px 0px}
+
+#profile-edit-links ul { margin: 20px 0px; padding: 0px; list-style: none; }
+
+
+#register-sitename { display: inline; font-weight: bold;}
+
+/**
+ * contacts selector
+ */
+
+#prof-members {
+ height: 200px;
+ overflow: auto;
+ border: 1px solid #555753;
+ -webkit-border-radius: 5px 5px 0px 0px;
+ -moz-border-radius: 5px 5px 0px 0px;
+ border-radius: 5px 5px 0px 0px;
+}
+#prof-all-contacts {
+ height: 200px;
+ overflow: auto;
+ border: 1px solid #555753;
+ -webkit-border-radius: 0px 0px 5px 5px;
+ -moz-border-radius: 0px 0px 5px 5px;
+ border-radius: 0px 0px 5px 5px;
+}
+#prof-members h3,
+#prof-all-contacts h3{
+ color: #eeeeec;
+ background-color: #555753;
+ margin: 0px;
+ padding: 5px;
+}
+
+#prof-separator { display: none;}
+
+/**
+ * profile
+ */
+#cropimage-wrapper { float:left; }
+#crop-image-form { clear:both; }
+
+
+/**
+ * directory
+ */
+.directory-item {float: left; margin: 50px 50px 0px 0px;}
+
+/**
+ * ICONS
+ */
+.icon {
+ display: block; width: 20px; height: 20px;
+ background-image: url('icons.png');
+}
+/*.icon:hover {
+ border-bottom: 0px;
+}*/
+
+.border {
+ border: 1px solid #babdb6;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.article { background-position: -50px 0px;}
+.audio { background-position: -70px 0px;}
+.block { background-position: -90px 0px;}
+.drop { background-position: -110px 0px;}
+.drophide { background-position: -130px 0px;}
+.edit { background-position: -150px 0px;}
+.camera { background-position: -170px 0px;}
+.dislike { background-position: -190px 0px;}
+.like { background-position: -210px 0px;}
+.link { background-position: -230px 0px;}
+
+.globe { background-position: -50px -20px;}
+.noglobe { background-position: -70px -20px;}
+.no { background-position: -90px -20px;}
+.pause { background-position: -110px -20px;}
+.play { background-position: -130px -20px;}
+.pencil { background-position: -150px -20px;}
+.small-pencil{ background-position: -170px -20px;}
+.recycle { background-position: -190px -20px;}
+.remote-link{ background-position: -210px -20px;}
+.share { background-position: -230px -20px;}
+
+.tools { background-position: -50px -40px;}
+.lock { background-position: -70px -40px;}
+.unlock { background-position: -90px -40px;}
+.video { background-position: -110px -40px;}
+.youtube { background-position: -130px -40px;}
+
+/**
+ * footer
+ */
+ .cc-license { margin-top: 100px; font-size: 0.7em; }
+footer { display: block; margin: 50px 20%; clear: both; }
+
diff --git a/view/theme/dispy/wall_item.tpl b/view/theme/dispy/wall_item.tpl
new file mode 100644
index 000000000..ed1206f81
--- /dev/null
+++ b/view/theme/dispy/wall_item.tpl
@@ -0,0 +1,47 @@
+<div class="wall-item-outside-wrapper$indent" id="wall-item-outside-wrapper-$id" >
+ <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+ <div class="wall-item-info" id="wall-item-info-$id">
+ <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-$id"
+ onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+ onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+ <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+ <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" height="80" width="80" alt="$name" />
+ </a>
+ <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+ <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+ <ul>
+ $item_photo_menu
+ </ul>
+ </div>
+ </div>
+ <div class="wall-item-photo-end"></div>
+ <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>
+ </div>
+ <div class="wall-item-lock-wrapper">$lock</div>
+ <div class="wall-item-tools" id="wall-item-tools-$id">
+ $vote
+ $plink
+ $edpost
+ $drop
+ </div>
+ <div class="wall-item-content" id="wall-item-content-$id" >
+ <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+ <div class="wall-item-title-end"></div>
+ <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+ </div>
+ <div class="wall-item-author">
+ <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+ <div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
+
+ </div>
+ </div>
+ <div class="wall-item-wrapper-end"></div>
+ <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+ <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+ <div class="wall-item-comment-wrapper" >
+ $comment
+ </div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
diff --git a/view/theme/dispy/wallwall_item.tpl b/view/theme/dispy/wallwall_item.tpl
new file mode 100644
index 000000000..263b67c73
--- /dev/null
+++ b/view/theme/dispy/wallwall_item.tpl
@@ -0,0 +1,51 @@
+<div class="wall-item-outside-wrapper$indent wallwall" id="wall-item-outside-wrapper-$id" >
+ <div class="wall-item-content-wrapper$indent" id="wall-item-content-wrapper-$id" >
+ <div class="wall-item-info wallwall" id="wall-item-info-$id">
+ <div class="wall-item-photo-wrapper wwto" id="wall-item-ownerphoto-wrapper-$id" >
+ <a href="$owner_url" title="$olinktitle" class="wall-item-photo-link" id="wall-item-ownerphoto-link-$id">
+ <img src="$owner_photo" class="wall-item-photo$osparkle" id="wall-item-ownerphoto-$id" height="80" width="80" alt="$owner_name" /></a>
+ </div>
+ <div class="wall-item-arrowphoto-wrapper" ><img src="images/larrow.gif" alt="$wall" /></div>
+ <div class="wall-item-photo-wrapper wwfrom" id="wall-item-photo-wrapper-$id"
+ onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('wall-item-photo-menu-button-$id')"
+ onmouseout="t$id=setTimeout('closeMenu(\'wall-item-photo-menu-button-$id\'); closeMenu(\'wall-item-photo-menu-$id\');',200)">
+ <a href="$profile_url" title="$linktitle" class="wall-item-photo-link" id="wall-item-photo-link-$id">
+ <img src="$thumb" class="wall-item-photo$sparkle" id="wall-item-photo-$id" height="80" width="80" alt="$name" /></a>
+ <span onclick="openClose('wall-item-photo-menu-$id');" class="fakelink wall-item-photo-menu-button" id="wall-item-photo-menu-button-$id">menu</span>
+ <div class="wall-item-photo-menu" id="wall-item-photo-menu-$id">
+ <ul>
+ $item_photo_menu
+ </ul>
+ </div>
+
+ </div>
+ <div class="wall-item-photo-end"></div>
+ <div class="wall-item-location" id="wall-item-location-$id">{{ if $location }}<span class="icon globe"></span>$location {{ endif }}</div>
+ </div>
+ <div class="wall-item-lock-wrapper">$lock</div>
+ <div class="wall-item-tools" id="wall-item-tools-$id">
+ $vote
+ $plink
+ $edpost
+ $drop
+ </div>
+ <div class="wall-item-content" id="wall-item-content-$id" >
+ <div class="wall-item-title" id="wall-item-title-$id">$title</div>
+ <div class="wall-item-title-end"></div>
+ <div class="wall-item-body" id="wall-item-body-$id" >$body</div>
+ </div>
+ <div class="wall-item-author">
+ <a href="$profile_url" title="$linktitle" class="wall-item-name-link"><span class="wall-item-name$sparkle" id="wall-item-name-$id" >$name</span></a>
+ <div class="wall-item-ago" id="wall-item-ago-$id">$ago</div>
+ </div>
+ </div>
+ <div class="wall-item-wrapper-end"></div>
+ <div class="wall-item-like" id="wall-item-like-$id">$like</div>
+ <div class="wall-item-dislike" id="wall-item-dislike-$id">$dislike</div>
+ <div class="wall-item-comment-wrapper" >
+ $comment
+ </div>
+</div>
+
+<div class="wall-item-outside-wrapper-end$indent" ></div>
+
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index 0e361ad46..5f8f06a6c 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -224,6 +224,10 @@ div.wall-item-content-wrapper.shiny {
cursor: pointer;
}
+#jot-perms-icon {
+ float: left;
+}
+
.fakelink, .fakelink:visited, .fakelink:link {
color: #3465a4;
text-decoration: none;
@@ -986,6 +990,10 @@ input#dfrn-url {
border-right: 2px solid #fff;
}
+.wall-item-like-buttons > a,
+.wall-item-like-buttons > img {
+ float: left;
+}
.wall-item-like-buttons img {
cursor: pointer;
@@ -1441,6 +1449,9 @@ input#dfrn-url {
#contact-edit-links {
float: left;
}
+#contact-edit-links a {
+ float: left;
+}
#contact-edit-links img {
margin-left: 20px;
border: none;
@@ -1884,9 +1895,11 @@ a.mail-list-link {
#profile-jot-desc {
/*float: left;*/
width: 480px;
+ color: #FF0000;
margin-top: 10px;
margin-bottom: 10px;
}
+
#character-counter {
float: right;
font-size: 120%;
@@ -2335,3 +2348,42 @@ a.mail-list-link {
float: left;
width: 300px;
}
+
+#contact-edit-links .icon, #contact-drop-links .icon {
+ margin: 0px 3px 0px 3px;
+}
+
+/**
+ * ICONS
+ */
+.icon {
+ display: block; width: 16px; height: 16px;
+ background-image: url('../../../images/icons.png');
+}
+.article { background-position: 0px 0px;}
+.audio { background-position: -16px 0px;}
+.block { background-position: -32px 0px;}
+.drop { background-position: -48px 0px;}
+.drophide { background-position: -64px 0px;}
+.edit { background-position: -80px 0px;}
+.camera { background-position: -96px 0px;}
+.dislike { background-position: -112px 0px;}
+.like { background-position: -128px 0px;}
+.link { background-position: -144px 0px;}
+
+.globe { background-position: 0px -16px;}
+.noglobe { background-position: -16px -16px;}
+.no { background-position: -32px -16px;}
+.pause { background-position: -48px -16px;}
+.play { background-position: -64px -16px;}
+.pencil { background-position: -80px -16px;}
+.small-pencil { background-position: -96px -16px;}
+.recycle { background-position: -112px -16px;}
+.remote-link { background-position: -128px -16px;}
+.share { background-position: -144px -16px;}
+
+.tools { background-position: 0px -32px;}
+.lock { background-position: -16px -32px;}
+.unlock { background-position: -32px -32px;}
+.video { background-position: -48px -32px;}
+.youtube { background-position: -64px -32px;}
diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css
index f4d31e93f..f38b6e6d4 100644
--- a/view/theme/loozah/style.css
+++ b/view/theme/loozah/style.css
@@ -120,6 +120,10 @@ blockquote:before {
cursor: pointer;
}
+#jot-perms-icon {
+ float: left;
+}
+
.fakelink, .fakelink:visited {
color: #15607B;
text-decoration: none;
@@ -1047,6 +1051,10 @@ input#dfrn-url {
padding-right: 10px;
border-right: 2px solid #fff;
}
+.wall-item-like-buttons > a,
+.wall-item-like-buttons > img {
+ float: left;
+}
.wall-item-share-buttons {
margin-left: 5px;
@@ -1504,6 +1512,9 @@ padding: 5px 10px 0px;
#contact-edit-links {
float: left;
}
+#contact-edit-links a {
+ float: left;
+}
#contact-edit-links img {
margin-left: 20px;
border: none;
@@ -2359,3 +2370,38 @@ a.mail-list-link {
float: left;
width: 300px;
}
+
+/**
+ * ICONS
+ */
+.icon {
+ display: block; width: 16px; height: 16px;
+ background-image: url('../../../images/icons.png');
+}
+.article { background-position: 0px 0px;}
+.audio { background-position: -16px 0px;}
+.block { background-position: -32px 0px;}
+.drop { background-position: -48px 0px;}
+.drophide { background-position: -64px 0px;}
+.edit { background-position: -80px 0px;}
+.camera { background-position: -96px 0px;}
+.dislike { background-position: -112px 0px;}
+.like { background-position: -128px 0px;}
+.link { background-position: -144px 0px;}
+
+.globe { background-position: 0px -16px;}
+.noglobe { background-position: -16px -16px;}
+.no { background-position: -32px -16px;}
+.pause { background-position: -48px -16px;}
+.play { background-position: -64px -16px;}
+.pencil { background-position: -80px -16px;}
+.small-pencil { background-position: -96px -16px;}
+.recycle { background-position: -112px -16px;}
+.remote-link { background-position: -128px -16px;}
+.share { background-position: -144px -16px;}
+
+.tools { background-position: 0px -32px;}
+.lock { background-position: -16px -32px;}
+.unlock { background-position: -32px -32px;}
+.video { background-position: -48px -32px;}
+.youtube { background-position: -64px -32px;}
diff --git a/view/wall_item_drop.tpl b/view/wall_item_drop.tpl
index 9aa565f69..b4ea62b45 100644
--- a/view/wall_item_drop.tpl
+++ b/view/wall_item_drop.tpl
@@ -1,2 +1,4 @@
-<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" ><a href="item/drop/$id" onclick="return confirmDelete();" ><img src="images/b_drophide.gif" alt="$delete" title="$delete" id="wall-item-delete-icon-$id" class="wall-item-delete-icon" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a></div>
- <div class="wall-item-delete-end"></div>
+<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" >
+ <a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a>
+</div>
+<div class="wall-item-delete-end"></div>