From 3174847de80600be5e0bf32864edca79388d6433 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 10 Oct 2011 01:03:34 -0700 Subject: [PATCH 01/18] bug #177 - birthday month on profile incorrect if October or later and no year --- include/profile_advanced.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/profile_advanced.php b/include/profile_advanced.php index 22e035fe64..41ad322b2c 100644 --- a/include/profile_advanced.php +++ b/include/profile_advanced.php @@ -48,7 +48,7 @@ $short_bd_format = t('j F'); $o .= '
' . ((intval($a->profile['dob'])) ? day_translate(datetime_convert('UTC','UTC',$a->profile['dob'] . ' 00:00 +00:00',$year_bd_format)) - : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],6) . ' 00:00 +00:00',$short_bd_format))) + : day_translate(datetime_convert('UTC','UTC','2001-' . substr($a->profile['dob'],5) . ' 00:00 +00:00',$short_bd_format))) . "
\r\n"; $o .= '
'; From 06c268b3db815d56a92bfabd8df297f5e4331689 Mon Sep 17 00:00:00 2001 From: Friendika Date: Mon, 10 Oct 2011 12:56:15 -0700 Subject: [PATCH 02/18] revup --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index c8ec846810..3da6d2c333 100644 --- a/boot.php +++ b/boot.php @@ -8,7 +8,7 @@ require_once("include/pgettext.php"); require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); -define ( 'FRIENDIKA_VERSION', '2.3.1129' ); +define ( 'FRIENDIKA_VERSION', '2.3.1130' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1094 ); From 557a7d0cec31a36d12898429c479c71671833dfd Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 11 Oct 2011 18:24:37 -0700 Subject: [PATCH 03/18] stuff - background the external network notifications (Facebook, Twitter, Statusnet) - add vimeo support - consolidate editor video options (insert video, regardless of source) - add "Connector Settings" page purely for configuring connectors - moved mailbox settings to Connectors - Move the "Connect/Follow" dialogue out of "find people" and move to top. - Add "Find People" dialogue - minor theme edits on duepuntozero and testbubble to make all this stuff work - A bit of theming on duepunto notifications to eliminate the gigantic Diaspora profile photos. --- boot.php | 4 +- database.sql | 1 + include/api.php | 6 +- include/bbcode.php | 3 + include/conversation.php | 10 +- include/items.php | 19 +-- include/notifier.php | 6 + include/text.php | 34 +++++ mod/contacts.php | 33 +++-- mod/{tagmatch.php => dirfind.php} | 4 +- mod/item.php | 10 +- mod/match.php | 1 + mod/ping.php | 8 +- mod/settings.php | 239 ++++++++++++++++++------------ update.php | 8 +- view/contacts-top.tpl | 1 + view/follow.tpl | 5 +- view/jot-header.tpl | 7 - view/jot.tpl | 3 - view/peoplefind.tpl | 12 ++ view/settings.tpl | 24 --- view/settings_addons.tpl | 2 +- view/settings_connectors.tpl | 34 +++++ view/theme/duepuntozero/style.css | 24 ++- view/theme/testbubble/style.css | 21 ++- 25 files changed, 324 insertions(+), 195 deletions(-) rename mod/{tagmatch.php => dirfind.php} (90%) create mode 100644 view/peoplefind.tpl create mode 100644 view/settings_connectors.tpl diff --git a/boot.php b/boot.php index 140ef095ad..f483d32f36 100644 --- a/boot.php +++ b/boot.php @@ -8,9 +8,9 @@ require_once("include/pgettext.php"); require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); -define ( 'FRIENDIKA_VERSION', '2.3.1130' ); +define ( 'FRIENDIKA_VERSION', '2.3.1131' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1094 ); +define ( 'DB_UPDATE_VERSION', 1095 ); define ( 'EOL', "
\r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 15e2f2ccac..ed92aa4c19 100644 --- a/database.sql +++ b/database.sql @@ -193,6 +193,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `object` text NOT NULL, `target-type` char(255) NOT NULL, `target` text NOT NULL, + `postopts` text NOT NULL, `plink` char(255) NOT NULL, `resource-id` char(255) NOT NULL, `event-id` int(10) unsigned NOT NULL, diff --git a/include/api.php b/include/api.php index 74b4aaf6e1..1334d8eae7 100644 --- a/include/api.php +++ b/include/api.php @@ -483,11 +483,7 @@ $txt = requestdata('htmlstatus'); if((strpos($txt,'<') !== false) || (strpos($txt,'>') !== false)) { - $txt = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $txt); - - $txt = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $txt); + $txt = html2bb_video($txt); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); diff --git a/include/bbcode.php b/include/bbcode.php index 9abc7c4396..b33be686e4 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -141,6 +141,9 @@ function bbcode($Text,$preserve_nl = false) { $Text = preg_replace("/\[youtube\]([A-Za-z0-9\-_=]+)(.*?)\[\/youtube\]/ism", '', $Text); } + $Text = preg_replace("/\[vimeo\]https?:\/\/player.vimeo.com\/video\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); + $Text = preg_replace("/\[vimeo\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/vimeo\]/ism",'[vimeo]$1[/vimeo]',$Text); + $Text = preg_replace("/\[vimeo\]([0-9]+)(.*?)\[\/vimeo\]/ism", '', $Text); // $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '', $Text); diff --git a/include/conversation.php b/include/conversation.php index 18f6d080be..29fa779024 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -745,9 +745,8 @@ function status_editor($a,$x, $notes_cid = 0) { '$nickname' => $x['nickname'], '$ispublic' => t('Visible to everybody'), '$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:"), - '$audurl' => t("Please enter an audio\x28.ogg\x29 link/URL:"), + '$vidurl' => t("Please enter a video link/URL:"), + '$audurl' => t("Please enter an audio link/URL:"), '$whereareu' => t('Where are you right now?'), '$title' => t('Enter a title for this item') )); @@ -795,9 +794,8 @@ function status_editor($a,$x, $notes_cid = 0) { '$upload' => t('Upload photo'), '$attach' => t('Attach file'), '$weblink' => t('Insert web link'), - '$youtube' => t('Insert YouTube video'), - '$video' => t('Insert Vorbis [.ogg] video'), - '$audio' => t('Insert Vorbis [.ogg] audio'), + '$video' => t('Insert video link'), + '$audio' => t('Insert audio link'), '$setloc' => t('Set your location'), '$noloc' => t('Clear browser location'), '$title' => t('Set title'), diff --git a/include/items.php b/include/items.php index 8360a42ec0..4862ca5784 100644 --- a/include/items.php +++ b/include/items.php @@ -414,11 +414,7 @@ function get_atom_elements($feed,$item) { if((strpos($res['body'],'<') !== false) || (strpos($res['body'],'>') !== false)) { - $res['body'] = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $res['body']); - - $res['body'] = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $res['body']); + $res['body'] = html2bb_video($res['body']); $res['body'] = oembed_html2bbcode($res['body']); @@ -586,12 +582,7 @@ function get_atom_elements($feed,$item) { $res['object'] .= '' . xmlify($body) . '' . "\n"; if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $res['body'] = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $res['body']); - + $body = html2bb_video($body); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); @@ -629,11 +620,7 @@ function get_atom_elements($feed,$item) { $res['object'] .= '' . xmlify($body) . '' . "\n"; if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = preg_replace('#]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $body); - - $res['body'] = preg_replace('#].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?#s', - '[youtube]$1[/youtube]', $res['body']); + $body = html2bb_video($body); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); diff --git a/include/notifier.php b/include/notifier.php index 90111600ad..9dc524585d 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -779,6 +779,12 @@ function notifier_run($argv, $argc){ } + if($normal_mode) + call_hooks('notifier_normal',$target_item); + + call_hooks('notifier_end',$target_item); + + return; } diff --git a/include/text.php b/include/text.php index fd413b7d65..299410a63d 100644 --- a/include/text.php +++ b/include/text.php @@ -1003,3 +1003,37 @@ if (!function_exists('str_getcsv')) { } } } + +function cleardiv() { + return '
'; +} + + +function bb_translate_video($s) { + + $matches = null; + $r = preg_match_all("/\[video\](.*?)\[\/video\]/ism",$s,$matches,PREG_SET_ORDER); + if($r) { + foreach($matches as $mtch) { + if((stristr($mtch[1],'youtube')) || (stristr($mtch[1],'youtu.be'))) + $s = str_replace($mtch[0],'[youtube]' . $mtch[1] . '[/youtube]',$s); + elseif(stristr($mtch[1],'vimeo')) + $s = str_replace($mtch[0],'[vimeo]' . $mtch[1] . '[/vimeo]',$s); + } + } + return $s; +} + +function html2bb_video($s) { + + $s = preg_replace('#]+>(.*?)https+://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+)(.*?)#ism', + '[youtube]$2[/youtube]', $s); + + $s = preg_replace('#](.*?)https+://www.youtube.com/embed/([A-Za-z0-9\-_=]+)(.*?)#ism', + '[youtube]$2[/youtube]', $s); + + $s = preg_replace('#](.*?)https+://player.vimeo.com/video/([0-9]+)(.*?)#ism', + '[vimeo]$2[/vimeo]', $s); + + return $s; +} \ No newline at end of file diff --git a/mod/contacts.php b/mod/contacts.php index ea429d39fe..d24873b8fb 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -21,6 +21,16 @@ function contacts_init(&$a) { require_once('include/group.php'); if(! x($a->page,'aside')) $a->page['aside'] = ''; + + $a->page['aside'] .= replace_macros(get_markup_template('follow.tpl'),array( + '$connect' => t('Add New Contact'), + '$desc' => t('Enter address or web location'), + '$hint' => t('Example: bob@example.com, http://example.com/barbara'), + '$follow' => t('Connect') + )); + + + $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id); if(get_config('system','invitation_only')) { @@ -32,22 +42,18 @@ function contacts_init(&$a) { } } - $tpl = get_markup_template('follow.tpl'); + $tpl = get_markup_template('peoplefind.tpl'); - $findSimilarLink = ''; - - $inv = ''; - if($a->config['register_policy'] != REGISTER_CLOSED) { - $inv = ''; - } - + $inv = (($a->config['register_policy'] != REGISTER_CLOSED) ? t('Invite Friends') : ''); + $a->page['aside'] .= replace_macros($tpl,array( + '$findpeople' => t('Find People'), + '$desc' => t('Enter name or interest'), '$label' => t('Connect/Follow'), - '$hint' => t('Example: bob@example.com, http://example.com/barbara'), - '$follow' => t('Follow'), - '$findSimilar' => $findSimilarLink, - '$inviteFriends' => $inv + '$hint' => t('Examples: Robert Morgenstein, Fishing'), + '$findthem' => t('Find'), + '$similar' => t('Similar Interests'), + '$inv' => $inv )); @@ -351,6 +357,7 @@ function contacts_content(&$a) { '$hide_url' => ((strlen($sql_extra)) ? 'contacts/all' : 'contacts' ), '$hide_text' => ((strlen($sql_extra)) ? t('Show Blocked Connections') : t('Hide Blocked Connections')), '$search' => $search, + '$desc' => t('Search your contacts'), '$finding' => (strlen($search) ? '

' . t('Finding: ') . "'" . $search . "'" . '

' : ""), '$submit' => t('Find'), '$cmd' => $a->cmd diff --git a/mod/tagmatch.php b/mod/dirfind.php similarity index 90% rename from mod/tagmatch.php rename to mod/dirfind.php index 8023fa433b..2d84790435 100644 --- a/mod/tagmatch.php +++ b/mod/dirfind.php @@ -1,13 +1,13 @@ ' . t('Tag Match') . ' - ' . $search . ''; + $o .= '

' . t('People Search') . ' - ' . $search . '

'; if($search) { diff --git a/mod/item.php b/mod/item.php index 08c5e68b84..9e6d33230a 100644 --- a/mod/item.php +++ b/mod/item.php @@ -342,6 +342,8 @@ function item_post(&$a) { } + $body = bb_translate_video($body); + /** * Fold multi-line [code] sequences */ @@ -522,6 +524,7 @@ function item_post(&$a) { $datarray['attach'] = $attachments; $datarray['bookmark'] = intval($bookmark); $datarray['thr-parent'] = $thr_parent; + $datarray['postopts'] = ''; /** * These fields are for the convenience of plugins... @@ -531,7 +534,7 @@ function item_post(&$a) { $datarray['parent'] = $parent; $datarray['self'] = $self; - $datarray['prvnets'] = $user['prvnets']; +// $datarray['prvnets'] = $user['prvnets']; if($orig_post) $datarray['edit'] = true; @@ -563,8 +566,8 @@ function item_post(&$a) { $r = q("INSERT INTO `item` (`guid`, `uid`,`type`,`wall`,`gravity`,`contact-id`,`owner-name`,`owner-link`,`owner-avatar`, `author-name`, `author-link`, `author-avatar`, `created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, - `tag`, `inform`, `verb`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark` ) - VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d )", + `tag`, `inform`, `verb`, `postopts`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark` ) + VALUES( '%s', %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d )", dbesc($datarray['guid']), intval($datarray['uid']), dbesc($datarray['type']), @@ -592,6 +595,7 @@ function item_post(&$a) { dbesc($datarray['tag']), dbesc($datarray['inform']), dbesc($datarray['verb']), + dbesc($datarray['postopts']), dbesc($datarray['allow_cid']), dbesc($datarray['allow_gid']), dbesc($datarray['deny_cid']), diff --git a/mod/match.php b/mod/match.php index eea2dad4ff..c33bbd5c2d 100644 --- a/mod/match.php +++ b/mod/match.php @@ -59,6 +59,7 @@ function match_content(&$a) { } + $o .= cleardiv(); $o .= paginate($a); return $o; } diff --git a/mod/ping.php b/mod/ping.php index 546c46f166..23b332ee0a 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -165,7 +165,7 @@ function ping_init(&$a) { } if (count($friends)){ foreach ($friends as $i) { - echo xmlize( $a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'], $i['author-name'], $i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friends with %s"), $i['fname'] ) ); + echo xmlize($a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'],$i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friends with %s"), $i['fname'] ) ); }; } if (count($posts)){ @@ -180,16 +180,14 @@ function ping_init(&$a) { if(x($_SESSION,'sysmsg')){ foreach ($_SESSION['sysmsg'] as $m){ - echo "".($m).""; + echo "".xmlify($m).""; } - //$_SESSION['sysmsg']=array(); unset($_SESSION['sysmsg']); } if(x($_SESSION,'sysmsg_info')){ foreach ($_SESSION['sysmsg_info'] as $m){ - echo "".($m).""; + echo "".xmlify($m).""; } - //$_SESSION['sysmsg_info']=array(); unset($_SESSION['sysmsg_info']); } diff --git a/mod/settings.php b/mod/settings.php index 7112db8878..b5997fbe73 100644 --- a/mod/settings.php +++ b/mod/settings.php @@ -52,6 +52,78 @@ function settings_post(&$a) { return; } + if(($a->argc > 1) && ($a->argv[1] == 'connectors')) { + + if(x($_POST['imap-submit'])) { + $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : ''); + $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : ''); + $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : ''); + $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : ''); + $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : ''); + $mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : ''); + $mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : ''); + + + $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); + if(get_config('system','dfrn_only')) + $mail_disabled = 1; + + if(! $mail_disabled) { + $failed = false; + $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", + intval(local_user()) + ); + if(! count($r)) { + q("INSERT INTO `mailacct` (`uid`) VALUES (%d)", + intval(local_user()) + ); + } + if(strlen($mail_pass)) { + $pass = ''; + openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']); + q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d LIMIT 1", + dbesc(bin2hex($pass)), + intval(local_user()) + ); + } + $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s', + `mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1", + dbesc($mail_server), + intval($mail_port), + dbesc($mail_ssl), + dbesc($mail_user), + dbesc($mail_replyto), + intval($mail_pubmail), + intval(local_user()) + ); + $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", + intval(local_user()) + ); + if(count($r)) { + $eacct = $r[0]; + require_once('include/email.php'); + $mb = construct_mailbox_name($eacct); + if(strlen($eacct['server'])) { + $dcrpass = ''; + openssl_private_decrypt(hex2bin($eacct['pass']),$dcrpass,$a->user['prvkey']); + $mbox = email_connect($mb,$mail_user,$dcrpass); + unset($dcrpass); + if(! $mbox) { + $failed = true; + notice( t('Failed to connect with email account using the settings provided.') . EOL); + } + } + } + if(! $failed) + info( t('Email settings updated.') . EOL); + } + } + + call_hooks('connector_settings_post', $_POST); + return; + } + + call_hooks('settings_post', $_POST); if((x($_POST,'npassword')) || (x($_POST,'confirm'))) { @@ -103,66 +175,6 @@ function settings_post(&$a) { $hidewall = (($_POST['hidewall'] == 1) ? 1: 0); - - - $mail_server = ((x($_POST,'mail_server')) ? $_POST['mail_server'] : ''); - $mail_port = ((x($_POST,'mail_port')) ? $_POST['mail_port'] : ''); - $mail_ssl = ((x($_POST,'mail_ssl')) ? strtolower(trim($_POST['mail_ssl'])) : ''); - $mail_user = ((x($_POST,'mail_user')) ? $_POST['mail_user'] : ''); - $mail_pass = ((x($_POST,'mail_pass')) ? trim($_POST['mail_pass']) : ''); - $mail_replyto = ((x($_POST,'mail_replyto')) ? $_POST['mail_replyto'] : ''); - $mail_pubmail = ((x($_POST,'mail_pubmail')) ? $_POST['mail_pubmail'] : ''); - - - $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); - if(get_config('system','dfrn_only')) - $mail_disabled = 1; - - if(! $mail_disabled) { - $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", - intval(local_user()) - ); - if(! count($r)) { - q("INSERT INTO `mailacct` (`uid`) VALUES (%d)", - intval(local_user()) - ); - } - if(strlen($mail_pass)) { - $pass = ''; - openssl_public_encrypt($mail_pass,$pass,$a->user['pubkey']); - q("UPDATE `mailacct` SET `pass` = '%s' WHERE `uid` = %d LIMIT 1", - dbesc(bin2hex($pass)), - intval(local_user()) - ); - } - $r = q("UPDATE `mailacct` SET `server` = '%s', `port` = %d, `ssltype` = '%s', `user` = '%s', - `mailbox` = 'INBOX', `reply_to` = '%s', `pubmail` = %d WHERE `uid` = %d LIMIT 1", - dbesc($mail_server), - intval($mail_port), - dbesc($mail_ssl), - dbesc($mail_user), - dbesc($mail_replyto), - intval($mail_pubmail), - intval(local_user()) - ); - $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", - intval(local_user()) - ); - if(count($r)) { - $eacct = $r[0]; - require_once('include/email.php'); - $mb = construct_mailbox_name($eacct); - if(strlen($eacct['server'])) { - $dcrpass = ''; - openssl_private_decrypt(hex2bin($eacct['pass']),$dcrpass,$a->user['prvkey']); - $mbox = email_connect($mb,$mail_user,$dcrpass); - unset($dcrpass); - if(! $mbox) - notice( t('Failed to connect with email account using the settings provided.') . EOL); - } - } - } - $notify = 0; if(x($_POST,'notify1')) @@ -312,10 +324,20 @@ function settings_content(&$a) { 'url' => $a->get_baseurl().'/settings', 'sel' => (($a->argc == 1)?'active':''), ), + array( + 'label' => t('Connector settings'), + 'url' => $a->get_baseurl().'/settings/connectors', + 'sel' => (($a->argc > 1) && ($a->argv[1] === 'connectors')?'active':''), + ), array( 'label' => t('Plugin settings'), 'url' => $a->get_baseurl().'/settings/addon', 'sel' => (($a->argc > 1) && ($a->argv[1] === 'addon')?'active':''), + ), + array( + 'label' => t('Export personal data'), + 'url' => $a->get_baseurl() . '/uexport', + 'sel' => '' ) ); @@ -344,6 +366,66 @@ function settings_content(&$a) { )); return $o; } + + if(($a->argc > 1) && ($a->argv[1] === 'connectors')) { + + $settings_connectors = ""; + + call_hooks('connector_settings', $settings_connectors); + + $diasp_enabled = sprintf( t('Built-in support for %s connectivity is %s'), t('Diaspora'), ((get_config('system','diaspora_enabled')) ? t('enabled') : t('disabled'))); + $ostat_enabled = sprintf( t('Built-in support for %s connectivity is %s'), t('StatusNet'), ((get_config('system','ostatus_disabled')) ? t('disabled') : t('enabled'))); + + $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); + if(get_config('system','dfrn_only')) + $mail_disabled = 1; + + if(! $mail_disabled) { + $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", + local_user() + ); + } + else { + $r = null; + } + + $mail_server = ((count($r)) ? $r[0]['server'] : ''); + $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : ''); + $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : ''); + $mail_user = ((count($r)) ? $r[0]['user'] : ''); + $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : ''); + $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0); + $mail_chk = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00'); + + + $tpl = get_markup_template("settings_connectors.tpl"); + $o .= replace_macros($tpl, array( + '$title' => t('Connector Settings'), + '$tabs' => $tabs, + + '$diasp_enabled' => $diasp_enabled, + '$ostat_enabled' => $ostat_enabled, + + '$h_imap' => t('Email/Mailbox Setup'), + '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."), + '$imap_lastcheck' => array('imap_lastcheck', t('Last successful email check:'), $mail_chk,''), + '$mail_disabled' => (($mail_disabled) ? t('Email access is disabled on this site.') : ''), + '$mail_server' => array('mail_server', t('IMAP server name:'), $mail_server, ''), + '$mail_port' => array('mail_port', t('IMAP port:'), $mail_port, ''), + '$mail_ssl' => array('mail_ssl', t('Security:'), strtoupper($mail_ssl), '', array( ''=>t('None'), 'TSL'=>'TSL', 'SSL'=>'SSL')), + '$mail_user' => array('mail_user', t('Email login name:'), $mail_user, ''), + '$mail_pass' => array('mail_pass', t('Email password:'), '', ''), + '$mail_replyto' => array('mail_replyto', t('Reply-to address:'), '', 'Optional'), + '$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''), + '$submit' => t('Submit'), + + + + '$settings_connectors' => $settings_connectors + )); + return $o; + } + require_once('include/acl_selectors.php'); @@ -368,26 +450,6 @@ function settings_content(&$a) { $timezone = date_default_timezone_get(); - $mail_disabled = ((function_exists('imap_open') && (! get_config('system','imap_disabled'))) ? 0 : 1); - if(get_config('system','dfrn_only')) - $mail_disabled = 1; - - if(! $mail_disabled) { - $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d LIMIT 1", - local_user() - ); - } - else { - $r = null; - } - - $mail_server = ((count($r)) ? $r[0]['server'] : ''); - $mail_port = ((count($r) && intval($r[0]['port'])) ? intval($r[0]['port']) : ''); - $mail_ssl = ((count($r)) ? $r[0]['ssltype'] : ''); - $mail_user = ((count($r)) ? $r[0]['user'] : ''); - $mail_replyto = ((count($r)) ? $r[0]['reply_to'] : ''); - $mail_pubmail = ((count($r)) ? $r[0]['pubmail'] : 0); - $mail_chk = ((count($r)) ? $r[0]['last_check'] : '0000-00-00 00:00:00'); $pageset_tpl = get_markup_template('pagetypes.tpl'); $pagetype = replace_macros($pageset_tpl,array( @@ -496,8 +558,6 @@ function settings_content(&$a) { '$uid' => local_user(), '$nickname_block' => $prof_addr, - '$uexport' => t('Export Personal Data'), - '$h_pass' => t('Password Settings'), '$password1'=> array('npassword', t('New Password:'), '', ''), @@ -543,21 +603,6 @@ function settings_content(&$a) { - '$h_imap' => t('Email/Mailbox Setup'), - '$imap_desc' => t("If you wish to communicate with email contacts using this service \x28optional\x29, please specify how to connect to your mailbox."), - '$imap_lastcheck' => array('imap_lastcheck', t('Last successful email check:'), $imap_last_check,''), - '$mail_disabled' => (($mail_disabled) ? t('Email access is disabled on this site.') : ''), - '$mail_server' => array('mail_server', t('IMAP server name:'), $mail_server, ''), - '$mail_port' => array('mail_port', t('IMAP port:'), $mail_port, ''), - '$mail_ssl' => array('mail_ssl', t('Security:'), strtoupper($mail_ssl), '', array( ''=>t('None'), 'TSL'=>'TSL', 'SSL'=>'SSL')), - '$mail_user' => array('mail_user', t('Email login name:'), $mail_user, ''), - '$mail_pass' => array('mail_pass', t('Email password:'), '', ''), - '$mail_replyto' => array('mail_replyto', t('Reply-to address:'), '', 'Optional'), - '$mail_pubmail' => array('mail_pubmail', t('Send public posts to all email contacts:'), $mail_pubmail, ''), - - - - '$h_advn' => t('Advanced Page Settings'), '$pagetype' => $pagetype, diff --git a/update.php b/update.php index 723f12c1ac..5d5190095c 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@
+$desc
diff --git a/view/follow.tpl b/view/follow.tpl index 2c024930ca..259e74a931 100644 --- a/view/follow.tpl +++ b/view/follow.tpl @@ -1,9 +1,8 @@
-

Find People

+

$connect

+
$desc
- $findSimilar - $inviteFriends
diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 5eb07db44c..22bd0aa5b2 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -149,13 +149,6 @@ function initEditor(cb){ } } - 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) { diff --git a/view/jot.tpl b/view/jot.tpl index aa9892cbbb..71b92986d2 100644 --- a/view/jot.tpl +++ b/view/jot.tpl @@ -32,9 +32,6 @@ -
- -
diff --git a/view/peoplefind.tpl b/view/peoplefind.tpl new file mode 100644 index 0000000000..4b3f01b882 --- /dev/null +++ b/view/peoplefind.tpl @@ -0,0 +1,12 @@ +
+

$findpeople

+
$desc
+
+ +
+ + {{ if $inv }} + + {{ endif }} +
+ diff --git a/view/settings.tpl b/view/settings.tpl index b79fbfe43c..3bbfc6ffd9 100644 --- a/view/settings.tpl +++ b/view/settings.tpl @@ -4,9 +4,6 @@ $tabs $nickname_block - - -
@@ -95,27 +92,6 @@ $hide_wall -{{ if $mail_disabled }} - -{{ else }} -

$h_imap

-

$imap_desc

- {{inc field_custom.tpl with $field=$imap_lastcheck }}{{endinc}} - {{inc field_input.tpl with $field=$mail_server }}{{endinc}} - {{inc field_input.tpl with $field=$mail_port }}{{endinc}} - {{inc field_select.tpl with $field=$mail_ssl }}{{endinc}} - {{inc field_input.tpl with $field=$mail_user }}{{endinc}} - {{inc field_password.tpl with $field=$mail_pass }}{{endinc}} - {{inc field_input.tpl with $field=$mail_replyto }}{{endinc}} - {{inc field_checkbox.tpl with $field=$mail_pubmail }}{{endinc}} - -
- -
-{{ endif }} - - -

$h_advn

diff --git a/view/settings_addons.tpl b/view/settings_addons.tpl index 8fe0b51944..2cbfd17e92 100644 --- a/view/settings_addons.tpl +++ b/view/settings_addons.tpl @@ -3,7 +3,7 @@ $tabs

$title

- + $settings_addons diff --git a/view/settings_connectors.tpl b/view/settings_connectors.tpl new file mode 100644 index 0000000000..0f3357873e --- /dev/null +++ b/view/settings_connectors.tpl @@ -0,0 +1,34 @@ +$tabs + +

$title

+ +
$diasp_enabled
+
$ostat_enabled
+ + + +$settings_connectors + +{{ if $mail_disabled }} + +{{ else }} +
+

$h_imap

+

$imap_desc

+ {{inc field_custom.tpl with $field=$imap_lastcheck }}{{endinc}} + {{inc field_input.tpl with $field=$mail_server }}{{endinc}} + {{inc field_input.tpl with $field=$mail_port }}{{endinc}} + {{inc field_select.tpl with $field=$mail_ssl }}{{endinc}} + {{inc field_input.tpl with $field=$mail_user }}{{endinc}} + {{inc field_password.tpl with $field=$mail_pass }}{{endinc}} + {{inc field_input.tpl with $field=$mail_replyto }}{{endinc}} + {{inc field_checkbox.tpl with $field=$mail_pubmail }}{{endinc}} + +
+ +
+
+{{ endif }} + +
+ diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index b46a03c386..40c3cb81b4 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -145,7 +145,6 @@ nav .nav-link { background-color: transparent !important; } - .nav-commlink.selected { background-color: #ffffff; border-bottom: 1px solid #ffffff; @@ -1849,13 +1848,28 @@ a.mail-list-link { #side-follow-wrapper { margin-top: 20px; } -#side-follow-url { +#side-follow-url, #side-peoplefind-url { margin-top: 5px; } -#side-follow-submit { +#side-follow-submit, #side-peoplefind-submit { margin-top: 15px; } +#side-match-link { + margin-top: 10px; +} + +.widget { + border: 1px solid #DDDDDD; + padding: 5px; + margin-top: 5px; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + +} + + .photo-album-image-wrapper { float: left; margin-top: 15px; @@ -2641,8 +2655,8 @@ a.mail-list-link { border-color:#204A87; padding-right: 40px; background-position: right center; - background-color: #3465A4; - color: #FFFFFF; + background-color: #D7E3F1; + color: #204A87; text-align: left; } .hidden { display: none!important; } diff --git a/view/theme/testbubble/style.css b/view/theme/testbubble/style.css index 341314c1d0..dd9d242999 100644 --- a/view/theme/testbubble/style.css +++ b/view/theme/testbubble/style.css @@ -823,7 +823,7 @@ profile-jot-banner-wrapper { /* ======== */ .tabs { - width: 450px; + width: 600px; list-style: none; padding: 10px; margin: 0px 0px 10px 0px; @@ -2211,6 +2211,25 @@ margin-left: 0px; padding: 5px; } +.settings-block { + margin-top: 20px; + -moz-box-shadow: 1px 2px 6px 0px #959494; + -webkit-box-shadow: 1px 2px 6px 0px #959494; + box-shadow: 1px 2px 6px 0px #959494; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f8f8f8), color-stop(1, #f6f6f6) ); + background:-moz-linear-gradient( center top, #f8f8f8 5%, #f6f6f6 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f8f8f8', endColorstr='#f6f6f6'); + background-color:#f8f8f8; + -moz-border-radius:5px; + -webkit-border-radius:5px; + border-radius:5px; + border:1px solid #eee; + color:#a6a6a6; + text-shadow:-1px 0px 0px #bdbdbd; + border: 1px solid #cdcdcd; + padding: 5px; +} + #register-form div, #profile-edit-form div { clear: both; From 2206d894b3fec7064b91e0420bcc2b16e9e7009b Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 11 Oct 2011 19:27:58 -0700 Subject: [PATCH 04/18] add contact_widgets and provide widgets on appropriate pages, fix the saved search widget fix directory page on testbubble, don't use system theme for community, directory, and search if the viewer is logged in. --- include/contact_widgets.php | 40 +++++++++++++++++++++++++++++++++ mod/community.php | 10 ++++++--- mod/contacts.php | 36 ++++------------------------- mod/directory.php | 16 ++++++++++--- mod/dirfind.php | 13 +++++++++++ mod/network.php | 4 +++- mod/search.php | 10 ++++----- view/directory_header.tpl | 1 + view/theme/testbubble/style.css | 4 ++++ 9 files changed, 90 insertions(+), 44 deletions(-) create mode 100644 include/contact_widgets.php diff --git a/include/contact_widgets.php b/include/contact_widgets.php new file mode 100644 index 0000000000..efb833aafc --- /dev/null +++ b/include/contact_widgets.php @@ -0,0 +1,40 @@ + t('Add New Contact'), + '$desc' => t('Enter address or web location'), + '$hint' => t('Example: bob@example.com, http://example.com/barbara'), + '$follow' => t('Connect') + )); + +} + +function findpeople_widget() { + + $a = get_app(); + + $inv = (($a->config['register_policy'] != REGISTER_CLOSED) ? t('Invite Friends') : ''); + + if(get_config('system','invitation_only')) { + $x = get_pconfig(local_user(),'system','invites_remaining'); + if($x || is_site_admin()) { + $a->page['aside'] .= '' . $inv; + } + } + + return replace_macros(get_markup_template('peoplefind.tpl'),array( + '$findpeople' => t('Find People'), + '$desc' => t('Enter name or interest'), + '$label' => t('Connect/Follow'), + '$hint' => t('Examples: Robert Morgenstein, Fishing'), + '$findthem' => t('Find'), + '$similar' => t('Similar Interests'), + '$inv' => $inv + )); + +} + diff --git a/mod/community.php b/mod/community.php index cb255029f0..34c992bada 100644 --- a/mod/community.php +++ b/mod/community.php @@ -1,5 +1,12 @@ ' . t('Community') . ''; if(! $update) { diff --git a/mod/contacts.php b/mod/contacts.php index d24873b8fb..9bbcea07d3 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -19,44 +19,16 @@ function contacts_init(&$a) { } require_once('include/group.php'); + require_once('include/contact_widgets.php'); + if(! x($a->page,'aside')) $a->page['aside'] = ''; - $a->page['aside'] .= replace_macros(get_markup_template('follow.tpl'),array( - '$connect' => t('Add New Contact'), - '$desc' => t('Enter address or web location'), - '$hint' => t('Example: bob@example.com, http://example.com/barbara'), - '$follow' => t('Connect') - )); - - + $a->page['aside'] .= follow_widget(); $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id); - if(get_config('system','invitation_only')) { - $x = get_pconfig(local_user(),'system','invites_remaining'); - if($x || is_site_admin()) { - $a->page['aside'] .= '' . $inv; - } - } - - $tpl = get_markup_template('peoplefind.tpl'); - - $inv = (($a->config['register_policy'] != REGISTER_CLOSED) ? t('Invite Friends') : ''); - - $a->page['aside'] .= replace_macros($tpl,array( - '$findpeople' => t('Find People'), - '$desc' => t('Enter name or interest'), - '$label' => t('Connect/Follow'), - '$hint' => t('Examples: Robert Morgenstein, Fishing'), - '$findthem' => t('Find'), - '$similar' => t('Similar Interests'), - '$inv' => $inv - )); - - + $a->page['aside'] .= findpeople_widget(); } diff --git a/mod/directory.php b/mod/directory.php index 93abcd5de8..5f00b4f5a4 100644 --- a/mod/directory.php +++ b/mod/directory.php @@ -2,6 +2,17 @@ function directory_init(&$a) { $a->set_pager_itemspage(60); + + if(local_user()) { + require_once('include/contact_widgets.php'); + + $a->page['aside'] .= findpeople_widget(); + + } + else + unset($_SESSION['theme']); + + } @@ -23,8 +34,6 @@ function directory_content(&$a) { $o = ''; nav_set_selected('directory'); - if(x($_SESSION,'theme')) - unset($_SESSION['theme']); if(x($a->data,'search')) $search = notags(trim($a->data['search'])); @@ -45,12 +54,13 @@ function directory_content(&$a) { if($everything) $admin = ''; else - $admin = ''; + $admin = ''; } $o .= replace_macros($tpl, array( '$search' => $search, '$globaldir' => $globaldir, + '$desc' => t('Find on this site'), '$admin' => $admin, '$finding' => (strlen($search) ? '

' . t('Finding: ') . "'" . $search . "'" . '

' : ""), '$sitedir' => t('Site Directory'), diff --git a/mod/dirfind.php b/mod/dirfind.php index 2d84790435..8010182766 100644 --- a/mod/dirfind.php +++ b/mod/dirfind.php @@ -1,5 +1,18 @@ page,'aside')) + $a->page['aside'] = ''; + + $a->page['aside'] .= follow_widget(); + + $a->page['aside'] .= findpeople_widget(); +} + + function dirfind_content(&$a) { diff --git a/mod/network.php b/mod/network.php index 9b7c4e6112..5aa39bf638 100644 --- a/mod/network.php +++ b/mod/network.php @@ -78,11 +78,13 @@ function saved_searches($search) { if(count($r)) { $o .= ''; } + $o .= '
'; + $o .= '' . "\r\n"; return $o; diff --git a/mod/search.php b/mod/search.php index 034794e179..2a8bf1484e 100644 --- a/mod/search.php +++ b/mod/search.php @@ -15,7 +15,7 @@ function search_saved_searches() { foreach($r as $rr) { $o .= '
  • ' . $rr['term'] . '
  • ' . "\r\n"; } - $o .= '' . "\r\n"; + $o .= '
    ' . "\r\n"; } return $o; @@ -50,6 +50,9 @@ function search_init(&$a) { $a->page['aside'] .= search_saved_searches(); } + else + unset($_SESSION['theme']); + } @@ -75,12 +78,9 @@ function search_content(&$a) { require_once('include/security.php'); require_once('include/conversation.php'); - if(x($_SESSION,'theme')) - unset($_SESSION['theme']); - $o = '' . "\r\n"; - $o .= '

    ' . t('Search') . '

    '; + $o .= '

    ' . t('Search This Site') . '

    '; if(x($a->data,'search')) $search = notags(trim($a->data['search'])); diff --git a/view/directory_header.tpl b/view/directory_header.tpl index ba90b94f82..1f03540f2c 100644 --- a/view/directory_header.tpl +++ b/view/directory_header.tpl @@ -7,6 +7,7 @@ $finding
    +$desc
    diff --git a/view/theme/testbubble/style.css b/view/theme/testbubble/style.css index dd9d242999..74f0dfb41c 100644 --- a/view/theme/testbubble/style.css +++ b/view/theme/testbubble/style.css @@ -2614,6 +2614,10 @@ tr { width: 150px; } +.directory-end { + clear: both; +} + /* ========= */ /* = Admin = */ /* ========= */ From 3ef7dcac4b84f6f78dcba5cd768fc08f9cfc1067 Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 11 Oct 2011 20:38:09 -0700 Subject: [PATCH 05/18] solve intro/notify naming issue by providing both or either, theme decides what to do --- include/nav.php | 5 ++++- view/theme/duepuntozero/nav.tpl | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/nav.php b/include/nav.php index 600043ee58..5c24df51e2 100644 --- a/include/nav.php +++ b/include/nav.php @@ -114,7 +114,9 @@ function nav(&$a) { /* only show friend requests for normal pages. Other page types have automatic friendship. */ if($_SESSION['page_flags'] == PAGE_NORMAL) { - $nav['notifications'] = array('notifications/network', t('Notifications'), "", t('Notifications')); + $nav['introductions'] = array('notifications/intros', t('Introductions'), "", t('Friend Requests')); + $nav['notifications'] = array('notifications', t('Notifications'), "", t('Notifications')); + } $nav['messages'] = array('message', t('Messages'), "", t('Private mail')); @@ -175,6 +177,7 @@ function nav_set_selected($item){ 'network' => null, 'home' => null, 'profiles' => null, + 'introductions' => null, 'notifications' => null, 'messages' => null, 'directory' => null, diff --git a/view/theme/duepuntozero/nav.tpl b/view/theme/duepuntozero/nav.tpl index b13ea9ae2e..afa9180651 100644 --- a/view/theme/duepuntozero/nav.tpl +++ b/view/theme/duepuntozero/nav.tpl @@ -30,8 +30,8 @@ {{ if $nav.community }} $nav.community.1 {{ endif }} - {{ if $nav.notifications }} - $nav.notifications.1 + {{ if $nav.introductions }} + $nav.introductions.1 {{ endif }} {{ if $nav.messages }} From df7702709b07560af1d469f0835586af317f39b0 Mon Sep 17 00:00:00 2001 From: Friendika Date: Tue, 11 Oct 2011 21:30:23 -0700 Subject: [PATCH 06/18] common tabs to notifications and mail --- mod/message.php | 35 +++++++++++++++++++++++------------ mod/notifications.php | 40 +++++++++++++++++++++++++++++++++++++--- view/mail_head.tpl | 9 +-------- view/notifications.tpl | 13 ++----------- 4 files changed, 63 insertions(+), 34 deletions(-) diff --git a/mod/message.php b/mod/message.php index d4772d0261..39aa0479ff 100644 --- a/mod/message.php +++ b/mod/message.php @@ -45,21 +45,32 @@ function message_content(&$a) { $myprofile = $a->get_baseurl() . '/profile/' . $a->user['nickname']; - if (($a->argc > 1) && ($a->argv[1] === 'new')) { - $tab = 'new'; - } else if ($a->argc == 2 && $a->argv[1] === 'sent') { - $tab = 'sent'; - } else { - $tab = 'inbox'; - } - + + $tabs = array( + array( + 'label' => t('Inbox'), + 'url'=> $a->get_baseurl() . '/message', + 'sel'=> (($a->argc == 1) ? 'active' : ''), + ), + array( + 'label' => t('Outbox'), + 'url' => $a->get_baseurl() . '/message/sent', + 'sel'=> (($a->argv[1] == 'sent') ? 'active' : ''), + ), + array( + 'label' => t('New Message'), + 'url' => $a->get_baseurl() . '/message/new', + 'sel'=> (($a->argv[1] == 'new') ? 'active' : ''), + ), + ); + $tpl = get_markup_template('common_tabs.tpl'); + $tab_content = replace_macros($tpl, array('$tabs'=>$tabs)); + + $tpl = get_markup_template('mail_head.tpl'); $header = replace_macros($tpl, array( '$messages' => t('Messages'), - '$inbox' => t('Inbox'), - '$outbox' => t('Outbox'), - '$new' => t('New Message'), - '$activetab' => $tab + '$tab_content' => $tab_content )); diff --git a/mod/notifications.php b/mod/notifications.php index 6d78ea0242..6c3e67cb42 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -63,10 +63,39 @@ function notifications_content(&$a) { return; } + nav_set_selected('notifications'); + $o = ''; - + $tabs = array( + array( + 'label' => t('Network'), + 'url'=>$a->get_baseurl() . '/notifications/network', + 'sel'=> (($a->argv[1] == 'network') ? 'active' : ''), + ), + array( + 'label' => t('Home'), + 'url' => $a->get_baseurl() . '/notifications/home', + 'sel'=> (($a->argv[1] == 'home') ? 'active' : ''), + ), + array( + 'label' => t('Introductions'), + 'url' => $a->get_baseurl() . '/notifications/intros', + 'sel'=> (($a->argv[1] == 'intros') ? 'active' : ''), + ), + array( + 'label' => t('Messages'), + 'url' => $a->get_baseurl() . '/message', + 'sel'=> '', + ), + ); + $tpl = get_markup_template('common_tabs.tpl'); + $tab_content = replace_macros($tpl, array('$tabs'=>$tabs)); + + + + if( (($a->argc > 1) && ($a->argv[1] == 'intros')) || (($a->argc == 1))) { - + nav_set_selected('introductions'); if(($a->argc > 2) && ($a->argv[2] == 'all')) $sql_extra = ''; else @@ -167,6 +196,8 @@ function notifications_content(&$a) { info( t('No notifications.') . EOL); $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, '$activetab' => 'intros' )); @@ -175,7 +206,6 @@ function notifications_content(&$a) { return $o; } else if (($a->argc > 1) && ($a->argv[1] == 'network')) { - $notif_tpl = get_markup_template('notifications.tpl'); $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, @@ -252,6 +282,8 @@ function notifications_content(&$a) { } $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, '$activetab' => 'network' )); @@ -327,6 +359,8 @@ function notifications_content(&$a) { } $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, '$activetab' => 'home' )); diff --git a/view/mail_head.tpl b/view/mail_head.tpl index 2aeb3006e0..afb65f5373 100644 --- a/view/mail_head.tpl +++ b/view/mail_head.tpl @@ -1,10 +1,3 @@

    $messages

    - - +$tab_content diff --git a/view/notifications.tpl b/view/notifications.tpl index 24f78f37ef..d737a7507e 100644 --- a/view/notifications.tpl +++ b/view/notifications.tpl @@ -1,14 +1,5 @@ - -

    Notifications

    - -

    - Network - Home - Introductions - Messages -

    -
    - +

    $notif_header

    +$tabs
    $notif_content
    From 0fb119496eab2e736d9ea54adef7c9e1237f2799 Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 12 Oct 2011 07:47:41 +0200 Subject: [PATCH 07/18] some work on quattro theme --- view/theme/quattro/jot.tpl | 80 ++++++++++++++ view/theme/quattro/quattro.less | 185 ++++++++++++++++++++++++++++++++ view/theme/quattro/style.css | 178 ++++++++++++++++++++++++++++++ 3 files changed, 443 insertions(+) create mode 100644 view/theme/quattro/jot.tpl diff --git a/view/theme/quattro/jot.tpl b/view/theme/quattro/jot.tpl new file mode 100644 index 0000000000..49c0e9fecd --- /dev/null +++ b/view/theme/quattro/jot.tpl @@ -0,0 +1,80 @@ + +
    +
    +
     
    +
    +
    +
    + +
    + + + + + + + + + + + + {{ if $content }}{{ endif }} + + + +
    +
    +
    diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index 31a25694f0..0addb1c70c 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -374,4 +374,189 @@ section { border: 1px solid @CommentBoxEmptyBorderColor; padding:0.3em; } +#profile-jot-plugin-wrapper, +#profile-jot-submit-wrapper { + margin-top: 10px; +} + + +#profile-jot-submit { + float: left; +} +#profile-upload-wrapper{ + float: left; + margin-left: 10px; +} +#profile-attach-wrapper, +#profile-rotator, +#profile-link-wrapper, +#profile-youtube-wrapper, +#profile-video-wrapper, +#profile-audio-wrapper, +#profile-location-wrapper, +#profile-nolocation-wrapper, +#profile-title-wrapper { + float: left; + margin-left: 20px; +} + +#profile-jot-perms { + float: left; + margin-left: 35px; + margin-right: 35px; +} + +#profile-jot-perms-end { + /*clear: left;*/ + height: 20px; +} + +#profile-jot-plugin-end{ + clear: both; +} +.profile-jot-net { + float: left; + margin-right: 10px; + margin-top: 5px; + margin-bottom: 5px; +} + +#profile-jot-networks-end { + clear: both; +} + +#profile-jot-end, #about-jot-end { + margin-bottom: 15px; +} +#about-jot-submit-wrapper { + margin-top: 15px; +} +/** buttons **/ +.comment-edit-submit, +#search-submit, +#search-save, +#profile-jot-submit{ + border: 1px solid; + background-color: @BodyColor; + font: bold 85%; + color: @Grey1; + height: 20px; + padding: 10px; + border-radius: 8px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; +} + + +/** acl **/ +#photo-edit-perms-select, +#photos-upload-permissions-wrapper, +#profile-jot-acl-wrapper{ + display:block!important; +} + + + +#acl-wrapper { + width: 690px; + float:left; +} +#acl-search { + float:right; + background: #ffffff url("../../../images/search_18.png") no-repeat right center; + padding-right:20px; +} +#acl-showall { + float: left; + display: block; + width: auto; + height: 18px; + background-color: #cccccc; + background-image: url("../../../images/show_all_off.png"); + background-position: 7px 7px; + background-repeat: no-repeat; + padding: 7px 5px 0px 30px; + -webkit-border-radius: 5px ; + -moz-border-radius: 5px; + border-radius: 5px; + color: #999999; +} +#acl-showall.selected { + color: #000000; + background-color: #ff9900; + background-image: url("../../../images/show_all_on.png"); +} + +#acl-list { + height: 210px; + border: 1px solid #cccccc; + clear: both; + margin-top: 30px; + overflow: auto; +} +#acl-list-content { + +} +.acl-list-item { + display: block; + width: 150px; + height: 30px; + border: 1px solid #cccccc; + margin: 5px; + float: left; +} +.acl-list-item img{ + width:22px; + height: 22px; + float: left; + margin: 4px; +} +.acl-list-item p { height: 12px; font-size: 10px; margin: 0px; padding: 2px 0px 1px; overflow: hidden;} +.acl-list-item a { + font-size: 8px; + display: block; + width: 40px; + height: 10px; + float: left; + color: #999999; + background-color: #cccccc; + background-position: 3px 3px; + background-repeat: no-repeat; + margin-right: 5px; + -webkit-border-radius: 2px ; + -moz-border-radius: 2px; + border-radius: 2px; + padding-left: 15px; +} +#acl-wrapper a:hover { + text-decoration: none; + color:#000000; +} +.acl-button-show { background-image: url("../../../images/show_off.png"); } +.acl-button-hide { background-image: url("../../../images/hide_off.png"); } + +.acl-button-show.selected { + color: #000000; + background-color: #9ade00; + background-image: url("../../../images/show_on.png"); +} +.acl-button-hide.selected { + color: #000000; + background-color: #ff4141; + background-image: url("../../../images/hide_on.png"); +} +.acl-list-item.groupshow { border-color: #9ade00; } +.acl-list-item.grouphide { border-color: #ff4141; } +/** /acl **/ + +/** tab buttons **/ +ul.tabs { + list-style-type: none; + padding-bottom: 10px; + + li { + float: left; + margin-left: 20px; + } +} diff --git a/view/theme/quattro/style.css b/view/theme/quattro/style.css index f3237801df..3606a05a2d 100644 --- a/view/theme/quattro/style.css +++ b/view/theme/quattro/style.css @@ -641,3 +641,181 @@ section { border: 1px solid #999999; padding: 0.3em; } +#profile-jot-plugin-wrapper, #profile-jot-submit-wrapper { + margin-top: 10px; +} +#profile-jot-submit { + float: left; +} +#profile-upload-wrapper { + float: left; + margin-left: 10px; +} +#profile-attach-wrapper, +#profile-rotator, +#profile-link-wrapper, +#profile-youtube-wrapper, +#profile-video-wrapper, +#profile-audio-wrapper, +#profile-location-wrapper, +#profile-nolocation-wrapper, +#profile-title-wrapper { + float: left; + margin-left: 20px; +} +#profile-jot-perms { + float: left; + margin-left: 35px; + margin-right: 35px; +} +#profile-jot-perms-end { + /*clear: left;*/ + + height: 20px; +} +#profile-jot-plugin-end { + clear: both; +} +.profile-jot-net { + float: left; + margin-right: 10px; + margin-top: 5px; + margin-bottom: 5px; +} +#profile-jot-networks-end { + clear: both; +} +#profile-jot-end, #about-jot-end { + margin-bottom: 15px; +} +#about-jot-submit-wrapper { + margin-top: 15px; +} +/** buttons **/ +.comment-edit-submit, +#search-submit, +#search-save, +#profile-jot-submit { + border: 1px solid; + background-color: #2d2d2d; + font: bold 85%; + color: #ffffff; + height: 20px; + padding: 10px; + border-radius: 8px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; +} +/** acl **/ +#photo-edit-perms-select, #photos-upload-permissions-wrapper, #profile-jot-acl-wrapper { + display: block!important; +} +#acl-wrapper { + width: 690px; + float: left; +} +#acl-search { + float: right; + background: #ffffff url("../../../images/search_18.png") no-repeat right center; + padding-right: 20px; +} +#acl-showall { + float: left; + display: block; + width: auto; + height: 18px; + background-color: #cccccc; + background-image: url("../../../images/show_all_off.png"); + background-position: 7px 7px; + background-repeat: no-repeat; + padding: 7px 5px 0px 30px; + -webkit-border-radius: 5px ; + -moz-border-radius: 5px; + border-radius: 5px; + color: #999999; +} +#acl-showall.selected { + color: #000000; + background-color: #ff9900; + background-image: url("../../../images/show_all_on.png"); +} +#acl-list { + height: 210px; + border: 1px solid #cccccc; + clear: both; + margin-top: 30px; + overflow: auto; +} +.acl-list-item { + display: block; + width: 150px; + height: 30px; + border: 1px solid #cccccc; + margin: 5px; + float: left; +} +.acl-list-item img { + width: 22px; + height: 22px; + float: left; + margin: 4px; +} +.acl-list-item p { + height: 12px; + font-size: 10px; + margin: 0px; + padding: 2px 0px 1px; + overflow: hidden; +} +.acl-list-item a { + font-size: 8px; + display: block; + width: 40px; + height: 10px; + float: left; + color: #999999; + background-color: #cccccc; + background-position: 3px 3px; + background-repeat: no-repeat; + margin-right: 5px; + -webkit-border-radius: 2px ; + -moz-border-radius: 2px; + border-radius: 2px; + padding-left: 15px; +} +#acl-wrapper a:hover { + text-decoration: none; + color: #000000; +} +.acl-button-show { + background-image: url("../../../images/show_off.png"); +} +.acl-button-hide { + background-image: url("../../../images/hide_off.png"); +} +.acl-button-show.selected { + color: #000000; + background-color: #9ade00; + background-image: url("../../../images/show_on.png"); +} +.acl-button-hide.selected { + color: #000000; + background-color: #ff4141; + background-image: url("../../../images/hide_on.png"); +} +.acl-list-item.groupshow { + border-color: #9ade00; +} +.acl-list-item.grouphide { + border-color: #ff4141; +} +/** /acl **/ +/** tab buttons **/ +ul.tabs { + list-style-type: none; + padding-bottom: 10px; +} +ul.tabs li { + float: left; + margin-left: 20px; +} From 714319457c60c47e0d674c70169677db5ccb57fc Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 12 Oct 2011 08:06:41 +0200 Subject: [PATCH 08/18] little bit more for quattro --- view/theme/quattro/quattro.less | 2 +- view/theme/quattro/style.css | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index 0addb1c70c..ad7584a168 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -441,7 +441,7 @@ section { font: bold 85%; color: @Grey1; height: 20px; - padding: 10px; + padding: 10px 5px; border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; diff --git a/view/theme/quattro/style.css b/view/theme/quattro/style.css index 3606a05a2d..aec3b89307 100644 --- a/view/theme/quattro/style.css +++ b/view/theme/quattro/style.css @@ -701,7 +701,7 @@ section { font: bold 85%; color: #ffffff; height: 20px; - padding: 10px; + padding: 10px 5px; border-radius: 8px; -moz-border-radius: 8px; -webkit-border-radius: 8px; From 98e50a05592a22c335303acd1830b84427470b3d Mon Sep 17 00:00:00 2001 From: Tobias Diekershoff Date: Wed, 12 Oct 2011 09:28:19 +0200 Subject: [PATCH 09/18] better do all the buttons (quattro) --- view/theme/quattro/quattro.less | 5 +---- view/theme/quattro/style.css | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index ad7584a168..9f47cf099a 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -432,10 +432,7 @@ section { margin-top: 15px; } /** buttons **/ -.comment-edit-submit, -#search-submit, -#search-save, -#profile-jot-submit{ +input[type="submit"] { border: 1px solid; background-color: @BodyColor; font: bold 85%; diff --git a/view/theme/quattro/style.css b/view/theme/quattro/style.css index aec3b89307..56c4bc9671 100644 --- a/view/theme/quattro/style.css +++ b/view/theme/quattro/style.css @@ -692,10 +692,7 @@ section { margin-top: 15px; } /** buttons **/ -.comment-edit-submit, -#search-submit, -#search-save, -#profile-jot-submit { +input[type="submit"] { border: 1px solid; background-color: #2d2d2d; font: bold 85%; From 3db43d5a39813f852bad8f4fe90e4c27400b7fae Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 12 Oct 2011 02:21:18 -0700 Subject: [PATCH 10/18] storage race condition --- include/items.php | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/include/items.php b/include/items.php index 4862ca5784..2c23c6f1bd 100644 --- a/include/items.php +++ b/include/items.php @@ -677,7 +677,7 @@ function item_store($arr,$force_parent = false) { if($arr['gravity']) $arr['gravity'] = intval($arr['gravity']); - elseif($arr['parent-uri'] == $arr['uri']) + elseif($arr['parent-uri'] === $arr['uri']) $arr['gravity'] = 0; elseif(activity_match($arr['verb'],ACTIVITY_POST)) $arr['gravity'] = 6; @@ -744,7 +744,7 @@ function item_store($arr,$force_parent = false) { // find the parent and snarf the item id and ACL's // and anything else we need to inherit - $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1", dbesc($arr['parent-uri']), intval($arr['uid']) ); @@ -758,7 +758,8 @@ function item_store($arr,$force_parent = false) { if($r[0]['uri'] != $r[0]['parent-uri']) { $arr['thr-parent'] = $arr['parent-uri']; $arr['parent-uri'] = $r[0]['parent-uri']; - $z = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d LIMIT 1", + $z = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `parent-uri` = '%s' AND `uid` = %d + ORDER BY `id` ASC LIMIT 1", dbesc($r[0]['parent-uri']), dbesc($r[0]['parent-uri']), intval($arr['uid']) @@ -796,7 +797,7 @@ function item_store($arr,$force_parent = false) { $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($arr['uri']), - dbesc($arr['uid']) + intval($arr['uid']) ); if($r && count($r)) { logger('item-store: duplicate item ignored. ' . print_r($arr,true)); @@ -817,14 +818,14 @@ function item_store($arr,$force_parent = false) { // find the item we just created - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1 ORDER BY `id` ASC", $arr['uri'], // already dbesc'd intval($arr['uid']) ); if(! count($r)) { // This is not good, but perhaps we encountered a rare race/cache condition, so back off and try again. sleep(3); - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1 ORDER BY `id` ASC", $arr['uri'], // already dbesc'd intval($arr['uid']) ); @@ -838,6 +839,14 @@ function item_store($arr,$force_parent = false) { logger('item_store: could not locate created item'); return 0; } + if(count($r) > 1) { + logger('item_store: duplicated post occurred. Removing duplicates.'); + q("DELETE FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `id` != %d ", + $arr['uri'], + intval($arr['uid']), + intval($current_post) + ); + } if((! $parent_id) || ($arr['parent-uri'] === $arr['uri'])) $parent_id = $current_post; @@ -2398,8 +2407,8 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { if(strlen($item['owner-name'])) $o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']); - if($item['parent'] != $item['id']) - $o .= '' . "\r\n"; + if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri'])) + $o .= '' . "\r\n"; $o .= '' . xmlify($item['uri']) . '' . "\r\n"; $o .= '' . xmlify($item['title']) . '' . "\r\n"; From 2911bf9434cb1a061ff32d41894ee0dd09ed3993 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 13 Oct 2011 01:00:06 -0700 Subject: [PATCH 11/18] sql issue item_store --- boot.php | 2 +- include/items.php | 4 ++-- view/theme/duepuntozero/style.css | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/boot.php b/boot.php index f483d32f36..fb406867d8 100644 --- a/boot.php +++ b/boot.php @@ -8,7 +8,7 @@ require_once("include/pgettext.php"); require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); -define ( 'FRIENDIKA_VERSION', '2.3.1131' ); +define ( 'FRIENDIKA_VERSION', '2.3.1132' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1095 ); diff --git a/include/items.php b/include/items.php index 2c23c6f1bd..36851b01f5 100644 --- a/include/items.php +++ b/include/items.php @@ -818,14 +818,14 @@ function item_store($arr,$force_parent = false) { // find the item we just created - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1 ORDER BY `id` ASC", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1", $arr['uri'], // already dbesc'd intval($arr['uid']) ); if(! count($r)) { // This is not good, but perhaps we encountered a rare race/cache condition, so back off and try again. sleep(3); - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1 ORDER BY `id` ASC", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1", $arr['uri'], // already dbesc'd intval($arr['uid']) ); diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 40c3cb81b4..9bb866e767 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -1861,7 +1861,7 @@ a.mail-list-link { .widget { border: 1px solid #DDDDDD; - padding: 5px; + padding: 8px; margin-top: 5px; -moz-border-radius:5px; -webkit-border-radius:5px; From d60505ffb088048b7ebcb7e44a15cd454cbd6f1e Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 13 Oct 2011 01:12:03 -0700 Subject: [PATCH 12/18] missing arg xmlize x is friends with y --- mod/ping.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/ping.php b/mod/ping.php index 23b332ee0a..caa78f9b7c 100644 --- a/mod/ping.php +++ b/mod/ping.php @@ -165,7 +165,7 @@ function ping_init(&$a) { } if (count($friends)){ foreach ($friends as $i) { - echo xmlize($a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'],$i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friends with %s"), $i['fname'] ) ); + echo xmlize($a->get_baseurl().'/display/'.$a->user['nickname']."/".$i['parent'],$i['author-name'],$i['author-link'], $i['author-avatar'], relative_date($i['created']), sprintf( t("{0} is now friends with %s"), $i['fname'] ) ); }; } if (count($posts)){ From 4eae1e5d8a37f206177c8eeb379c0f32aa84d5ab Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 13 Oct 2011 15:32:43 -0700 Subject: [PATCH 13/18] don't propagate deletions for other people's stuff --- boot.php | 2 +- include/notifier.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index fb406867d8..376def64d2 100644 --- a/boot.php +++ b/boot.php @@ -8,7 +8,7 @@ require_once("include/pgettext.php"); require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); -define ( 'FRIENDIKA_VERSION', '2.3.1132' ); +define ( 'FRIENDIKA_VERSION', '2.3.1133' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1095 ); diff --git a/include/notifier.php b/include/notifier.php index 9dc524585d..bbddee1097 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -192,6 +192,8 @@ function notifier_run($argv, $argc){ // be notified during this run. // Other DFRN conversation members will be alerted during polled updates. + + // Diaspora members currently are not notified of expirations, and other networks have // either limited or no ability to process deletions. We should at least fix Diaspora // by stringing togther an array of retractions and sending them onward. @@ -210,6 +212,7 @@ function notifier_run($argv, $argc){ */ if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) { + logger('notifier: followup', LOGGER_DEBUG); // local followup to remote post $followup = true; $public_message = false; // not public @@ -218,6 +221,13 @@ function notifier_run($argv, $argc){ else { $followup = false; + // don't send deletions onward for other people's stuff + + if($target_item['deleted'] && (! intval($target_item['wall']))) { + logger('notifier: ignoring delete notification for non-wall item'); + return; + } + if((strlen($parent['allow_cid'])) || (strlen($parent['allow_gid'])) || (strlen($parent['deny_cid'])) @@ -357,6 +367,7 @@ function notifier_run($argv, $argc){ if(($public_message) && $item['private']) continue; + $contact = get_item_contact($item,$contacts); if(! $contact) From 89c771a26e2eca3af8de82a5d57ce05d663ff6d5 Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 13 Oct 2011 15:39:05 -0700 Subject: [PATCH 14/18] remove queued items for contact when removing contact --- include/Contact.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/Contact.php b/include/Contact.php index 45920041eb..45fd368d85 100644 --- a/include/Contact.php +++ b/include/Contact.php @@ -46,6 +46,10 @@ function contact_remove($id) { q("DELETE FROM `event` WHERE `cid` = %d ", intval($id) ); + q("DELETE FROM `queue` WHERE `cid` = %d ", + intval($id) + ); + } From 05e26e489580c82d0db237771d159aed287c5f9b Mon Sep 17 00:00:00 2001 From: Friendika Date: Thu, 13 Oct 2011 18:32:02 -0700 Subject: [PATCH 15/18] handle diaspora profile update message --- include/diaspora.php | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/include/diaspora.php b/include/diaspora.php index 968aa2fd2d..7207daf0cd 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -38,6 +38,9 @@ function diaspora_dispatch($importer,$msg) { elseif($xmlbase->status_message) { $ret = diaspora_post($importer,$xmlbase->status_message); } + elseif($xmlbase->profile) { + $ret = diaspora_profile($importer,$xmlbase->profile); + } elseif($xmlbase->comment) { $ret = diaspora_comment($importer,$xmlbase->comment,$msg); } @@ -994,6 +997,81 @@ function diaspora_retraction($importer,$xml) { return 202; // NOTREACHED } + +function diaspora_profile($importer,$xml) { + + $a = get_app(); + $diaspora_handle = notags(unxmlify($xml->diaspora_handle)); + + $contact = diaspora_get_contact_by_handle($importer['uid'],$diaspora_handle); + if(! $contact) + return; + + if($contact['blocked']) { + logger('diaspora_post: Ignoring this author.'); + return 202; + } + + $name = unxmlify($xml->first_name) . ((strlen($xml->last_name)) ? ' ' . unxmlify($xml->last_name) : ''); + $image_url = unxmlify($xml->image_url); + $birthday = unxmlify($xml->birthday); + + $r = q("SELECT DISTINCT ( `resource-id` ) FROM `photo` WHERE `uid` = %d AND `contact-id` = %d AND `album` = 'Contact Photos' ", + intval($importer['uid']), + intval($contact['id']) + ); + $oldphotos = ((count($r)) ? $r : null); + + $images = import_profile_photo($image_url,$importer['uid'],$contact['id']); + + // TODO handle birthdays - even though we don't know the original timezone (grrr.) + + $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", + dbesc($name), + dbesc(datetime_convert()), + dbesc($images[0]), + dbesc($images[1]), + dbesc($images[2]), + dbesc(datetime_convert()), + intval($contact['id']), + intval($importer['uid']) + ); + if($r) { + if($oldphotos) { + foreach($oldphotos as $ph) { + q("DELETE FROM `photo` WHERE `uid` = %d AND `contact-id` = %d AND `album` = 'Contact Photos' AND `resource-id` = '%s' ", + intval($importer['uid']), + intval($contact['id']), + dbesc($ph['resource-id']) + ); + } + } + } + + return; + +} + + + + + + + + + + + + + + + + + + + + + function diaspora_share($me,$contact) { $a = get_app(); From af6ab381000346f487d1b5b07623510640dd7ee5 Mon Sep 17 00:00:00 2001 From: Friendika Date: Fri, 14 Oct 2011 00:20:37 -0700 Subject: [PATCH 16/18] diaspora birthday notifications --- boot.php | 17 ++++++++--- database.sql | 1 + include/datetime.php | 54 +++++++++++++++++++++++++++++++++ include/diaspora.php | 9 ++++-- include/poller.php | 5 ++- update.php | 6 +++- view/theme/testbubble/style.css | 9 +++++- 7 files changed, 90 insertions(+), 11 deletions(-) diff --git a/boot.php b/boot.php index 376def64d2..2f2a2127f6 100644 --- a/boot.php +++ b/boot.php @@ -10,7 +10,7 @@ require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); define ( 'FRIENDIKA_VERSION', '2.3.1133' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1095 ); +define ( 'DB_UPDATE_VERSION', 1096 ); define ( 'EOL', "
    \r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); @@ -974,6 +974,7 @@ function get_birthdays() { return $o; $bd_format = t('g A l F d') ; // 8 AM Friday January 18 + $bd_short = t('F d'); $r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event` LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid` @@ -993,7 +994,7 @@ function get_birthdays() { if($total) { $o .= ''; $o .= ''; diff --git a/database.sql b/database.sql index ed92aa4c19..2b9be34e06 100644 --- a/database.sql +++ b/database.sql @@ -96,6 +96,7 @@ CREATE TABLE IF NOT EXISTS `contact` ( `info` mediumtext NOT NULL, `profile-id` int(11) NOT NULL DEFAULT '0', `bdyear` CHAR( 4 ) NOT NULL COMMENT 'birthday notify flag', + `bd` date NOT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`), KEY `self` (`self`), diff --git a/include/datetime.php b/include/datetime.php index 3033b88afc..087e6cb20d 100644 --- a/include/datetime.php +++ b/include/datetime.php @@ -393,3 +393,57 @@ function cal($y = 0,$m = 0, $links = false, $class='') { return $o; }} + + +function update_contact_birthdays() { + + // This only handles foreign or alien networks where a birthday has been provided. + // In-network birthdays are handled within local_delivery + + $r = q("SELECT * FROM contact WHERE `bd` != '' AND `bd` != '0000-00-00' AND SUBSTRING(`bd`,1,4) != `bdyear` "); + if(count($r)) { + foreach($r as $rr) { + + logger('update_contact_birthday: ' . $rr['bd']); + + $nextbd = datetime_convert('UTC','UTC','now','Y') . substr($rr['bd'],4); + + /** + * + * Add new birthday event for this person + * + * $bdtext is just a readable placeholder in case the event is shared + * with others. We will replace it during presentation to our $importer + * to contain a sparkle link and perhaps a photo. + * + */ + + $bdtext = t('Birthday:') . ' [url=' . $rr['url'] . ']' . $rr['name'] . '[/url]' ; + + + $r = q("INSERT INTO `event` (`uid`,`cid`,`created`,`edited`,`start`,`finish`,`desc`,`type`,`adjust`) + VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%d' ) ", + intval($rr['uid']), + intval($rr['id']), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc(datetime_convert('UTC','UTC', $nextbd)), + dbesc(datetime_convert('UTC','UTC', $nextbd . ' + 1 day ')), + dbesc($bdtext), + dbesc('birthday'), + intval(0) + ); + + + // update bdyear + + q("UPDATE `contact` SET `bdyear` = '%s', `bd` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1", + dbesc(substr($nextbd,0,4)), + dbesc($nextbd), + intval($rr['uid']), + intval($rr['id']) + ); + + } + } +} \ No newline at end of file diff --git a/include/diaspora.php b/include/diaspora.php index 7207daf0cd..2d9e2883d1 100644 --- a/include/diaspora.php +++ b/include/diaspora.php @@ -1024,9 +1024,11 @@ function diaspora_profile($importer,$xml) { $images = import_profile_photo($image_url,$importer['uid'],$contact['id']); - // TODO handle birthdays - even though we don't know the original timezone (grrr.) + // Generic birthday. We don't know the timezone. The year is irrelevant. - $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", + $birthday = datetime_convert('UTC','UTC',$birthday,'Y-m-d'); + + $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' , `bd` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", dbesc($name), dbesc(datetime_convert()), dbesc($images[0]), @@ -1034,7 +1036,8 @@ function diaspora_profile($importer,$xml) { dbesc($images[2]), dbesc(datetime_convert()), intval($contact['id']), - intval($importer['uid']) + intval($importer['uid']), + dbesc($birthday) ); if($r) { if($oldphotos) { diff --git a/include/poller.php b/include/poller.php index 427f8887ce..cef0647b59 100644 --- a/include/poller.php +++ b/include/poller.php @@ -50,12 +50,15 @@ function poller_run($argv, $argc){ - // once daily run expire in background + // once daily run birthday_updates and then expire in background $d1 = get_config('system','last_expire_day'); $d2 = intval(datetime_convert('UTC','UTC','now','d')); if($d2 != intval($d1)) { + + update_contact_birthdays(); + set_config('system','last_expire_day',$d2); proc_run('php','include/expire.php'); } diff --git a/update.php b/update.php index 5d5190095c..06bbb8b41f 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Sat, 15 Oct 2011 03:26:37 -0700 Subject: [PATCH 17/18] working on long-term solution to relay issue --- boot.php | 4 ++-- database.sql | 2 ++ include/items.php | 18 +++++++----------- include/notifier.php | 11 +++++++++-- update.php | 8 +++++++- 5 files changed, 27 insertions(+), 16 deletions(-) diff --git a/boot.php b/boot.php index 2f2a2127f6..9f382b3022 100644 --- a/boot.php +++ b/boot.php @@ -8,9 +8,9 @@ require_once("include/pgettext.php"); require_once('include/nav.php'); define ( 'FRIENDIKA_PLATFORM', 'Free Friendika'); -define ( 'FRIENDIKA_VERSION', '2.3.1133' ); +define ( 'FRIENDIKA_VERSION', '2.3.1134' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1096 ); +define ( 'DB_UPDATE_VERSION', 1097 ); define ( 'EOL', "
    \r\n" ); define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' ); diff --git a/database.sql b/database.sql index 2b9be34e06..c9e239075c 100644 --- a/database.sql +++ b/database.sql @@ -214,6 +214,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `bookmark` tinyint(1) NOT NULL DEFAULT '0', `unseen` tinyint(1) NOT NULL DEFAULT '1', `deleted` tinyint(1) NOT NULL DEFAULT '0', + `origin` tinyint(1) NOT NULL DEFAULT '0', `last-child` tinyint(1) unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), KEY `guid` (`guid`), @@ -231,6 +232,7 @@ CREATE TABLE IF NOT EXISTS `item` ( KEY `visible` (`visible`), KEY `starred` (`starred`), KEY `deleted` (`deleted`), + KEY `origin` (`origin`), KEY `last-child` (`last-child`), KEY `unseen` (`unseen`), FULLTEXT KEY `title` (`title`), diff --git a/include/items.php b/include/items.php index 36851b01f5..0c3c8b1d7a 100644 --- a/include/items.php +++ b/include/items.php @@ -818,18 +818,10 @@ function item_store($arr,$force_parent = false) { // find the item we just created - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1", + $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC ", $arr['uri'], // already dbesc'd intval($arr['uid']) ); - if(! count($r)) { - // This is not good, but perhaps we encountered a rare race/cache condition, so back off and try again. - sleep(3); - $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' AND `uid` = %d ORDER BY `id` ASC LIMIT 1", - $arr['uri'], // already dbesc'd - intval($arr['uid']) - ); - } if(count($r)) { $current_post = $r[0]['id']; @@ -1873,13 +1865,14 @@ function local_delivery($importer,$data) { $r = q("select `item`.`id`, `contact`.`name`, `contact`.`url`, `contact`.`thumb` from `item` LEFT JOIN `contact` ON `contact`.`id` = `item`.`contact-id` - WHERE `contact`.`self` = 1 AND `item`.`wall` = 1 AND `item`.`uri` = '%s' AND `item`.`uid` = %d LIMIT 1", + WHERE `contact`.`self` = 1 AND `item`.`wall` = 1 AND `item`.`uri` = '%s' AND `item`.`parent-uri` = '%s' + AND `item`.`uid` = %d LIMIT 1", + dbesc($parent_uri), dbesc($parent_uri), intval($importer['importer_uid']) ); if($r && count($r)) { - logger('local_delivery: received remote comment'); $is_like = false; // remote reply to our post. Import and then notify everybody else. @@ -2388,6 +2381,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { $a = get_app(); + if(! $item['parent']) + return; + if($item['deleted']) return '' . "\r\n"; diff --git a/include/notifier.php b/include/notifier.php index bbddee1097..18ad070120 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -142,7 +142,7 @@ function notifier_run($argv, $argc){ $item['deleted'] = 1; } - if((count($items) == 1) && ($items[0]['uri'] === $items[0]['parent-uri'])) { + if((count($items) == 1) && ($items[0]['id'] === $target_item['id']) && ($items[0]['uri'] === $items[0]['parent-uri'])) { logger('notifier: top level post'); $top_level = true; } @@ -205,13 +205,20 @@ function notifier_run($argv, $argc){ /** * - * Be VERY CAREFUL if you make any changes to the following line. Seemingly innocuous changes + * Be VERY CAREFUL if you make any changes to the following lines. Seemingly innocuous changes * have been known to cause runaway conditions which affected several servers, along with * permissions issues. * */ + $relay_to_owner = false; + if((! $top_level) && ($parent['wall'] == 0) && (! $expire) && (stristr($target_item['uri'],$localhost))) { + $relay_to_owner = true; + } + + + if($relay_to_owner) { logger('notifier: followup', LOGGER_DEBUG); // local followup to remote post $followup = true; diff --git a/update.php b/update.php index 06bbb8b41f..ed6b9e05eb 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ Date: Mon, 17 Oct 2011 07:48:33 +0200 Subject: [PATCH 18/18] video button only for dispy and quattro --- view/theme/dispy/jot.tpl | 3 --- view/theme/quattro/jot.tpl | 3 --- 2 files changed, 6 deletions(-) diff --git a/view/theme/dispy/jot.tpl b/view/theme/dispy/jot.tpl index f6bf91ffa2..a2c883e4be 100644 --- a/view/theme/dispy/jot.tpl +++ b/view/theme/dispy/jot.tpl @@ -37,9 +37,6 @@ - diff --git a/view/theme/quattro/jot.tpl b/view/theme/quattro/jot.tpl index 49c0e9fecd..d65ac8b17d 100644 --- a/view/theme/quattro/jot.tpl +++ b/view/theme/quattro/jot.tpl @@ -31,9 +31,6 @@ -
    - youtube -