-Friendika Installation
+Friendica Installation
-We've tried very hard to ensure that Friendika will run on commodity hosting
+We've tried very hard to ensure that Friendica will run on commodity hosting
platforms - such as those used to host Wordpress blogs and Drupal websites.
-But be aware that Friendika is more than a simple web application. It is a
+But be aware that Friendica is more than a simple web application. It is a
complex communications system which more closely resembles an email server
than a web server. For reliability and performance, messages are delivered in
the background and are queued for later delivery when sites are down. This
kind of functionality requires a bit more of the host system than the typical
-blog. Not every PHP/MySQL hosting provider will be able to support Friendika.
+blog. Not every PHP/MySQL hosting provider will be able to support Friendica.
Many will. But please review the requirements and confirm these with your
hosting provider prior to installation.
Decide if you will use SSL and obtain an SSL cert. Communications with the
Diaspora network MAY require both SSL AND an SSL cert signed by a CA which is
-recognised by the major browsers. Friendika will work with self-signed certs
+recognised by the major browsers. Friendica will work with self-signed certs
but Diaspora communication may not. For best results, install your cert PRIOR
-to installing Friendika and when visiting your site for the initial
+to installing Friendica and when visiting your site for the initial
installation in step 5, please use the https: link. (Use the http: or non-SSL
link if your cert is self-signed).
directory/path component in the URL) is preferred. This is REQUIRED if
you wish to communicate with the Diaspora network.
-2. Unpack the Friendika files into the root of your web server document area.
+2. Unpack the Friendica files into the root of your web server document area.
- If you copy the directory tree to your webserver, make sure
that you also copy .htaccess - as "dot" files are often hidden
You can generally find the location of PHP by executing "which php". If you
have troubles with this section please contact your hosting provider for
-assistance. Friendika will not work correctly if you cannot perform this step.
+assistance. Friendica will not work correctly if you cannot perform this step.
You should also be sure that $a->config['php_path'] is set correctly, it should
look like (changing it to the correct PHP location)
$a->config['php_path'] = '/usr/local/php53/bin/php'
Alternative: You may be able to use the 'poormancron' plugin to perform this
-step if you are using a recent Friendika release. 'poormancron' may result in
+step if you are using a recent Friendica release. 'poormancron' may result in
perfomance and memory issues and is only suitable for small sites with one or
two users and a handful of contacts. To do this, edit the file
".htconfig.php" and look for a line describing your plugins. On a fresh
Ensure that mod-rewite is installed and working, and that your
.htaccess file is being used. To verify the latter, create a file test.out
-containing the word "test" in the top directory of Friendika, make it world
+containing the word "test" in the top directory of Friendica, make it world
readable and point your web browser to
http://yoursitenamehere.com/test.out
-This is my personal fork of https://github.com/friendica/friendica
-
-If you want to have a stable version of friendica please look there.
require_once('include/cache.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '2.3.1255' );
+define ( 'FRIENDICA_VERSION', '2.3.1260' );
define ( 'DFRN_PROTOCOL_VERSION', '2.22' );
-define ( 'DB_UPDATE_VERSION', 1122 );
+define ( 'DB_UPDATE_VERSION', 1123 );
define ( 'EOL', "<br />\r\n" );
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
CREATE TABLE IF NOT EXISTS `notify` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`hash` CHAR( 64 ) NOT NULL,
`type` INT( 11 ) NOT NULL ,
`name` CHAR( 255 ) NOT NULL ,
`url` CHAR( 255 ) NOT NULL ,
`seen` TINYINT( 1 ) NOT NULL DEFAULT '0',
`verb` CHAR( 255 ) NOT NULL,
`otype` CHAR( 16 ) NOT NULL,
+INDEX ( `hash` ),
INDEX ( `type` ),
INDEX ( `uid` ),
INDEX ( `seen` ),
If you look carefully when visiting a group from your Network page, the lock icon under the status update box has an exclamation mark next to it. This is meant to draw attention to that lock. Click the lock. You will see that since you are only viewing a certain group of people, your status updates while on that screen default to only being seen by that same group of people. This is how you keep your future employers from seeing what you write to your drinking buddies. You can over-ride this setting, but this makes it easy to separate your conversations into different friend circles.
-These private conversations work best when your friends are Freindika members. We know who else can see the conversations - nobody, *unless* your friends cut and paste the messages and send them to others.
+These private conversations work best when your friends are Friendica members. We know who else can see the conversations - nobody, *unless* your friends cut and paste the messages and send them to others.
This is a trust issue you need to be aware of. No software in the world can prevent your friends from leaking your confidential and trusted communications. Only a wise choice of friends.
// What is your site name?
-$a->config['sitename'] = "Friendika Social Network";
+$a->config['sitename'] = "Friendica Social Network";
// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
// Be certain to create your own personal account before setting
id="svg2"
version="1.1"
inkscape:version="0.48.0 r9654"
- sodipodi:docname="friendika.svg"
- inkscape:export-filename="/home/meta/Documents/My random images/friendika.png"
+ sodipodi:docname="friendica.svg"
+ inkscape:export-filename="/home/meta/Documents/My random images/friendica.png"
inkscape:export-xdpi="80.552788"
inkscape:export-ydpi="80.552788">
<defs
*
* PROBE_DIASPORA has a bias towards returning Diaspora information
* while PROBE_NORMAL has a bias towards dfrn/zot - in the case where
- * an address (such as a Friendika address) supports more than one type
+ * an address (such as a Friendica address) supports more than one type
* of network.
*
*/
$o = '';
- // When used for private messages, we limit correspondence to mutual DFRN/Friendika friends and the selector
+ // When used for private messages, we limit correspondence to mutual DFRN/Friendica friends and the selector
// to one recipient. By default our selector allows multiple selects amongst all contacts.
$sql_extra = '';
'updated' => api_date(null),
'atom_updated' => datetime_convert('UTC','UTC','now',ATOM_TIME),
'language' => $user_info['language'],
- 'logo' => $a->get_baseurl()."/images/friendika-32.png",
+ 'logo' => $a->get_baseurl()."/images/friendica-32.png",
);
return $arr;
return null;
}
- // TODO - media uploads
+/*Waitman Gobble Mod*/
+ function api_statuses_mediap(&$a, $type) {
+ if (local_user()===false) {
+ logger('api_statuses_update: no user');
+ return false;
+ }
+ $user_info = api_get_user($a);
+
+ $_REQUEST['type'] = 'wall';
+ $_REQUEST['profile_uid'] = local_user();
+ $_REQUEST['api_source'] = true;
+ $txt = urldecode(requestdata('status'));
+
+ require_once('library/HTMLPurifier.auto.php');
+ require_once('include/html2bbcode.php');
+
+ if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) {
+ $txt = html2bb_video($txt);
+ $config = HTMLPurifier_Config::createDefault();
+ $config->set('Cache.DefinitionImpl', null);
+ $purifier = new HTMLPurifier($config);
+ $txt = $purifier->purify($txt);
+ }
+ $txt = html2bbcode($txt);
+
+ $a->argv[1]=$user_info['screen_name']; //should be set to username?
+
+ $_REQUEST['hush']='yeah'; //tell wall_upload function to return img info instead of echo
+ require_once('mod/wall_upload.php');
+ $bebop = wall_upload_post($a);
+
+ //now that we have the img url in bbcode we can add it to the status and insert the wall item.
+ $_REQUEST['body']=$txt."\n\n".$bebop;
+ require_once('mod/item.php');
+ item_post($a);
+
+ // this should output the last post (the one we just posted).
+ return api_status_show($a,$type);
+ }
+ api_register_func('api/statuses/mediap','api_statuses_mediap', true);
+/*Waitman Gobble Mod*/
+
+
function api_statuses_update(&$a, $type) {
if (local_user()===false) {
logger('api_statuses_update: no user');
if (local_user()===false) return false;
$user_info = api_get_user($a);
- // in friendika starred item are private
+ // in friendica starred item are private
// return favorites only for self
logger('api_favorites: self:' . $user_info['self']);
function api_statusnet_config(&$a,$type) {
$name = $a->config['sitename'];
$server = $a->get_hostname();
- $logo = $a->get_baseurl() . '/images/friendika-64.png';
+ $logo = $a->get_baseurl() . '/images/friendica-64.png';
$email = $a->config['admin_email'];
$closed = (($a->config['register_policy'] == REGISTER_CLOSED) ? 'true' : 'false');
$private = (($a->config['system']['block_public']) ? 'true' : 'false');
function diaspora2bb($s) {
// for testing purposes: Collect raw markdown articles
- $file = tempnam("/tmp/friendica/", "markdown");
- file_put_contents($file, $s);
+ // $file = tempnam("/tmp/friendica/", "markdown");
+ // file_put_contents($file, $s);
$s = html_entity_decode($s,ENT_COMPAT,'UTF-8');
// Check for [quote] text
// handle nested quotes
$endlessloop = 0;
+<<<<<<< HEAD
while ((strpos($Text, "[/quote]") !== false) and (strpos($Text, "[quote]") !== false) and (++$endlessloop < 20))
+=======
+ while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote]") !== false and (++$endlessloop < 20))
+>>>>>>> upstream/master
$Text = preg_replace("/\[quote\](.*?)\[\/quote\]/ism","$QuoteLayout", $Text);
// Check for [quote=Author] text
// handle nested quotes
$endlessloop = 0;
+<<<<<<< HEAD
while ((strpos($Text, "[/quote]")!== false) and (strpos($Text, "[quote=") !== false) and (++$endlessloop < 20))
+=======
+ while (strpos($Text, "[/quote]") !== false and strpos($Text, "[quote=") !== false and (++$endlessloop < 20))
+>>>>>>> upstream/master
$Text = preg_replace("/\[quote=[\"\']*(.*?)[\"\']*\](.*?)\[\/quote\]/ism",
"<blockquote><strong>" . $t_wrote . "</strong> $2</blockquote>",
$Text);
// perhaps we were already sharing with this person. Now they're sharing with us.
// That makes us friends.
- if($contact['rel'] == CONTACT_IS_FOLLOWER) {
+ if($contact['rel'] == CONTACT_IS_FOLLOWER && $importer['page-flags'] != PAGE_COMMUNITY) {
q("UPDATE `contact` SET `rel` = %d, `writable` = 1 WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval(CONTACT_IS_FRIEND),
intval($contact['id']),
return;
}
+function diaspora_post_allow($importer,$contact) {
+ if(($contact['blocked']) || ($contact['readonly']))
+ return false;
+ if($contact['rel'] == CONTACT_IS_SHARING || $contact['rel'] == CONTACT_IS_FRIEND)
+ return true;
+ if($contact['rel'] == CONTACT_IS_FOLLOWER)
+ if($importer['page-flags'] == PAGE_COMMUNITY)
+ return true;
+ return false;
+}
+
+
function diaspora_post($importer,$xml) {
$a = get_app();
if(! $contact)
return;
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_post: Ignoring this author.');
return 202;
}
if(! $contact)
return;
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_reshare: Ignoring this author: ' . $diaspora_handle . ' ' . print_r($xml,true));
return 202;
}
if(! $contact)
return;
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_asphoto: Ignoring this author.');
return 202;
}
return;
}
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_comment: Ignoring this author.');
return 202;
}
return;
}
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_photo: Ignoring this author.');
return 202;
}
return;
}
- if(($contact['rel'] == CONTACT_IS_FOLLOWER) || ($contact['blocked']) || ($contact['readonly'])) {
+ if(! diaspora_post_allow($importer,$contact)) {
logger('diaspora_like: Ignoring this author.');
return 202;
}
$subject = sprintf( t('New mail received at %s'),$sitename);
$preamble = sprintf( t('%s sent you a new private message at %s.'),$params['source_name'],$sitename);
- $epreamble = sprintf( t('%s sent you a private message.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('%s sent you %s.'),'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to your private messages.');
- $tsitelink = sprintf( $sitelink, $siteurl . '/message' );
- $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '/message">' . $sitename . '</a>');
- $itemlink = $siteurl . '/message';
+ $tsitelink = sprintf( $sitelink, $siteurl . '/message/' . $params['item']['id'] );
+ $hsitelink = sprintf( $sitelink, '<a href="' . $siteurl . '/message/' . $params['item']['id'] . '">' . $sitename . '</a>');
+ $itemlink = $siteurl . '/message/' . $params['item']['id'];
}
if($params['type'] == NOTIFY_COMMENT) {
$subject = sprintf( t('%s commented on an item at %s'), $params['source_name'], $sitename);
$preamble = sprintf( t('%s commented on an item/conversation you have been following.'), $params['source_name']);
- $epreamble = sprintf( t('%s commented on an item/conversation you have been following.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('%s commented in %s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a watched conversation') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
if($params['type'] == NOTIFY_WALL) {
$preamble = $subject = sprintf( t('%s posted to your profile wall at %s') , $params['source_name'], $sitename);
- $epreamble = sprintf( t('%s posted to your profile wall') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('%s posted to %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your profile wall.') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
if($params['type'] == NOTIFY_TAGSELF) {
$preamble = $subject = sprintf( t('%s tagged you at %s') , $params['source_name'], $sitename);
- $epreamble = sprintf( t('%s tagged you') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('%s %s.') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=' . $params['link'] . ']' . t('tagged you') . '[/url]');
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
if($params['type'] == NOTIFY_TAGSHARE) {
$preamble = $subject = sprintf( t('%s tagged your post at %s') , $params['source_name'], $sitename);
- $epreamble = sprintf( t('%s tagged your post') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('%s tagged %s') , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('your post') . '[/url]' );
$sitelink = t('Please visit %s to view and/or reply to the conversation.');
$tsitelink = sprintf( $sitelink, $siteurl );
if($params['type'] == NOTIFY_INTRO) {
$subject = sprintf( t('Introduction received at %s'), $sitename);
$preamble = sprintf( t('You\'ve received an introduction from \'%s\' at %s'), $params['source_name'], $sitename);
- $epreamble = sprintf( t('You\'ve received an introduction from %s'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
+ $epreamble = sprintf( t('You\'ve received %s from %s.'), '[url=$itemlink]' . t('an introduction') . '[/url]' , '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = sprintf( t('You may visit their profile at %s'),$params['source_link']);
$sitelink = t('Please visit %s to approve or reject the introduction.');
if($params['type'] == NOTIFY_SUGGEST) {
$subject = sprintf( t('Friend suggestion received at %s'), $sitename);
$preamble = sprintf( t('You\'ve received a friend suggestion from \'%s\' at %s'), $params['source_name'], $sitename);
- $epreamble = sprintf( t('You\'ve received a friend suggestion for %s from %s'),
+ $epreamble = sprintf( t('You\'ve received %s for %s from %s.'),
+ '[url=$itemlink]' . t('a friend suggestion') . '[/url]',
'[url=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/url]',
'[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]');
$body = t('Name:') . ' ' . $params['item']['name'] . "\n";
require_once('include/html2bbcode.php');
+ do {
+ $dups = false;
+ $hash = random_string();
+ $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1",
+ dbesc($hash));
+ if(count($r))
+ $dups = true;
+ } while($dups == true);
+
+
+
+
// create notification entry in DB
- $r = q("insert into notify (name,url,photo,date,msg,uid,link,type,verb,otype)
+ $r = q("insert into notify (hash,name,url,photo,date,uid,link,type,verb,otype)
values('%s','%s','%s','%s','%s',%d,'%s',%d,'%s','%s')",
+ dbesc($hash),
dbesc($params['source_name']),
dbesc($params['source_link']),
dbesc($params['source_photo']),
dbesc(datetime_convert()),
- dbesc($epreamble),
intval($params['uid']),
dbesc($itemlink),
intval($params['type']),
dbesc($params['otype'])
);
+ $r = q("select id from notify where hash = '%s' and uid = %d limit 1",
+ dbesc($hash),
+ intval($params['uid'])
+ );
+ if($r)
+ $notify_id = $r[0]['id'];
+ else
+ return;
+
+ $itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id;
+ $msg = replace_macros($epreamble,array('$itemlink' => $itemlink));
+ $r = q("update notify set msg = '%s' where id = %d and uid = %d limit 1",
+ dbesc($msg),
+ intval($notify_id),
+ intval($params['uid'])
+ );
+
+
+
// send email notification if notification preferences permit
require_once('bbcode.php');
node2bbcode($doc, 'a', array('href'=>'/(.+)/'), '[url=$1]', '[/url]');
- node2bbcode($doc, 'img', array('src'=>'/(.+)/', 'width'=>'/(\d+)/', 'height'=>'/(\d+)/'), '[img$2x$3]$1', '[/img]');
+ node2bbcode($doc, 'img', array('src'=>'/(.+)/', 'width'=>'/(\d+)/', 'height'=>'/(\d+)/'), '[img=$2x$3]$1', '[/img]');
node2bbcode($doc, 'img', array('src'=>'/(.+)/'), '[img]$1', '[/img]');
}
$force_parent = false;
- if($contact['network'] === NETWORK_OSTATUS) {
- $force_parent = true;
+ if($contact['network'] === NETWORK_OSTATUS || stristr($contact['url'],'twitter.com')) {
+ if($contact['network'] === NETWORK_OSTATUS)
+ $force_parent = true;
if(strlen($datarray['title']))
unset($datarray['title']);
$r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d",
if(! is_array($contact))
return;
- if($contact['network'] === NETWORK_OSTATUS || stristr($permalink,'twitter.com')) {
+ if($contact['network'] === NETWORK_OSTATUS || stristr($contact['url'],'twitter.com')) {
if(strlen($datarray['title']))
unset($datarray['title']);
$datarray['last-child'] = 1;
}
if($is_reply) {
-
$community = false;
if($importer['page-flags'] == PAGE_COMMUNITY) {
$sql_extra = '';
$community = true;
- logger('local_delivery: community reply');
+ logger('local_delivery: possible community reply');
}
else
$sql_extra = " and contact.self = 1 and item.wall = 1 ";
// was the top-level post for this reply written by somebody on this site?
// Specifically, the recipient?
- $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`,
+ $is_a_remote_comment = false;
+
+ $r = q("select `item`.`id`, `item`.`uri`, `item`.`tag`, `item`.`forum_mode`,`item`.`origin`,`item`.`wall`,
`contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item`
LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id`
WHERE `item`.`uri` = '%s' AND `item`.`parent-uri` = '%s'
dbesc($parent_uri),
intval($importer['importer_uid'])
);
+ if($r && count($r))
+ $is_a_remote_comment = true;
+
+ // Does this have the characteristics of a community comment?
+ // If it's a reply to a wall post on a community page it's a
+ // valid community comment. Also forum_mode makes it valid for sure.
+ // If neither, it's not.
+
+ if($is_a_remote_comment && $community) {
+ if((! $r[0]['forum_mode']) && (! $r[0]['wall'])) {
+ $is_a_remote_comment = false;
+ logger('local_delivery: not a community reply');
+ }
+ }
- if($r && count($r)) {
-
+ if($is_a_remote_comment) {
logger('local_delivery: received remote comment');
$is_like = false;
// remote reply to our post. Import and then notify everybody else.
$datarray = get_atom_elements($feed,$item);
- // TODO: make this next part work against both delivery threads of a community post
+ // TODO: make this next part work against both delivery threads of a community post
// if((! link_compare($datarray['author-link'],$importer['url'])) && (! $community)) {
// logger('local_delivery: received relay claiming to be from ' . $importer['url'] . ' however comment author url is ' . $datarray['author-link'] );
}
}
+
return 0;
// NOTREACHED
}
if($_SESSION['page_flags'] == PAGE_NORMAL) {
$nav['introductions'] = array('notifications/intros', t('Introductions'), "", t('Friend Requests'));
$nav['notifications'] = array('notifications', t('Notifications'), "", t('Notifications'));
- $nav['notifications']['all']=array('notifications/network', t('See all notifications', "", ""));
+ $nav['notifications']['all']=array('notifications/system', t('See all notifications'), "", "");
+ $nav['notifications']['mark'] = array('', t('Mark all system notifications seen'), '','');
}
$banner = get_config('system','banner');
if($banner === false)
- $banner .= '<a href="http://friendica.com"><img id="logo-img" src="images/friendika-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendica.com">Friendica</a></span>';
+ $banner .= '<a href="http://friendica.com"><img id="logo-img" src="images/friendica-32.png" alt="logo" /></a><span id="logo-text"><a href="http://friendica.com">Friendica</a></span>';
$tpl = get_markup_template('nav.tpl');
$update = true;
break;
}
-// if((! $update) && (! $force))
-// continue;
+ if((! $update) && (! $force))
+ continue;
}
// Check to see if we are running out of memory - if so spawn a new process and kill this one
|| ($contact['network'] === NETWORK_DIASPORA)
|| ($contact['network'] === NETWORK_FEED) ) {
- // Upgrading DB fields from an older Friendika version
+ // Upgrading DB fields from an older Friendica version
// Will only do this once per notify-enabled OStatus contact
// or if relationship changes
var $done = false;
var $d = false;
var $lang = null;
-
+ var $debug=false;
private function _preg_error(){
switch(preg_last_error()){
return $s;
}
+ private function _str_replace($str){
+ #$this->search,$this->replace,
+ $searchs = $this->search;
+ foreach($searchs as $search){
+ $search = "|".preg_quote($search)."(\|[a-zA-Z0-9_]*)*|";
+ $m = array();
+ if (preg_match_all($search, $str,$m)){
+ foreach ($m[0] as $match){
+ $toks = explode("|",$match);
+ $val = $this->_get_var($toks[0]);
+ for($k=1; $k<count($toks); $k++){
+ $func = $toks[$k];
+ if (function_exists($func)) $val = $func($val);
+ }
+ if (count($toks)>1){
+ $str = str_replace( $match, $val, $str);
+ }
+ }
+ }
+
+ }
+ return str_replace($this->search,$this->replace, $str);
+ }
+
public function replace($s, $r) {
$this->r = $r;
$os = ""; $count=0;
while($os!=$s && $count<10){
$os=$s; $count++;
- $s = str_replace($this->search,$this->replace, $s);
+ $s = $this->_str_replace($s);
}
return template_unescape($s);
}
* @Parameter: string $s
*
* Returns string
+ *
+ * It is expected that this function will be called using HTML text.
+ * We will escape text between HTML pre and code blocks from being
+ * processed.
+ *
+ * At a higher level, the bbcode [nosmile] tag can be used to prevent this
+ * function from being executed by the prepare_text() routine when preparing
+ * bbcode source for HTML display
+ *
*/
if(! function_exists('smilies')) {
function smilies($s, $sample = false) {
$a = get_app();
+ $s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_encode',$s);
+ $s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_encode',$s);
+
$texts = array(
'<3',
'</3',
'<img src="' . $a->get_baseurl() . '/images/smiley-facepalm.gif" alt=":facepalm" />',
'<img src="' . $a->get_baseurl() . '/images/smiley-bangheaddesk.gif" alt=":headdesk" />',
'<a href="http://project.friendika.com">~friendika <img src="' . $a->get_baseurl() . '/images/friendika-16.png" alt="~friendika" /></a>',
- '<a href="http://friendica.com">~friendica <img src="' . $a->get_baseurl() . '/images/friendika-16.png" alt="~friendica" /></a>',
+ '<a href="http://friendica.com">~friendica <img src="' . $a->get_baseurl() . '/images/friendica-16.png" alt="~friendica" /></a>',
'<a href="http://diasporafoundation.org">Diaspora<img src="' . $a->get_baseurl() . '/images/diaspora.png" alt="Diaspora*" /></a>',
);
else {
$s = str_replace($params['texts'],$params['icons'],$params['string']);
}
-
+
+ $s = preg_replace_callback('/<pre>(.*?)<\/pre>/ism','smile_decode',$s);
+ $s = preg_replace_callback('/<code>(.*?)<\/code>/ism','smile_decode',$s);
+
return $s;
}}
+function smile_encode($m) {
+ return(str_replace($m[1],base64url_encode($m[1]),$m[0]));
+}
+
+function smile_decode($m) {
+ return(str_replace($m[1],base64url_decode($m[1]),$m[0]));
+}
+
+
if(! function_exists('day_translate')) {
/**
- * Friendika people autocomplete
+ * Friendica people autocomplete
*
* require jQuery, jquery.textareas
*/
/* notifications template */
var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
var notifications_all = unescape($('<div>').append( $("#nav-notifications-see-all").clone() ).html()); //outerHtml hack
+ var notifications_mark = unescape($('<div>').append( $("#nav-notifications-mark-all").clone() ).html()); //outerHtml hack
var notifications_empty = unescape($("#nav-notifications-menu").html());
/* nav update event */
$("#nav-notifications-linkmenu").addClass("on");
nnm = $("#nav-notifications-menu");
- nnm.html(notifications_all);
+ nnm.html(notifications_all + notifications_mark);
//nnm.attr('popup','true');
eNotif.children("note").each(function(){
}
}
+function notifyMarkAll() {
+ $.get('notify/mark/all', function(data) {
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,1000);
+ });
+}
+
+
function setupFieldRichtext(){
tinyMCE.init({
theme : "advanced",
}
}
- // fix for friendika redirect system
+ // fix for friendica redirect system
$http_url = substr($http_url, 0, strpos($http_url,$parameters['q'])+strlen($parameters['q']));
unset( $parameters['q'] );
$a->set_pager_total($r[0]['total']);
- $tpl = get_markup_template("contacts-top.tpl");
- $o .= replace_macros($tpl,array(
- '$header' => t('Contacts') . (($nets) ? ' - ' . network_to_name($nets) : ''),
- '$tabs' => $t,
- '$total' => $r[0]['total'],
- '$search' => $search_hdr,
- '$desc' => t('Search your contacts'),
- '$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""),
- '$submit' => t('Find'),
- '$cmd' => $a->cmd
-
- ));
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `pending` = 0 $sql_extra $sql_extra2 ORDER BY `name` ASC LIMIT %d , %d ",
intval($_SESSION['uid']),
intval($a->pager['itemspage'])
);
- if(count($r)) {
+ $contacts = array();
- $tpl = get_markup_template("contact_template.tpl");
+ if(count($r)) {
foreach($r as $rr) {
if($rr['self'])
}
- $o .= replace_macros($tpl, array(
- '$img_hover' => sprintf( t('Visit %s\'s profile [%s]'),$rr['name'],$rr['url']),
- '$edit_hover' => t('Edit contact'),
- '$contact_photo_menu' => contact_photo_menu($rr),
- '$id' => $rr['id'],
- '$alt_text' => $alt_text,
- '$dir_icon' => $dir_icon,
- '$thumb' => $rr['thumb'],
- '$name' => $rr['name'],
- '$username' => $rr['name'],
- '$sparkle' => $sparkle,
- '$url' => $url
- ));
+ $contacts[] = array(
+ 'img_hover' => sprintf( t('Visit %s\'s profile [%s]'),$rr['name'],$rr['url']),
+ 'edit_hover' => t('Edit contact'),
+ 'photo_menu' => contact_photo_menu($rr),
+ 'id' => $rr['id'],
+ 'alt_text' => $alt_text,
+ 'dir_icon' => $dir_icon,
+ 'thumb' => $rr['thumb'],
+ 'name' => $rr['name'],
+ 'username' => $rr['name'],
+ 'sparkle' => $sparkle,
+ 'url' => $url,
+ 'item' => $rr,
+ );
}
- $o .= '<div id="contact-edit-end"></div>';
+
}
- $o .= paginate($a);
+
+ $tpl = get_markup_template("contacts-template.tpl");
+ $o .= replace_macros($tpl,array(
+ '$header' => t('Contacts') . (($nets) ? ' - ' . network_to_name($nets) : ''),
+ '$tabs' => $t,
+ '$total' => $r[0]['total'],
+ '$search' => $search_hdr,
+ '$desc' => t('Search your contacts'),
+ '$finding' => (strlen($search) ? t('Finding: ') . "'" . $search . "'" : ""),
+ '$submit' => t('Find'),
+ '$cmd' => $a->cmd,
+ '$contacts' => $contacts,
+ '$paginate' => paginate($a),
+
+ ));
+
return $o;
}
$message = unxmlify($xml->message); // human readable text of what may have gone wrong.
switch($status) {
case 0:
- notice( t("Confirmation completed successfully.") . EOL);
+ info( t("Confirmation completed successfully.") . EOL);
if(strlen($message))
notice( t('Remote site reported: ') . $message . EOL);
break;
'$no' => t('No'),
'$add_note' => t('Add a personal note:'),
'$page_desc' => $page_desc,
- '$friendika' => t('Friendica'),
+ '$friendica' => t('Friendica'),
'$statusnet' => t('StatusNet/Federated Social Web'),
'$diaspora' => t('Diaspora'),
'$diasnote' => t('- please share from your own site as noted above'),
$p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
if(strlen(get_config('system','directory_submit_url')))
- $x = fetch_url('http://dir.friendika.com/lsearch?f=' . $p . '&search=' . urlencode($search));
+ $x = fetch_url('http://dir.friendica.com/lsearch?f=' . $p . '&search=' . urlencode($search));
//TODO fallback local search if global dir not available.
// else
return;
}
- // Switch to text mod interface if we have more than 'n' contacts or group members
+ // Switch to text mode interface if we have more than 'n' contacts or group members
$switchtotext = get_pconfig(local_user(),'system','groupedit_image_limit');
if($switchtotext === false)
$params['p'] = $a->pager['page'];
if(strlen(get_config('system','directory_submit_url')))
- $x = post_url('http://dir.friendika.com/msearch', $params);
+ $x = post_url('http://dir.friendica.com/msearch', $params);
else
$x = post_url($a->get_baseurl() . '/msearch', $params);
$o = '';
$tabs = array(
+ array(
+ 'label' => t('System'),
+ 'url'=>$a->get_baseurl() . '/notifications/system',
+ 'sel'=> (($a->argv[1] == 'system') ? 'active' : ''),
+ ),
array(
'label' => t('Network'),
'url'=>$a->get_baseurl() . '/notifications/network',
'$notif_content' => $notif_content,
));
+ } else if (($a->argc > 1) && ($a->argv[1] == 'system')) {
+
+ $notif_tpl = get_markup_template('notifications.tpl');
+
+ $not_tpl = get_markup_template('notify.tpl');
+ require_once('include/bbcode.php');
+
+ $r = q("SELECT * from notify where uid = %d and seen = 0 order by date desc",
+ intval(local_user())
+ );
+
+ if (count($r) > 0) {
+ foreach ($r as $it) {
+ $notif_content .= replace_macros($not_tpl,array(
+ '$item_link' => $a->get_baseurl().'/notify/view/'. $it['id'],
+ '$item_image' => $it['photo'],
+ '$item_text' => strip_tags(bbcode($it['msg'])),
+ '$item_when' => relative_date($it['date'])
+ ));
+ }
+ } else {
+ $notif_content .= t('No more system notifications.');
+ }
+
+ $o .= replace_macros($notif_tpl,array(
+ '$notif_header' => t('System'),
+ '$tabs' => $tabs,
+ '$notif_content' => $notif_content,
+ ));
+
} else if (($a->argc > 1) && ($a->argv[1] == 'personal')) {
$notif_tpl = get_markup_template('notifications.tpl');
--- /dev/null
+<?php
+
+
+function notify_init(&$a) {
+ if(! local_user())
+ return;
+
+ if($a->argc > 2 && $a->argv[1] === 'view' && intval($a->argv[2])) {
+ $r = q("select * from notify where id = %d and uid = %d limit 1",
+ intval($a->argv[2]),
+ intval(local_user())
+ );
+ if(count($r)) {
+ q("update notify set seen = 1 where id = %d and uid = %d limit 1",
+ intval($a->argv[2]),
+ intval(local_user())
+ );
+ goaway($r[0]['link']);
+ }
+
+ goaway($a->get_baseurl());
+ }
+
+ if($a->argc > 2 && $a->argv[1] === 'mark' && $a->argv[2] === 'all' ) {
+ $r = q("update notify set seen = 1 where uid = %d",
+ intval(local_user())
+ );
+ $j = json_encode(array('result' => ($r) ? 'success' : 'fail'));
+ echo $j;
+ killme();
+ }
+
+}
+
+
+function notify_content(&$a) {
+ if(! local_user())
+ return login();
+}
\ No newline at end of file
function photos_post(&$a) {
- logger('mod-photos: photos_post: begin' , 'LOGGER_DEBUG');
+ logger('mod-photos: photos_post: begin' , LOGGER_DEBUG);
logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA);
$album = notags(trim($_REQUEST['album']));
$newalbum = notags(trim($_REQUEST['newalbum']));
- logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , 'LOGGER_DEBUG');
+ logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG);
if(! strlen($album)) {
if(strlen($newalbum))
return;
}
- logger('mod/photos.php: photos_post(): loading the contents of ' . $src , 'LOGGER_DEBUG');
+ logger('mod/photos.php: photos_post(): loading the contents of ' . $src , LOGGER_DEBUG);
$imagedata = @file_get_contents($src);
$ph = new Photo($imagedata);
if(! $ph->is_valid()) {
- logger('mod/photos.php: photos_post(): unable to process image' , 'LOGGER_DEBUG');
+ logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG);
notice( t('Unable to process image.') . EOL );
@unlink($src);
$foo = 0;
$r = $ph->store($page_owner_uid, $visitor, $photo_hash, $filename, $album, 0 , 0, $str_contact_allow, $str_group_allow, $str_contact_deny, $str_group_deny);
if(! $r) {
- logger('mod/photos.php: photos_post(): image store failed' , 'LOGGER_DEBUG');
+ logger('mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG);
notice( t('Image upload failed.') . EOL );
killme();
}
function ping_init(&$a) {
header("Content-type: text/xml");
+
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<result>";
$xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">";
if(local_user()){
+ $z = q("select * from notify where seen = 0 and uid = %d
+ order by date desc",
+ intval(local_user())
+ );
+
+
+
$tags = array();
$comments = array();
$likes = array();
}
- $intros1 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`,
+ $intros1 = q("SELECT `intro`.`id`, `intro`.`datetime`,
`fcontact`.`name`, `fcontact`.`url`, `fcontact`.`photo`
FROM `intro` LEFT JOIN `fcontact` ON `intro`.`fid` = `fcontact`.`id`
WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`fid`!=0",
intval(local_user())
);
- $intros2 = q("SELECT COUNT(`intro`.`id`) AS `total`, `intro`.`id`, `intro`.`datetime`,
+ $intros2 = q("SELECT `intro`.`id`, `intro`.`datetime`,
`contact`.`name`, `contact`.`url`, `contact`.`photo`
FROM `intro` LEFT JOIN `contact` ON `intro`.`contact-id` = `contact`.`id`
WHERE `intro`.`uid` = %d AND `intro`.`blocked` = 0 AND `intro`.`ignore` = 0 AND `intro`.`contact-id`!=0",
intval(local_user())
);
- $intro = $intros1[0]['total'] + $intros2[0]['total'];
- if ($intros1[0]['total']==0) $intros1=Array();
- if ($intros2[0]['total']==0) $intros2=Array();
+ $intro = count($intros1) + count($intros2);
$intros = $intros1+$intros2;
$tot = $mail+$intro+$register+count($comments)+count($likes)+count($dislikes)+count($friends)+count($posts)+count($tags);
echo ' <notif count="'.$tot.'">';
+
+ require_once('include/bbcode.php');
+
+ if(count($z)) {
+ foreach($z as $zz) {
+ echo xmlize($a->get_baseurl() . '/notify/' . $zz['id'], $zz['name'],$zz['url'],$zz['photo'],relative_date($zz['date']), bbcode($zz['msg']));
+
+ }
+ }
+
+
+
+
+
+/*
+
if ($intro>0){
foreach ($intros as $i) {
echo xmlize( $a->get_baseurl().'/notifications/intros/'.$i['id'], $i['name'], $i['url'], $i['photo'], relative_date($i['datetime']), t("{0} wants to be your friend") );
};
}
+*/
+
echo " </notif>";
}
echo " <sysmsgs>";
<?php
+require_once('include/contact_selectors.php');
function viewcontacts_init(&$a) {
return;
}
- $o .= '<h3>' . t('View Contacts') . '</h3>';
-
$r = q("SELECT COUNT(*) as `total` FROM `contact` WHERE `uid` = %d AND `blocked` = 0 AND `pending` = 0 AND `hidden` = 0 ",
intval($a->profile['uid'])
return $o;
}
- $tpl = get_markup_template("viewcontact_template.tpl");
+ $contacts = array();
foreach($r as $rr) {
if($rr['self'])
if($is_owner && ($rr['network'] === NETWORK_DFRN) && ($rr['rel']))
$url = 'redir/' . $rr['id'];
- $o .= replace_macros($tpl, array(
- '$id' => $rr['id'],
- '$alt_text' => sprintf( t('Visit %s\'s profile [%s]'), $rr['name'], $rr['url']),
- '$thumb' => $rr['thumb'],
- '$name' => substr($rr['name'],0,20),
- '$username' => $rr['name'],
- '$url' => $url
- ));
+ $contacts[] = array(
+ 'id' => $rr['id'],
+ 'img_hover' => sprintf( t('Visit %s\'s profile [%s]'), $rr['name'], $rr['url']),
+ 'thumb' => $rr['thumb'],
+ 'name' => substr($rr['name'],0,20),
+ 'username' => $rr['name'],
+ 'url' => $url,
+ 'sparkle' => '',
+ 'item' => $rr,
+ );
}
- $o .= '<div id="view-contact-end"></div>';
- $o .= paginate($a);
+ $tpl = get_markup_template("viewcontact_template.tpl");
+ $o .= replace_macros($tpl, array(
+ '$title' => t('View Contacts'),
+ '$contacts' => $contacts,
+ '$paginate' => paginate($a),
+ ));
+
return $o;
}
$basename = basename($filename);
- if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
- echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]\n\n";
- else
- echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />";
+
+/* mod Waitman Gobble NO WARRANTY */
+
+//if we get the signal then return the image url info in BBCODE, otherwise this outputs the info and bails (for the ajax image uploader on wall post)
+ if ($_REQUEST['hush']!='yeah') {
+
+ /*existing code*/
+ if(local_user() && intval(get_pconfig(local_user(),'system','plaintext')))
+ echo "\n\n" . '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]\n\n";
+ else
+ echo '<br /><br /><a href="' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '" ><img src="' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg\" alt=\"$basename\" /></a><br /><br />";
+ /*existing code*/
+
+ } else {
+ $m = '[url=' . $a->get_baseurl() . '/photos/' . $page_owner_nick . '/image/' . $hash . '][img]' . $a->get_baseurl() . "/photo/{$hash}-{$smallest}.jpg[/img][/url]";
+ return($m);
+ }
+/* mod Waitman Gobble NO WARRANTY */
killme();
// NOTREACHED
<?php
-define( 'UPDATE_VERSION' , 1122 );
+define( 'UPDATE_VERSION' , 1123 );
/**
*
}
+function update_1122() {
+q("ALTER TABLE `notify` ADD `hash` CHAR( 64 ) NOT NULL AFTER `id` ,
+ADD INDEX ( `hash` ) ");
+}
\ No newline at end of file
to extract strings from source files and join them with the existing .po file:
new strings are added, the existing are not overwritten.
-If you already translated Friendika using strings.php, you could import your old
+If you already translated Friendica using strings.php, you could import your old
translation to messages.po. Run:
$ php util/php2po.php view/<language>/strings.php
<div class="background"></div>
<div class="panel">
<div class="panel_in">
- <h1>Friendika Update</h1>
+ <h1>Friendica Update</h1>
<div class="panel_text"></div>
<div class="panel_actions">
<input type="button" value="$close" class="panel_action_close">
{{ if $canwrite }}
<div class="submit"><input type="submit" name="remoteupdate" value="$submit" /></div>
{{ else }}
- <h3>Your friendika installation is not writable by web server.</h3>
+ <h3>Your friendica installation is not writable by web server.</h3>
{{ if $canftp }}
<p>You can try to update via FTP</p>
{{ inc field_input.tpl with $field=$ftphost }}{{ endinc }}
<p id="dfrn-request-intro">
$page_desc<br />
<ul id="dfrn-request-networks">
-<li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
+<li><a href="http://friendica.com" title="$friendica">$friendica</a></li>
<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
</ul>
-<div class="contact-entry-wrapper" id="contact-entry-wrapper-$id" >
- <div class="contact-entry-photo-wrapper" >
- <div class="contact-entry-photo mframe" id="contact-entry-photo-$id"
- onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" >
+<div class="contact-wrapper" id="contact-entry-wrapper-$id" >
+ <div class="contact-photo-wrapper" >
+ <div class="contact-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
- <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a>
-
- <span onclick="openClose('contact-photo-menu-$id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$id">menu</span>
- <div class="contact-photo-menu" id="contact-photo-menu-$id">
- <ul>
- $contact_photo_menu
- </ul>
- </div>
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+ {{ if $contact.photo_menu }}
+ <a href="#" rel="#contact-photo-menu-$contact.id" class="contact-photo-menu-button icon s16 menu" id="contact-photo-menu-button-$contact.id">menu</a>
+ <ul class="contact-photo-menu menu-popup" id="contact-photo-menu-$contact.id">
+ $contact.photo_menu
+ </ul>
+ {{ endif }}
</div>
</div>
- <div class="contact-entry-photo-end" ></div>
- <div class="contact-entry-name" id="contact-entry-name-$id" >$name</div>
+ <div class="contact-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+ <div class="contact-details" id="contact-entry-url-$contact.id" >$contact.item.url</div>
+ <div class="contact-details" id="contact-entry-network-$contact.id" >$contact.item.network|network_to_name</div>
+
- <div class="contact-entry-end" ></div>
</div>
+
--- /dev/null
+<h1>$header{{ if $total }} ($total){{ endif }}</h1>
+
+{{ if $finding }}<h4>$finding</h4>{{ endif }}
+
+<div id="contacts-search-wrapper">
+<form id="contacts-search-form" action="$cmd" method="get" >
+<span class="contacts-search-desc">$desc</span>
+<input type="text" name="search" id="contacts-search" class="search-input" onfocus="this.select();" value="$search" />
+<input type="submit" name="submit" id="contacts-search-submit" value="$submit" />
+</form>
+</div>
+<div id="contacts-search-end"></div>
+
+$tabs
+
+
+{{ for $contacts as $contact }}
+ {{ inc contact_template.tpl }}{{ endinc }}
+{{ endfor }}
+<div id="contact-edit-end"></div>
+
+$paginate
+
+
+
+
+++ /dev/null
-<h1>$header{{ if $total }} ($total){{ endif }}</h1>
-
-$finding
-
-<div id="contacts-search-wrapper">
-<form id="contacts-search-form" action="$cmd" method="get" >
-<span class="contacts-search-desc">$desc</span>
-<input type="text" name="search" id="contacts-search" class="search-input" onfocus="this.select();" value="$search" />
-<input type="submit" name="submit" id="contacts-search-submit" value="$submit" />
-</form>
-</div>
-<div id="contacts-search-end"></div>
-
-$tabs
-
-
-
-
// URL adresy globálního adresáře.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - také zvaný jako pubsubhubbub URL. Tímto zajistíte doručování veřejných přízpěvků stejně rychle jako těch soukromých
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
<p id="dfrn-request-intro">
$page_desc<br />
<ul id="dfrn-request-networks">
-<li><a href="http://friendika.com" title="$friendika">$friendika</a></li>
+<li><a href="http://friendica.com" title="$friendica">$friendica</a></li>
<li><a href="http://joindiaspora.com" title="$diaspora">$diaspora</a> $diasnote</li>
<li><a href="http://ostatus.org" title="$public_net" >$statusnet</a></li>
</ul>
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
-<form action="$action" method="post">
+<form id="profile-jot-form" action="$action" method="post">
<div id="jot">
<div id="profile-jot-desc" class="jothidden" > </div>
<input name="title" id="jot-title" type="text" placeholder="$placeholdertitle" value="$title" class="jothidden" style="display:none">
<li><a id="profile-audio" onclick="jotAudioURL();return false;" title="$audio">$shortaudio</a></li>
<li><a id="profile-location" onclick="jotGetLocation();return false;" title="$setloc">$shortsetloc</a></li>
<li><a id="profile-nolocation" onclick="jotClearLocation();return false;" title="$noloc">$shortnoloc</a></li>
+ <li><a id="jot-preview-link" onclick="preview_post(); return false;" title="$preview">$preview</a></li>
$jotplugins
<li class="perms"><a id="jot-perms-icon" href="#profile-jot-acl-wrapper" class="icon s22 $lockstate $bang" title="$permset" ></a></li>
<li id="profile-rotator" class="loading" style="display: none"><img src="images/rotator.gif" alt="$wait" title="$wait" /></li>
</ul>
</div>
+
+ <div id="jot-preview-content" style="display:none;"></div>
<div style="display: none;">
<div id="profile-jot-acl-wrapper" style="width:auto;height:auto;overflow:auto;">
<li id="nav-notifications-linkmenu" class="nav-menu-icon"><a href="$nav.notifications.0" rel="#nav-notifications-menu" title="$nav.notifications.1"><span class="icon s22 notify">$nav.notifications.1</span></a>
<span id="notify-update" class="nav-notify"></span>
<ul id="nav-notifications-menu" class="menu-popup">
+ <li id="nav-notifications-mark-all"><a href="#" onclick="notifyMarkAll(); return false;">$nav.notifications.mark.1</a></li>
<li id="nav-notifications-see-all"><a href="$nav.notifications.all.0">$nav.notifications.all.1</a></li>
<li class="empty">$emptynotifications</li>
</ul>
--- /dev/null
+<div class="notif-item">
+ <a href="$item_link" target="friendica-notifications"><img src="$item_image" class="notif-image">$item_text <span class="notif-when">$item_when</span></a>
+</div>
\ No newline at end of file
// Location of global directory submission page.
-$a->config['system']['directory_submit_url'] = 'http://dir.friendika.com/submit';
-$a->config['system']['directory_search_url'] = 'http://dir.friendika.com/directory?search=';
+$a->config['system']['directory_submit_url'] = 'http://dir.friendica.com/submit';
+$a->config['system']['directory_search_url'] = 'http://dir.friendica.com/directory?search=';
// PuSH - aka pubsubhubbub URL. This makes delivery of public posts as fast as private posts
--- /dev/null
+
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
+ <div class="contact-entry-photo-wrapper" >
+ <div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
+
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+
+ {{ if $contact.photo_menu }}
+ <span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
+ <div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
+ <ul>
+ $contact.photo_menu
+ </ul>
+ </div>
+ {{ endif }}
+ </div>
+
+ </div>
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+
+ <div class="contact-entry-end" ></div>
+</div>
--- /dev/null
+
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
+ <div class="contact-entry-photo-wrapper" >
+ <div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
+
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+
+ {{ if $contact.photo_menu }}
+ <span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
+ <div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
+ <ul>
+ $contact.photo_menu
+ </ul>
+ </div>
+ {{ endif }}
+ </div>
+
+ </div>
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+
+ <div class="contact-entry-end" ></div>
+</div>
--- /dev/null
+
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
+ <div class="contact-entry-photo-wrapper" >
+ <div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
+
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+
+ {{ if $contact.photo_menu }}
+ <span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
+ <div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
+ <ul>
+ $contact.photo_menu
+ </ul>
+ </div>
+ {{ endif }}
+ </div>
+
+ </div>
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+
+ <div class="contact-entry-end" ></div>
+</div>
// Quattro Theme LESS file
// "Echo" palette from Inkscape
+@Yellow1 : #fce94f;
@Blue1:rgb(25,174,255);
@Blue2:rgb(0,132,200);
@Blue3:rgb(0,92,148);
@Green1:rgb(204,255,66);
@Green2:rgb(154,222,0);
@Green3:rgb(0,145,0);
+@Green4:rgb(221,255,221);
@Purple1:rgb(241,202,255);
@Purple2:rgb(215,108,255);
@Purple3:rgb(186,0,255);
@NoticeBackgroundColor: #511919;
@ThreadBackgroundColor: #f6f7f8;
+@ShinyBorderColor: @Green4;
@CommentBoxEmptyColor: @Grey3;
@CommentBoxEmptyBorderColor: @Grey3;
@JotPermissionUnlockBackgroundColor: @Grey2;
@JotPermissionLockBackgroundColor: @Grey4;
@JotLoadingBackgroundColor: @Grey1;
+@JotPreviewBackgroundColor: @Green4;
+++ /dev/null
-
-<div class="contact-wrapper" id="contact-entry-wrapper-$id" >
- <div class="contact-photo-wrapper" >
- <div class="contact-photo mframe" id="contact-entry-photo-$id"
- onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" >
-
- <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a>
-
- <a href="#" rel="#contact-photo-menu-$id" class="contact-photo-menu-button icon s16 menu" id="contact-photo-menu-button-$id">menu</a>
- <ul class="contact-photo-menu menu-popup" id="contact-photo-menu-$id">
- $contact_photo_menu
- </ul>
-
- </div>
-
- </div>
- <div class="contact-name" id="contact-entry-name-$id" >$name</div>
-
-
-</div>
-
.icon.s10.unlock {
background-image: url("../../../images/icons/10/unlock.png");
}
+.icon.s10.type-unkn {
+ background-image: url("../../../images/icons/10/zip.png");
+}
+.icon.s10.type-audio {
+ background-image: url("../../../images/icons/10/audio.png");
+}
+.icon.s10.type-video {
+ background-image: url("../../../images/icons/10/video.png");
+}
+.icon.s10.type-image {
+ background-image: url("../../../images/icons/10/image.png");
+}
+.icon.s10.type-text {
+ background-image: url("../../../images/icons/10/text.png");
+}
.icon.s10.text {
padding: 2px 0px 0px 15px;
}
.icon.s16.unlock {
background-image: url("../../../images/icons/16/unlock.png");
}
+.icon.s16.type-unkn {
+ background-image: url("../../../images/icons/16/zip.png");
+}
+.icon.s16.type-audio {
+ background-image: url("../../../images/icons/16/audio.png");
+}
+.icon.s16.type-video {
+ background-image: url("../../../images/icons/16/video.png");
+}
+.icon.s16.type-image {
+ background-image: url("../../../images/icons/16/image.png");
+}
+.icon.s16.type-text {
+ background-image: url("../../../images/icons/16/text.png");
+}
.icon.s16.text {
padding: 4px 0px 0px 20px;
}
.icon.s22.unlock {
background-image: url("../../../images/icons/22/unlock.png");
}
+.icon.s22.type-unkn {
+ background-image: url("../../../images/icons/22/zip.png");
+}
+.icon.s22.type-audio {
+ background-image: url("../../../images/icons/22/audio.png");
+}
+.icon.s22.type-video {
+ background-image: url("../../../images/icons/22/video.png");
+}
+.icon.s22.type-image {
+ background-image: url("../../../images/icons/22/image.png");
+}
+.icon.s22.type-text {
+ background-image: url("../../../images/icons/22/text.png");
+}
.icon.s22.text {
padding: 10px 0px 0px 25px;
}
.icon.s48.unlock {
background-image: url("../../../images/icons/48/unlock.png");
}
+.icon.s48.type-unkn {
+ background-image: url("../../../images/icons/48/zip.png");
+}
+.icon.s48.type-audio {
+ background-image: url("../../../images/icons/48/audio.png");
+}
+.icon.s48.type-video {
+ background-image: url("../../../images/icons/48/video.png");
+}
+.icon.s48.type-image {
+ background-image: url("../../../images/icons/48/image.png");
+}
+.icon.s48.type-text {
+ background-image: url("../../../images/icons/48/text.png");
+}
/* global */
body {
font-family: Liberation Sans, helvetica, arial, clean, sans-serif;
#contact-block {
overflow: auto;
height: auto;
+ /*.contact-block-div { width:60px; height: 60px; }*/
+
}
#contact-block .contact-block-h4 {
float: left;
}
#contact-block .contact-block-content {
clear: both;
- overflow: auto;
+ overflow: idden;
height: auto;
}
#contact-block .contact-block-link {
}
#contact-block .contact-block-link img {
widht: 48px;
- height: 58px;
+ height: 48px;
+}
+/* mail view */
+.mail-conv-sender, .mail-conv-detail {
+ float: left;
+}
+.mail-conv-detail {
+ margin-left: 20px;
+ width: 500px;
+}
+.mail-conv-subject {
+ font-size: 1.4em;
+ margin: 10px 0;
+}
+.mail-conv-outside-wrapper-end {
+ clear: both;
+}
+.mail-conv-outside-wrapper {
+ margin-top: 30px;
+}
+.mail-conv-delete-wrapper {
+ float: right;
+ margin-right: 30px;
+ margin-top: 15px;
+}
+.mail-conv-break {
+ clear: both;
+}
+.mail-conv-delete-icon {
+ border: none;
}
/* group member */
#contact-edit-drop-link, .mail-list-delete-wrapper, .group-delete-wrapper {
position: relative;
top: -50px;
}
+/*
#group-members {
- margin-top: 20px;
- padding: 10px;
- height: 250px;
- overflow: auto;
- border: 1px solid #ddd;
+ margin-top: 20px;
+ padding: 10px;
+ height: 250px;
+ overflow: auto;
+ border: 1px solid #ddd;
}
#group-members-end {
- clear: both;
+ clear: both;
}
#group-all-contacts {
- padding: 10px;
- height: 450px;
- overflow: auto;
- border: 1px solid #ddd;
+ padding: 10px;
+ height: 450px;
+ overflow: auto;
+ border: 1px solid #ddd;
}
#group-all-contacts-end {
- clear: both;
- margin-bottom: 10px;
+ clear: both;
+ margin-bottom: 10px;
}
.contact-block-div {
- float: left;
- width: 52px;
- height: 52px;
-}
+ float: left;
+ width: 60px;
+ height: 60px;
+}*/
/* widget */
.widget {
margin-bottom: 2em;
padding: 0;
margin: 10px 0;
}
+.shiny {
+ border-right: 10px solid #ddffdd;
+}
+#jot-preview-content .tread-wrapper {
+ background-color: #ddffdd;
+}
.wall-item-tags {
padding-top: 5px;
}
bottom: 5px;
right: 5px;
}
-/* contacts menu */
.contact-photo-wrapper {
position: relative;
}
}
.contact-wrapper {
float: left;
- width: 90px;
+ width: 300px;
height: 90px;
- margin-bottom: 15px;
+ padding-right: 10px;
+ margin: 0 10px 10px 0px;
+}
+.contact-wrapper .contact-photo-wrapper {
+ float: left;
+ margin-right: 10px;
}
.contact-wrapper .contact-photo {
width: 80px;
height: 175px;
}
.contact-name {
- text-align: center;
font-weight: bold;
+ padding-top: 15px;
}
.contact-details {
color: #999999;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
/* editor */
.jothidden {
// Quattro Theme LESS file
// "Echo" palette from Inkscape
+@Yellow1 : #fce94f;
@Blue1:rgb(25,174,255);
@Blue2:rgb(0,132,200);
@Blue3:rgb(0,92,148);
@NoticeBackgroundColor: #511919;
@ThreadBackgroundColor: #f6f7f8;
+@ShinyBorderColor: @Yellow1;
@CommentBoxEmptyColor: @Grey3;
@CommentBoxEmptyBorderColor: @Grey3;
@JotPermissionUnlockBackgroundColor: @Grey2;
@JotPermissionLockBackgroundColor: @Grey4;
@JotLoadingBackgroundColor: @Grey1;
-
+@JotPreviewBackgroundColor: @Yellow1;
+++ /dev/null
-
-<div class="contact-wrapper" id="contact-entry-wrapper-$id" >
- <div class="contact-photo-wrapper" >
- <div class="contact-photo mframe" id="contact-entry-photo-$id"
- onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" >
-
- <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a>
-
- <a href="#" rel="#contact-photo-menu-$id" class="contact-photo-menu-button icon s16 menu" id="contact-photo-menu-button-$id">menu</a>
- <ul class="contact-photo-menu menu-popup" id="contact-photo-menu-$id">
- $contact_photo_menu
- </ul>
-
- </div>
-
- </div>
- <div class="contact-name" id="contact-entry-name-$id" >$name</div>
-
-
-</div>
-
.allcontact-link { float: right; margin: 5px 0px; }
.contact-block-content {
clear: both;
- overflow: auto; height: auto;
+ overflow: hidden;
+ height: auto;
}
+ /*.contact-block-div { width:60px; height: 60px; }*/
.contact-block-link {
float: left;
margin: 0px 2px 2px 0px;
- img { widht: 48px; height: 58px; }
+ img { width: 48px; height: 48px; }
}
}
+/* mail view */
+.mail-conv-sender,
+.mail-conv-detail {
+ float: left;
+}
+.mail-conv-detail {
+ margin-left: 20px;
+ width: 500px;
+}
+
+.mail-conv-subject {
+ font-size: 1.4em;
+ margin: 10px 0;
+}
+
+.mail-conv-outside-wrapper-end {
+ clear: both;
+}
+
+.mail-conv-outside-wrapper {
+ margin-top: 30px;
+}
+
+.mail-conv-delete-wrapper {
+ float: right;
+ margin-right: 30px;
+ margin-top: 15px;
+}
+.mail-conv-break {
+ clear: both;
+}
+
+.mail-conv-delete-icon {
+ border: none;
+}
/* group member */
#contact-edit-drop-link,
top: -50px;
}
}
+/*
#group-members {
margin-top: 20px;
padding: 10px;
}
.contact-block-div {
float: left;
- width: 52px;
- height: 52px;
-}
+ width: 60px;
+ height: 60px;
+}*/
+
/* widget */
.widget {
margin-bottom: 2em;
}
+.shiny { border-right:10px solid @ShinyBorderColor; }
+#jot-preview-content .tread-wrapper { background-color: @JotPreviewBackgroundColor; }
.wall-item-tags { padding-top: 5px; }
right: 5px;
}
-/* contacts menu */
+
.contact-photo-wrapper { position: relative; }
.contact-photo {
width: 48px; height: 48px;
.contact-wrapper {
float: left;
- width: 90px;
+ width: 300px;
height: 90px;
- margin-bottom: 15px;
+ padding-right: 10px;
+ margin: 0 10px 10px 0px;
+ .contact-photo-wrapper {
+ float: left;
+ margin-right: 10px;
+ }
.contact-photo {
width: 80px; height: 80px;
img { width: 80px; height: 80px; }
img { width: 175px; height: 175px; }
}
}
-.contact-name { text-align: center; font-weight: bold; }
-.contact-details { color: @Grey3;}
+.contact-name { font-weight: bold; padding-top: 15px; }
+.contact-details {
+ color: @Grey3; white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
/* editor */
.jothidden { display: none; }
#jot {
#contact-block {
overflow: auto;
height: auto;
+ /*.contact-block-div { width:60px; height: 60px; }*/
+
}
#contact-block .contact-block-h4 {
float: left;
}
#contact-block .contact-block-content {
clear: both;
- overflow: auto;
+ overflow: hidden;
height: auto;
}
#contact-block .contact-block-link {
margin: 0px 2px 2px 0px;
}
#contact-block .contact-block-link img {
- widht: 48px;
- height: 58px;
+ width: 48px;
+ height: 48px;
+}
+/* mail view */
+.mail-conv-sender, .mail-conv-detail {
+ float: left;
+}
+.mail-conv-detail {
+ margin-left: 20px;
+ width: 500px;
+}
+.mail-conv-subject {
+ font-size: 1.4em;
+ margin: 10px 0;
+}
+.mail-conv-outside-wrapper-end {
+ clear: both;
+}
+.mail-conv-outside-wrapper {
+ margin-top: 30px;
+}
+.mail-conv-delete-wrapper {
+ float: right;
+ margin-right: 30px;
+ margin-top: 15px;
+}
+.mail-conv-break {
+ clear: both;
+}
+.mail-conv-delete-icon {
+ border: none;
}
/* group member */
#contact-edit-drop-link, .mail-list-delete-wrapper, .group-delete-wrapper {
position: relative;
top: -50px;
}
+/*
#group-members {
- margin-top: 20px;
- padding: 10px;
- height: 250px;
- overflow: auto;
- border: 1px solid #ddd;
+ margin-top: 20px;
+ padding: 10px;
+ height: 250px;
+ overflow: auto;
+ border: 1px solid #ddd;
}
#group-members-end {
- clear: both;
+ clear: both;
}
#group-all-contacts {
- padding: 10px;
- height: 450px;
- overflow: auto;
- border: 1px solid #ddd;
+ padding: 10px;
+ height: 450px;
+ overflow: auto;
+ border: 1px solid #ddd;
}
#group-all-contacts-end {
- clear: both;
- margin-bottom: 10px;
+ clear: both;
+ margin-bottom: 10px;
}
.contact-block-div {
- float: left;
- width: 52px;
- height: 52px;
-}
+ float: left;
+ width: 60px;
+ height: 60px;
+}*/
/* widget */
.widget {
margin-bottom: 2em;
padding: 0;
margin: 10px 0;
}
+.shiny {
+ border-right: 10px solid #fce94f;
+}
+#jot-preview-content .tread-wrapper {
+ background-color: #fce94f;
+}
.wall-item-tags {
padding-top: 5px;
}
bottom: 5px;
right: 5px;
}
-/* contacts menu */
.contact-photo-wrapper {
position: relative;
}
}
.contact-wrapper {
float: left;
- width: 90px;
+ width: 300px;
height: 90px;
- margin-bottom: 15px;
+ padding-right: 10px;
+ margin: 0 10px 10px 0px;
+}
+.contact-wrapper .contact-photo-wrapper {
+ float: left;
+ margin-right: 10px;
}
.contact-wrapper .contact-photo {
width: 80px;
height: 175px;
}
.contact-name {
- text-align: center;
font-weight: bold;
+ padding-top: 15px;
}
.contact-details {
color: #999999;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
/* editor */
.jothidden {
--- /dev/null
+
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
+ <div class="contact-entry-photo-wrapper" >
+ <div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
+
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+
+ {{ if $contact.photo_menu }}
+ <span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
+ <div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
+ <ul>
+ $contact.photo_menu
+ </ul>
+ </div>
+ {{ endif }}
+ </div>
+
+ </div>
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+
+ <div class="contact-entry-end" ></div>
+</div>
<div id="notifications">
{{ if $nav.network }}<a rel="#nav-notifications-menu" id="net-update" class="nav-ajax-update" href="$nav.network.0" title="$nav.network.1"></a>{{ endif }}
{{ if $nav.home }}<a rel="#nav-notifications-menu" id="home-update" class="nav-ajax-update" href="$nav.home.0" title="$nav.home.1"></a>{{ endif }}
- {{ if $nav.notifications }}<a rel="#nav-notifications-menu" id="intro-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }}
+<!-- {{ if $nav.notifications }}<a rel="#nav-notifications-menu" id="intro-update" class="nav-ajax-update" href="$nav.notifications.0" title="$nav.notifications.1"></a>{{ endif }} -->
+ {{ if $nav.introductions }}<a rel="#nav-notifications-menu" id="intro-update" class="nav-ajax-update" href="$nav.introductions.0" title="$nav.introductions.1"></a>{{ endif }}
{{ if $nav.messages }}<a rel="#nav-notifications-menu" id="mail-update" class="nav-ajax-update" href="$nav.messages.0" title="$nav.messages.1"></a>{{ endif }}
<ul id="nav-notifications-menu" class="menu-popup">
+ <li id="nav-notifications-mark-all"><a href="#" onclick="notifyMarkAll(); return false;">$nav.notifications.mark.1</a></li>
<li id="nav-notifications-see-all"><a href="$nav.notifications.all.0">$nav.notifications.all.1</a></li>
<li class="empty">$emptynotifications</li>
</ul>
background-color:#b20202;
}
+#nav-notifications-menu a:hover {
+ text-decoration: underline;
+}
+
.notif-item a {
vertical-align: middle;
color: #626262;
-<div class="contact-wrapper" id="contact-entry-wrapper-$id" >
- <div class="contact-photo-wrapper" >
- <div class="contact-photo mframe" id="contact-entry-photo-$id"
- onmouseover="if (typeof t$id != 'undefined') clearTimeout(t$id); openMenu('contact-photo-menu-button-$id')" onmouseout="t$id=setTimeout('closeMenu(\'contact-photo-menu-button-$id\'); closeMenu(\'contact-photo-menu-$id\');',200)" >
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-$contact.id" >
+ <div class="contact-entry-photo-wrapper" >
+ <div class="contact-entry-photo mframe" id="contact-entry-photo-$contact.id"
+ onmouseover="if (typeof t$contact.id != 'undefined') clearTimeout(t$contact.id); openMenu('contact-photo-menu-button-$contact.id')"
+ onmouseout="t$contact.id=setTimeout('closeMenu(\'contact-photo-menu-button-$contact.id\'); closeMenu(\'contact-photo-menu-$contact.id\');',200)" >
- <a href="$url" title="$img_hover" /><img src="$thumb" $sparkle alt="$name" /></a>
-
- <a href="#" rel="#contact-photo-menu-$id" class="contact-photo-menu-button icon s16 menu" id="contact-photo-menu-button-$id">menu</a>
- <ul class="contact-photo-menu menu-popup" id="contact-photo-menu-$id">
- $contact_photo_menu
- </ul>
+ <a href="$contact.url" title="$contact.img_hover" /><img src="$contact.thumb" $contact.sparkle alt="$contact.name" /></a>
+ {{ if $contact.photo_menu }}
+ <span onclick="openClose('contact-photo-menu-$contact.id');" class="fakelink contact-photo-menu-button" id="contact-photo-menu-button-$contact.id">menu</span>
+ <div class="contact-photo-menu" id="contact-photo-menu-$contact.id">
+ <ul>
+ $contact.photo_menu
+ </ul>
+ </div>
+ {{ endif }}
</div>
</div>
- <div class="contact-name" id="contact-entry-name-$id" >$name</div>
-
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-$contact.id" >$contact.name</div>
+ <div class="contact-entry-end" ></div>
</div>
-
+<h3>$title</h3>
-<div class="contact-wrapper" id="view-contact-wrapper-$id" >
- <div class="contact-photo-wrapper" >
- <div class="mframe contact-photo" id="view-contact-photo-$id" >
- <a href="$url" title="$alt_text" /><img src="$thumb" alt="$name" /></a>
- </div>
- </div>
- <div class="contact-name" id="view-contact-name-$id" >$name</div>
-</div>
+{{ for $contacts as $contact }}
+ {{ inc contact_template.tpl }}{{ endinc }}
+{{ endfor }}
+
+<div id="view-contact-end"></div>
+
+$paginate