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