diff options
44 files changed, 1121 insertions, 293 deletions
@@ -8,9 +8,9 @@ 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.1134' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); -define ( 'DB_UPDATE_VERSION', 1094 ); +define ( 'DB_UPDATE_VERSION', 1097 ); define ( 'EOL', "<br />\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 .= '<div id="birthday-notice" class="birthday-notice fakelink" onclick=openClose(\'birthday-wrapper\'); >' . t('Birthday Reminders') . ' ' . '(' . $total . ')' . '</div>'; $o .= '<div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">' . t('Birthdays this week:') . '</div>'; - $o .= '<div id="birthday-adjust">' . t("\x28Adjusted for local time\x29") . '</div>'; +// $o .= '<div id="birthday-adjust">' . t("\x28Adjusted for local time\x29") . '</div>'; $o .= '<div id="birthday-title-end"></div>'; foreach($r as $rr) { @@ -1001,10 +1002,16 @@ function get_birthdays() { continue; $now = strtotime('now'); $today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false); + $sparkle = ''; + $url = $rr['url']; + if($rr['network'] === NETWORK_DFRN) { + $sparkle = " sparkle"; + $url = $a->get_baseurl() . '/redir/' . $rr['cid']; + } - $o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="sparkle" target="redir" href="' - . $a->get_baseurl() . '/redir/' . $rr['cid'] . '">' . $rr['name'] . '</a> ' - . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '') + $o .= '<div class="birthday-list" id="birthday-' . $rr['eid'] . '"><a class="birthday-link$sparkle" target="redir" href="' + . $url . '">' . $rr['name'] . '</a> ' + . day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : '') . '</div>' ; } $o .= '</div></div>'; diff --git a/database.sql b/database.sql index 15e2f2cca..c9e239075 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`), @@ -193,6 +194,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, @@ -212,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`), @@ -229,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/Contact.php b/include/Contact.php index 45920041e..45fd368d8 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) + ); + } diff --git a/include/api.php b/include/api.php index 74b4aaf6e..1334d8eae 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('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s', - '[youtube]$1[/youtube]', $txt); - - $txt = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#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 9abc7c439..b33be686e 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", '<iframe width="425" height="350" src="http://www.youtube.com/embed/$1" frameborder="0" ></iframe>', $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", '<iframe width="425" height="350" src="http://player.vimeo.com/video/$1" frameborder="0" ></iframe>', $Text); // $Text = preg_replace("/\[youtube\](.*?)\[\/youtube\]/", '<object width="425" height="350" type="application/x-shockwave-flash" data="http://www.youtube.com/v/$1" ><param name="movie" value="http://www.youtube.com/v/$1"></param><!--[if IE]><embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" width="425" height="350" /><![endif]--></object>', $Text); diff --git a/include/contact_widgets.php b/include/contact_widgets.php new file mode 100644 index 000000000..efb833aaf --- /dev/null +++ b/include/contact_widgets.php @@ -0,0 +1,40 @@ +<?php + +function follow_widget() { + + return 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') + )); + +} + +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'] .= '<div class="side-link" id="side-invite-remain">' + . sprintf( tt('%d invitation available','%d invitations available',$x), $x) + . '</div>' . $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/include/conversation.php b/include/conversation.php index 18f6d080b..29fa77902 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 <strong>everybody</strong>'), '$linkurl' => t('Please enter a link URL:'), - '$utubeurl' => t('Please enter a YouTube link:'), - '$vidurl' => t("Please enter a video\x28.ogg\x29 link/URL:"), - '$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/datetime.php b/include/datetime.php index 3033b88af..087e6cb20 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 968aa2fd2..2d9e2883d 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); } @@ -995,6 +998,84 @@ function diaspora_retraction($importer,$xml) { // 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']); + + // Generic birthday. We don't know the timezone. The year is irrelevant. + + $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]), + dbesc($images[1]), + dbesc($images[2]), + dbesc(datetime_convert()), + intval($contact['id']), + intval($importer['uid']), + dbesc($birthday) + ); + 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(); $myaddr = $me['nickname'] . '@' . substr($a->get_baseurl(), strpos($a->get_baseurl(),'://') + 3); diff --git a/include/items.php b/include/items.php index 8360a42ec..0c3c8b1d7 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('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s', - '[youtube]$1[/youtube]', $res['body']); - - $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#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'] .= '<orig>' . xmlify($body) . '</orig>' . "\n"; if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s', - '[youtube]$1[/youtube]', $body); - - $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#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'] .= '<orig>' . xmlify($body) . '</orig>' . "\n"; if((strpos($body,'<') !== false) || (strpos($body,'>') !== false)) { - $body = preg_replace('#<object[^>]+>.+?' . 'http://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s', - '[youtube]$1[/youtube]', $body); - - $res['body'] = preg_replace('#<iframe[^>].+?' . 'http://www.youtube.com/embed/([A-Za-z0-9\-_=]+).+?</iframe>#s', - '[youtube]$1[/youtube]', $res['body']); + $body = html2bb_video($body); $config = HTMLPurifier_Config::createDefault(); $config->set('Cache.DefinitionImpl', null); @@ -690,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; @@ -757,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']) ); @@ -771,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']) @@ -809,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)); @@ -830,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 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 LIMIT 1", - $arr['uri'], // already dbesc'd - intval($arr['uid']) - ); - } if(count($r)) { $current_post = $r[0]['id']; @@ -851,6 +831,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; @@ -1877,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. @@ -2392,6 +2381,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false) { $a = get_app(); + if(! $item['parent']) + return; + if($item['deleted']) return '<at:deleted-entry ref="' . xmlify($item['uri']) . '" when="' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '" />' . "\r\n"; @@ -2411,8 +2403,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 .= '<thr:in-reply-to ref="' . xmlify($item['parent-uri']) . '" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n"; + if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri'])) + $o .= '<thr:in-reply-to ref="' . xmlify($item['parent-uri']) . '" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n"; $o .= '<id>' . xmlify($item['uri']) . '</id>' . "\r\n"; $o .= '<title>' . xmlify($item['title']) . '</title>' . "\r\n"; diff --git a/include/nav.php b/include/nav.php index 600043ee5..5c24df51e 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/include/notifier.php b/include/notifier.php index 90111600a..18ad07012 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; } @@ -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. @@ -203,13 +205,21 @@ 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; $public_message = false; // not public @@ -218,6 +228,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 +374,7 @@ function notifier_run($argv, $argc){ if(($public_message) && $item['private']) continue; + $contact = get_item_contact($item,$contacts); if(! $contact) @@ -779,6 +797,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/poller.php b/include/poller.php index 427f8887c..cef0647b5 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/include/text.php b/include/text.php index fd413b7d6..299410a63 100644 --- a/include/text.php +++ b/include/text.php @@ -1003,3 +1003,37 @@ if (!function_exists('str_getcsv')) { } } } + +function cleardiv() { + return '<div class="clear"></div>'; +} + + +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('#<object[^>]+>(.*?)https+://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+)(.*?)</object>#ism', + '[youtube]$2[/youtube]', $s); + + $s = preg_replace('#<iframe[^>](.*?)https+://www.youtube.com/embed/([A-Za-z0-9\-_=]+)(.*?)</iframe>#ism', + '[youtube]$2[/youtube]', $s); + + $s = preg_replace('#<iframe[^>](.*?)https+://player.vimeo.com/video/([0-9]+)(.*?)</iframe>#ism', + '[vimeo]$2[/vimeo]', $s); + + return $s; +}
\ No newline at end of file diff --git a/mod/community.php b/mod/community.php index cb255029f..34c992bad 100644 --- a/mod/community.php +++ b/mod/community.php @@ -1,5 +1,12 @@ <?php +function community_init(&$a) { + if(! local_user()) + unset($_SESSION['theme']); + + +} + function community_content(&$a, $update = 0) { @@ -19,9 +26,6 @@ function community_content(&$a, $update = 0) { require_once('include/security.php'); require_once('include/conversation.php'); - if(x($_SESSION,'theme')) - unset($_SESSION['theme']); - $o .= '<h3>' . t('Community') . '</h3>'; if(! $update) { diff --git a/mod/contacts.php b/mod/contacts.php index ea429d39f..9bbcea07d 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -19,38 +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'] .= 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'] .= '<div class="side-link" id="side-invite-remain">' - . sprintf( tt('%d invitation available','%d invitations available',$x), $x) - . '</div>' . $inv; - } - } + $a->page['aside'] .= follow_widget(); - $tpl = get_markup_template('follow.tpl'); - - $findSimilarLink = '<div class="side-link" id="side-match-link"><a href="match" >' - . t('Similar Interests') . '</a></div>'; - - $inv = ''; - if($a->config['register_policy'] != REGISTER_CLOSED) { - $inv = '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>'; - } - - $a->page['aside'] .= replace_macros($tpl,array( - '$label' => t('Connect/Follow'), - '$hint' => t('Example: bob@example.com, http://example.com/barbara'), - '$follow' => t('Follow'), - '$findSimilar' => $findSimilarLink, - '$inviteFriends' => $inv - )); + $a->page['aside'] .= group_side('contacts','group',false,0,$contact_id); - + $a->page['aside'] .= findpeople_widget(); } @@ -351,6 +329,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) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""), '$submit' => t('Find'), '$cmd' => $a->cmd diff --git a/mod/directory.php b/mod/directory.php index 93abcd5de..5f00b4f5a 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 = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory' . '">' . t('Normal site view') . '</a></div></li></ul>'; else - $admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory/all' . '">' . t('View all site entries') . '</a></div></li></ul>'; + $admin = '<ul><li><div id="directory-admin-link"><a href="' . $a->get_baseurl() . '/directory/all' . '">' . t('Admin - View all site entries') . '</a></div></li></ul>'; } $o .= replace_macros($tpl, array( '$search' => $search, '$globaldir' => $globaldir, + '$desc' => t('Find on this site'), '$admin' => $admin, '$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""), '$sitedir' => t('Site Directory'), diff --git a/mod/tagmatch.php b/mod/dirfind.php index 8023fa433..801018276 100644 --- a/mod/tagmatch.php +++ b/mod/dirfind.php @@ -1,13 +1,26 @@ <?php +function dirfind_init(&$a) { -function tagmatch_content(&$a) { + require_once('include/contact_widgets.php'); + + if(! x($a->page,'aside')) + $a->page['aside'] = ''; + + $a->page['aside'] .= follow_widget(); + + $a->page['aside'] .= findpeople_widget(); +} + + + +function dirfind_content(&$a) { $search = notags(trim($_REQUEST['search'])); $o = ''; - $o .= '<h2>' . t('Tag Match') . ' - ' . $search . '</h2>'; + $o .= '<h2>' . t('People Search') . ' - ' . $search . '</h2>'; if($search) { diff --git a/mod/item.php b/mod/item.php index 08c5e68b8..9e6d33230 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 eea2dad4f..c33bbd5c2 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/message.php b/mod/message.php index d4772d026..39aa0479f 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/network.php b/mod/network.php index 9b7c4e611..5aa39bf63 100644 --- a/mod/network.php +++ b/mod/network.php @@ -78,11 +78,13 @@ function saved_searches($search) { if(count($r)) { $o .= '<ul id="saved-search-ul">' . "\r\n"; foreach($r as $rr) { - $o .= '<li class="saved-search-li clear"><a href="network/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="network/?f&search=' . urlencode($rr['term']) . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n"; + $o .= '<li class="saved-search-li clear"><a href="network/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="network/?f=&search=' . urlencode($rr['term']) . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n"; } $o .= '</ul>'; } + $o .= '<div class="clear"></div>'; + $o .= '</div>' . "\r\n"; return $o; diff --git a/mod/notifications.php b/mod/notifications.php index 52ce90e14..9761a944d 100644 --- a/mod/notifications.php +++ b/mod/notifications.php @@ -62,28 +62,46 @@ function notifications_content(&$a) { notice( t('Permission denied.') . EOL); return; } - - $notif_tpl = get_markup_template('notifications.tpl'); - + + nav_set_selected('notifications'); + + $o = ''; $tabs = array( - 'net' => array('label' => t('Network'), 'url'=>$a->get_baseurl().'/notifications/network', 'sel'=>''), - 'home' => array('label' => t('Home'), 'url'=>$a->get_baseurl().'/notifications/home', 'sel'=>''), - 'intros'=> array('label' => t('Introductions'), 'url'=>$a->get_baseurl().'/notifications/intros', 'sel'=>''), - 'msg' => array('label' => t('Messages'), 'url'=>$a->get_baseurl().'/message', 'sel'=>''), + 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'=> '', + ), ); - - - - $o = ''; + $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 $sql_extra = " AND `ignore` = 0 "; - + $notif_tpl = get_markup_template('notifications.tpl'); $notif_content .= '<a href="' . ((strlen($sql_extra)) ? 'notifications/intros/all' : 'notifications/intros' ) . '" id="notifications-show-hide-link" >' . ((strlen($sql_extra)) ? t('Show Ignored Requests') : t('Hide Ignored Requests')) . '</a></div>' . "\r\n"; @@ -175,12 +193,13 @@ function notifications_content(&$a) { } } else - $notif_content .= t('<p>No notifications.</p>'); - - $tabs['intros']['sel']='active'; + info( t('No notifications.') . EOL); + $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, - '$tabs' => $tabs, + '$activetab' => 'intros' )); $o .= paginate($a); @@ -188,6 +207,7 @@ function notifications_content(&$a) { } 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`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` as `object`, @@ -262,14 +282,16 @@ function notifications_content(&$a) { $notif_content = t('Nothing new!'); } - $tabs['net']['sel']='active'; $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, - '$tabs' => $tabs, + '$activetab' => 'network' )); } else if (($a->argc > 1) && ($a->argv[1] == 'home')) { + $notif_tpl = get_markup_template('notifications.tpl'); $r = q("SELECT `item`.`id`,`item`.`parent`, `item`.`verb`, `item`.`author-name`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` as `object`, @@ -337,10 +359,11 @@ function notifications_content(&$a) { $notif_content = t('Nothing new!'); } - $tabs['home']['sel'] = 'active'; $o .= replace_macros($notif_tpl,array( + '$notif_header' => t('Notifications'), + '$tabs' => $tab_content, '$notif_content' => $notif_content, - '$tabs' => $tabs, + '$activetab' => 'home' )); } diff --git a/mod/ping.php b/mod/ping.php index 546c46f16..caa78f9b7 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-name'],$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 "<notice>".($m)."</notice>"; + echo "<notice>".xmlify($m)."</notice>"; } - //$_SESSION['sysmsg']=array(); unset($_SESSION['sysmsg']); } if(x($_SESSION,'sysmsg_info')){ foreach ($_SESSION['sysmsg_info'] as $m){ - echo "<info>".($m)."</info>"; + echo "<info>".xmlify($m)."</info>"; } - //$_SESSION['sysmsg_info']=array(); unset($_SESSION['sysmsg_info']); } diff --git a/mod/search.php b/mod/search.php index 034794e17..2a8bf1484 100644 --- a/mod/search.php +++ b/mod/search.php @@ -15,7 +15,7 @@ function search_saved_searches() { foreach($r as $rr) { $o .= '<li class="saved-search-li clear"><a href="search/?f=&remove=1&search=' . $rr['term'] . '" class="icon drophide savedsearchdrop" title="' . t('Remove term') . '" onclick="return confirmDelete();" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> <a href="search/?f=&search=' . $rr['term'] . '" class="savedsearchterm" >' . $rr['term'] . '</a></li>' . "\r\n"; } - $o .= '</ul></div>' . "\r\n"; + $o .= '</ul><div class="clear"></div></div>' . "\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 = '<div id="live-search"></div>' . "\r\n"; - $o .= '<h3>' . t('Search') . '</h3>'; + $o .= '<h3>' . t('Search This Site') . '</h3>'; if(x($a->data,'search')) $search = notags(trim($a->data['search'])); diff --git a/mod/settings.php b/mod/settings.php index 7112db887..b5997fbe7 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')) @@ -313,9 +325,19 @@ function settings_content(&$a) { '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,29 +366,15 @@ function settings_content(&$a) { )); return $o; } - - require_once('include/acl_selectors.php'); - $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1", - intval(local_user()) - ); - if(count($p)) - $profile = $p[0]; + if(($a->argc > 1) && ($a->argv[1] === 'connectors')) { - $username = $a->user['username']; - $email = $a->user['email']; - $nickname = $a->user['nickname']; - $timezone = $a->user['timezone']; - $notify = $a->user['notify-flags']; - $defloc = $a->user['default-location']; - $openid = $a->user['openid']; - $maxreq = $a->user['maxreq']; - $expire = ((intval($a->user['expire'])) ? $a->user['expire'] : ''); - $blockwall = $a->user['blockwall']; - - if(! strlen($a->user['timezone'])) - $timezone = date_default_timezone_get(); + $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')) @@ -389,6 +397,60 @@ function settings_content(&$a) { $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'); + + $p = q("SELECT * FROM `profile` WHERE `is-default` = 1 AND `uid` = %d LIMIT 1", + intval(local_user()) + ); + if(count($p)) + $profile = $p[0]; + + $username = $a->user['username']; + $email = $a->user['email']; + $nickname = $a->user['nickname']; + $timezone = $a->user['timezone']; + $notify = $a->user['notify-flags']; + $defloc = $a->user['default-location']; + $openid = $a->user['openid']; + $maxreq = $a->user['maxreq']; + $expire = ((intval($a->user['expire'])) ? $a->user['expire'] : ''); + $blockwall = $a->user['blockwall']; + + if(! strlen($a->user['timezone'])) + $timezone = date_default_timezone_get(); + + + $pageset_tpl = get_markup_template('pagetypes.tpl'); $pagetype = replace_macros($pageset_tpl,array( '$page_normal' => array('page-flags', t('Normal Account'), PAGE_NORMAL, @@ -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 723f12c1a..ed6b9e05e 100644 --- a/update.php +++ b/update.php @@ -1,6 +1,6 @@ <?php -define( 'UPDATE_VERSION' , 1094 ); +define( 'UPDATE_VERSION' , 1097 ); /** * @@ -786,4 +786,18 @@ function update_1093() { q("ALTER TABLE `group` ADD `visible` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `uid` "); -}
\ No newline at end of file +} + +function update_1094() { + q("ALTER TABLE `item` ADD `postopts` TEXT NOT NULL AFTER `target` "); +} + +function update_1095() { + q("ALTER TABLE `contact` ADD `bd` DATE NOT NULL AFTER `bdyear` "); +} + +function update_1096() { + q("ALTER TABLE `item` ADD `origin` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `deleted` , ADD INDEX ( `origin` ) "); +} + + diff --git a/view/contacts-top.tpl b/view/contacts-top.tpl index 324980093..4dffda1ce 100644 --- a/view/contacts-top.tpl +++ b/view/contacts-top.tpl @@ -4,6 +4,7 @@ $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> diff --git a/view/directory_header.tpl b/view/directory_header.tpl index ba90b94f8..1f03540f2 100644 --- a/view/directory_header.tpl +++ b/view/directory_header.tpl @@ -7,6 +7,7 @@ $finding <div id="directory-search-wrapper"> <form id="directory-search-form" action="directory" method="get" > +<span class="dirsearch-desc">$desc</span> <input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" /> <input type="submit" name="submit" id="directory-search-submit" value="$submit" class="button" /> </form> diff --git a/view/follow.tpl b/view/follow.tpl index 2c024930c..259e74a93 100644 --- a/view/follow.tpl +++ b/view/follow.tpl @@ -1,9 +1,8 @@ <div id="follow-sidebar" class="widget"> - <h3>Find People</h3> + <h3>$connect</h3> + <div id="connect-desc">$desc</div> <form action="follow" method="post" /> <input id="side-follow-url" type="text" name="url" size="24" title="$hint" /><input id="side-follow-submit" type="submit" name="submit" value="$follow" /> </form> - $findSimilar - $inviteFriends </div> diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 5eb07db44..22bd0aa5b 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 aa9892cbb..71b92986d 100644 --- a/view/jot.tpl +++ b/view/jot.tpl @@ -32,9 +32,6 @@ <div id="profile-link-wrapper" style="display: $visitor;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" > <a id="profile-link" class="icon link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a> </div> - <div id="profile-youtube-wrapper" style="display: $visitor;" > - <a id="profile-youtube" class="icon youtube" title="$youtube" onclick="jotGetVideo();return false;"></a> - </div> <div id="profile-video-wrapper" style="display: $visitor;" > <a id="profile-video" class="icon video" title="$video" onclick="jotVideoURL();return false;"></a> </div> diff --git a/view/mail_head.tpl b/view/mail_head.tpl index 2aeb3006e..afb65f537 100644 --- a/view/mail_head.tpl +++ b/view/mail_head.tpl @@ -1,10 +1,3 @@ <h3>$messages</h3> -<div class="message-links"> -<ul> -<li><a href="message" class="button message-link-inbox">$inbox</a></li> -<li><a href="message/sent" class="button message-link-outbox">$outbox</a></li> -<li><a href="message/new" class="button message-link-new">$new</a></li> -</ul> -</div> -<div class="message-links-end"></div> +$tab_content diff --git a/view/peoplefind.tpl b/view/peoplefind.tpl new file mode 100644 index 000000000..4b3f01b88 --- /dev/null +++ b/view/peoplefind.tpl @@ -0,0 +1,12 @@ +<div id="peoplefind-sidebar" class="widget"> + <h3>$findpeople</h3> + <div id="peoplefind-desc">$desc</div> + <form action="dirfind" method="post" /> + <input id="side-peoplefind-url" type="text" name="search" size="24" title="$hint" /><input id="side-peoplefind-submit" type="submit" name="submit" value="$findthem" /> + </form> + <div class="side-link" id="side-match-link"><a href="match" >$similar</a></div> + {{ if $inv }} + <div class="side-link" id="side-invite-link" ><a href="invite" >$inv</a></div> + {{ endif }} +</div> + diff --git a/view/settings.tpl b/view/settings.tpl index b79fbfe43..3bbfc6ffd 100644 --- a/view/settings.tpl +++ b/view/settings.tpl @@ -4,9 +4,6 @@ $tabs $nickname_block -<div id="uexport-link"><a href="uexport" >$uexport</a></div> - - <form action="settings" id="settings-form" method="post" autocomplete="off" > @@ -95,27 +92,6 @@ $hide_wall <input type="submit" name="submit" class="settings-submit" value="$submit" /> </div> -{{ if $mail_disabled }} - -{{ else }} - <h3 class="settings-heading">$h_imap</h3> - <p>$imap_desc</p> - {{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}} - - <div class="settings-submit-wrapper" > - <input type="submit" name="submit" class="settings-submit" value="$submit" /> - </div> -{{ endif }} - - - <h3 class="settings-heading">$h_advn</h3> diff --git a/view/settings_addons.tpl b/view/settings_addons.tpl index 8fe0b5194..2cbfd17e9 100644 --- a/view/settings_addons.tpl +++ b/view/settings_addons.tpl @@ -3,7 +3,7 @@ $tabs <h1>$title</h1> -<form action="settings/addon" method="post" > +<form action="settings/addon" method="post" autocomplete="off"> $settings_addons diff --git a/view/settings_connectors.tpl b/view/settings_connectors.tpl new file mode 100644 index 000000000..0f3357873 --- /dev/null +++ b/view/settings_connectors.tpl @@ -0,0 +1,34 @@ +$tabs + +<h1>$title</h1> + +<div class="connector_statusmsg">$diasp_enabled</div> +<div class="connector_statusmsg">$ostat_enabled</div> + +<form action="settings/connectors" method="post" autocomplete="off"> + +$settings_connectors + +{{ if $mail_disabled }} + +{{ else }} + <div class="settings-block"> + <h3 class="settings-heading">$h_imap</h3> + <p>$imap_desc</p> + {{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}} + + <div class="settings-submit-wrapper" > + <input type="submit" id="imap-submit" name="imap-submit" class="settings-submit" value="$submit" /> + </div> + </div> +{{ endif }} + +</form> + diff --git a/view/theme/dispy/jot.tpl b/view/theme/dispy/jot.tpl index f6bf91ffa..a2c883e4b 100644 --- a/view/theme/dispy/jot.tpl +++ b/view/theme/dispy/jot.tpl @@ -37,9 +37,6 @@ <div id="profile-link-wrapper" class="jot-tool" style="display: none;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" > <a id="profile-link" class="icon border link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;"></a> </div> - <div id="profile-youtube-wrapper" class="jot-tool" style="display: none;" > - <a id="profile-youtube" class="icon border youtube" title="$youtube" onclick="jotGetVideo(); return false;"></a> - </div> <div id="profile-video-wrapper" class="jot-tool" style="display: none;" > <a id="profile-video" class="icon border video" title="$video" onclick="jotVideoURL(); return false;"></a> </div> diff --git a/view/theme/duepuntozero/nav.tpl b/view/theme/duepuntozero/nav.tpl index b13ea9ae2..afa918065 100644 --- a/view/theme/duepuntozero/nav.tpl +++ b/view/theme/duepuntozero/nav.tpl @@ -30,8 +30,8 @@ {{ if $nav.community }} <a id="nav-community-link" class="nav-commlink $nav.community.2 $sel.community" href="$nav.community.0" title="$nav.community.3" >$nav.community.1</a> {{ endif }} - {{ if $nav.notifications }} - <a id="nav-notify-link" class="nav-commlink $nav.notifications.2 $sel.notifications" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a> + {{ if $nav.introductions }} + <a id="nav-notify-link" class="nav-commlink $nav.introductions.2 $sel.introductions" href="$nav.introductions.0" title="$nav.introductions.3" >$nav.introductions.1</a> <span id="intro-update" class="nav-ajax-left"></span> {{ endif }} {{ if $nav.messages }} diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index b46a03c38..9bb866e76 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: 8px; + 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/quattro/jot.tpl b/view/theme/quattro/jot.tpl new file mode 100644 index 000000000..d65ac8b17 --- /dev/null +++ b/view/theme/quattro/jot.tpl @@ -0,0 +1,77 @@ + +<div id="profile-jot-wrapper" > + <div id="profile-jot-banner-wrapper"> + <div id="profile-jot-desc" > </div> + <div id="character-counter" class="grey"></div> + </div> + <div id="profile-jot-banner-end"></div> + + <form id="profile-jot-form" action="$action" method="post" > + <input type="hidden" name="type" value="$ptyp" /> + <input type="hidden" name="profile_uid" value="$profile_uid" /> + <input type="hidden" name="return" value="$return_path" /> + <input type="hidden" name="location" id="jot-location" value="$defloc" /> + <input type="hidden" name="coord" id="jot-coord" value="" /> + <input type="hidden" name="title" id="jot-title" value="" /> + <input type="hidden" name="post_id" value="$post_id" /> + + <img id="profile-jot-text-loading" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> + <textarea rows="5" cols="64" class="profile-jot-text" id="profile-jot-text" name="body" >{{ if $content }}$content{{ else }}$share{{ endif }}</textarea> + + {{ if $content }}<script>initEditor();</script>{{ endif }} + +<div id="profile-jot-submit-wrapper" style="display:none"> + <div id="profile-upload-wrapper" style="display: $visitor;" > + <div id="wall-image-upload-div" ><a href="#" onclick="return false;" id="wall-image-upload" class="camera" title="$upload">image upload</a></div> + </div> + <div id="profile-attach-wrapper" style="display: $visitor;" > + <div id="wall-file-upload-div" ><a href="#" onclick="return false;" id="wall-file-upload" class="attach" title="$attach">attach file</a></div> + </div> + + <div id="profile-link-wrapper" style="display: $visitor;" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" > + <a id="profile-link" class="link" title="$weblink" ondragenter="return linkdropper(event);" ondragover="return linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;">enter link</a> + </div> + <div id="profile-video-wrapper" style="display: $visitor;" > + <a id="profile-video" class="video" title="$video" onclick="jotVideoURL();return false;">video url</a> + </div> + <div id="profile-audio-wrapper" style="display: $visitor;" > + <a id="profile-audio" class="audio" title="$audio" onclick="jotAudioURL();return false;">audio url</a> + </div> + <div id="profile-location-wrapper" style="display: $visitor;" > + <a id="profile-location" class="globe" title="$setloc" onclick="jotGetLocation();return false;">set location</a> + </div> + <div id="profile-nolocation-wrapper" style="display: none;" > + <a id="profile-nolocation" class="noglobe" title="$noloc" onclick="jotClearLocation();return false;">no location</a> + </div> + <div id="profile-title-wrapper" style="display: $visitor;" > + <a id="profile-title" class="article" title="$title" onclick="jotTitle();return false;">title</a> + </div> + <div id="profile-jot-perms" class="profile-jot-perms" style="display: $pvisit;" > + <a href="#profile-jot-acl-wrapper" id="jot-perms-icon" class="$lockstate" title="$permset" >permissions</a>$bang + </div> +<input type="submit" id="profile-jot-submit" name="submit" value="$share" /> + <div id="profile-jot-perms-end"></div> + + <div id="profile-jot-plugin-wrapper"> + $jotplugins + </div> + + <div id="profile-rotator-wrapper" style="display: $visitor;" > + <img id="profile-rotator" src="images/rotator.gif" alt="$wait" title="$wait" style="display: none;" /> + </div> + + <div style="display: none;"> + <div id="profile-jot-acl-wrapper" style="width:auto;height:auto;overflow:auto;"> + $acl + <hr style="clear:both"/> + <div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle" /> + <div id="profile-jot-email-end"></div> + $jotnets + </div> + </div> + +</div> + +<div id="profile-jot-end"></div> +</form> +</div> diff --git a/view/theme/quattro/quattro.less b/view/theme/quattro/quattro.less index 31a25694f..9f47cf099 100644 --- a/view/theme/quattro/quattro.less +++ b/view/theme/quattro/quattro.less @@ -374,4 +374,186 @@ 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 **/ +input[type="submit"] { + border: 1px solid; + background-color: @BodyColor; + font: bold 85%; + color: @Grey1; + height: 20px; + padding: 10px 5px; + 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 f3237801d..56c4bc967 100644 --- a/view/theme/quattro/style.css +++ b/view/theme/quattro/style.css @@ -641,3 +641,178 @@ 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 **/ +input[type="submit"] { + border: 1px solid; + background-color: #2d2d2d; + font: bold 85%; + color: #ffffff; + height: 20px; + padding: 10px 5px; + 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; +} diff --git a/view/theme/testbubble/style.css b/view/theme/testbubble/style.css index 341314c1d..4a3edc163 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; @@ -2105,10 +2105,17 @@ margin-left: 0px; .openid { background: url(login-bg.gif) no-repeat; background-position: 0 50%; - padding-left: 18px; + padding-left: 18px !important; width: 385px; } +.openid { + width: 150px !important; +} +#login-password { + width: 168px !important; +} + #profile-tabs-wrapper { padding-top: 10px; } @@ -2211,6 +2218,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; @@ -2595,6 +2621,10 @@ tr { width: 150px; } +.directory-end { + clear: both; +} + /* ========= */ /* = Admin = */ /* ========= */ |