* 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
$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?
}
+
+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()){
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');
$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" >';
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');
}
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">';
* 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' );
$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');
// 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');
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);
}
}
+
+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);
+ }
+ }
+ }
+}
+
<?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', '⇩' );
-
+
+/**
+ *
+ * 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
$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,
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),
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),
$a = get_app();
return str_replace(
- array( '<3', '</3', '<\\3', ':-)', ';-)', ':-(', ':(', ':-P', ':-"', ':-x', ':-X', ':-D', '8-|', '8-O'),
+ array( '<3', '</3', '<\\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" />',
'<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" />',
$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);
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;
}}
`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,
KEY `wall` (`wall`),
KEY `parent` (`parent`),
KEY `parent-uri` (`parent-uri`),
+ KEY `extid` (`extid`),
KEY `created` (`created`),
KEY `edited` (`edited`),
KEY `visible` (`visible`),
**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)
* [Forums](http://groups.google.com/group/friendika)
* [Developer Forums](http://groups.google.com/group/friendika-dev)
+**About**
+
+* [Site/Version Info](friendika)
+
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...
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.
**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.
$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**
// 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
}
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;
$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 = '';
$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)
call_hooks($a->module . '_pre_' . $selname, $arr);
-
-
if(count($r)) {
foreach($r as $rr) {
if((is_array($preselected)) && in_array($rr['id'], $preselected))
$_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'];
$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'])
// 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
$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
$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)) {
));
}
- 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'] : ''),
'$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:"),
'$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,
$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())
);
$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');
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";
$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";
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;
$.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);
});
}
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
require_once('include/items.php');
require_once('include/bbcode.php');
+ load_hooks();
+
if($argc < 3)
return;
$a->set_baseurl(get_config('system','url'));
+ load_hooks();
+
logger('poller: start');
// run queue delivery process in the background
$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` != ''
<?php
+
error_reporting(E_ERROR | E_WARNING | E_PARSE);
+
/**
*
* Friendika
'$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>' : ''),
}
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);
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];
* 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
*/
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'))
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');
$a->page['htmlhead'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
+ '$ispublic' => t('Visible to <strong>everybody</strong>'),
'$geotag' => $geotag,
'$nickname' => $a->user['nickname']
));
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);
// 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
}
);
}
+ $arr['id'] = $post_id;
+
+ call_hooks('post_local_end', $arr);
+
proc_run('php',"include/notifier.php","like","$post_id");
return; // NOTREACHED
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) {
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);
}
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'])
);
$_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'];
function photos_init(&$a) {
+
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
+ return;
+ }
$o = '';
if($a->argc > 1) {
$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
// 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');
- $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'
}
}
-
- $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?
}
}
- $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'),
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',
$alike = array();
$dlike = array();
+
+ $like = '';
+ $dislike = '';
// display comments
if(count($r)) {
$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',
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',
$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,
}
}
- $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;
}
function profile_init(&$a) {
+ if((get_config('system','block_public')) && (! local_user()) && (! remote_user()))
+ return;
+
if($a->argc > 1)
$which = $a->argv[1];
else {
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');
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 );
'$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;
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');
}
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())
);
}
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;
}
+function update_1053() {
+ q("ALTER TABLE `item` ADD `extid` CHAR( 255 ) NOT NULL AFTER `parent-uri` , ADD INDEX ( `extid` ) ");
+}
+
#, 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"
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
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
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 ""
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
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
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 ""
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
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 ""
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 ""
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 ""
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 ""
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."
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
msgid "following"
msgstr ""
-#: ../../mod/display.php:130
+#: ../../mod/display.php:135
msgid "Item has been removed."
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 ""
"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 ""
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 ""
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 ""
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 ""
msgid "<span class=\"heart\">♥</span> Status:"
msgstr ""
-#: ../../include/profile_advanced.php:103 ../../boot.php:2283
+#: ../../include/profile_advanced.php:103 ../../boot.php:2295
msgid "Homepage:"
msgstr ""
msgid "Everybody"
msgstr ""
-#: ../../include/nav.php:41 ../../boot.php:850
+#: ../../include/nav.php:41 ../../boot.php:852
msgid "Logout"
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 ""
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 ""
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 ""
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 ""
$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.';
$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:';
$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: ';
$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';
$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';
$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.';
$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';
$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';
$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';
<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>
</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>
// 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
// 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
// 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
// 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
-<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>
// 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
<script language="javascript" type="text/javascript">
var editor;
+var textlen = 0;
tinyMCE.init({
theme : "advanced",
//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(' ');
+ }
+ 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) {
</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',
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);
}
<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">
<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>
<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>
<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>
<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>
--- /dev/null
+<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
+
</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;" />
<h3>$regtitle</h3>
-<form action="register" method="post" >
+<form action="register" method="post" id="register-form">
<input type="hidden" name="photo" value="$photo" />
// 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
--- /dev/null
+
+<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>
+
--- /dev/null
+
+<div id="profile-jot-wrapper" >
+ <div id="profile-jot-banner-wrapper">
+ <div id="profile-jot-desc" > </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>
--- /dev/null
+<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>
--- /dev/null
+$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 }}
+
+
+
--- /dev/null
+<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
+
--- /dev/null
+
+<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
--- /dev/null
+<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>
+
--- /dev/null
+<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>
+
+
--- /dev/null
+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; }
+
--- /dev/null
+<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>
+
--- /dev/null
+<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>
+
cursor: pointer;
}
+#jot-perms-icon {
+ float: left;
+}
+
.fakelink, .fakelink:visited, .fakelink:link {
color: #3465a4;
text-decoration: none;
border-right: 2px solid #fff;
}
+.wall-item-like-buttons > a,
+.wall-item-like-buttons > img {
+ float: left;
+}
.wall-item-like-buttons img {
cursor: pointer;
#contact-edit-links {
float: left;
}
+#contact-edit-links a {
+ float: left;
+}
#contact-edit-links img {
margin-left: 20px;
border: none;
#profile-jot-desc {
/*float: left;*/
width: 480px;
+ color: #FF0000;
margin-top: 10px;
margin-bottom: 10px;
}
+
#character-counter {
float: right;
font-size: 120%;
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;}
cursor: pointer;
}
+#jot-perms-icon {
+ float: left;
+}
+
.fakelink, .fakelink:visited {
color: #15607B;
text-decoration: none;
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;
#contact-edit-links {
float: left;
}
+#contact-edit-links a {
+ float: left;
+}
#contact-edit-links img {
margin-left: 20px;
border: none;
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;}
-<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>