]> git.mxchange.org Git - friendica.git/commitdiff
Merge remote-tracking branch 'friendika/master'
authorFabio Comuni <fabrix.xm@gmail.com>
Mon, 17 Oct 2011 14:37:37 +0000 (16:37 +0200)
committerFabio Comuni <fabrix.xm@gmail.com>
Mon, 17 Oct 2011 14:37:37 +0000 (16:37 +0200)
45 files changed:
boot.php
database.sql
include/Contact.php
include/api.php
include/bbcode.php
include/contact_widgets.php [new file with mode: 0644]
include/conversation.php
include/datetime.php
include/diaspora.php
include/items.php
include/nav.php
include/notifier.php
include/poller.php
include/text.php
mod/community.php
mod/contacts.php
mod/directory.php
mod/dirfind.php [new file with mode: 0644]
mod/item.php
mod/match.php
mod/message.php
mod/network.php
mod/notifications.php
mod/ping.php
mod/search.php
mod/settings.php
mod/tagmatch.php [deleted file]
update.php
view/contacts-top.tpl
view/directory_header.tpl
view/follow.tpl
view/jot-header.tpl
view/jot.tpl
view/mail_head.tpl
view/peoplefind.tpl [new file with mode: 0644]
view/settings.tpl
view/settings_addons.tpl
view/settings_connectors.tpl [new file with mode: 0644]
view/theme/dispy/jot.tpl
view/theme/duepuntozero/nav.tpl
view/theme/duepuntozero/style.css
view/theme/quattro/jot.tpl [new file with mode: 0644]
view/theme/quattro/quattro.less
view/theme/quattro/style.css
view/theme/testbubble/style.css

index e9c3f0e31ef59b516b5dff8b64328e78b617e552..9f382b3022c21ed3b425464a8982caf2710be024 100644 (file)
--- 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.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>';
index 15e2f2ccac0058c08e58917d4aaa371d9c121379..c9e239075c6eb0915dd5bdc4c013f17925f281d0 100644 (file)
@@ -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`),
index 45920041eb6550e6256565466dd8967ab7933e2b..45fd368d856812fe04fdd112245cb04e03c9a93f 100644 (file)
@@ -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)
+       );
+
 }
 
 
index 74b4aaf6e1d85e5cedbf998194c7c57c2813f1bc..1334d8eae78421778c8d683fd090d09ddd148974 100644 (file)
                        $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);
index 9abc7c439615e437ba4085c0385caf4c1a8bd482..b33be686e44cc2e7fa5ecc43a8c648aec33097e6 100644 (file)
@@ -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 (file)
index 0000000..efb833a
--- /dev/null
@@ -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
+       ));
+
+}
+
index 18f6d080bedf8eb4c6ccd29593e22f1f05ee9221..29fa779024825373cd548887274da7f189ea7326 100644 (file)
@@ -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'),
index 3033b88afc816238ea7e0e4ada4b86fa92576c5b..087e6cb20dc2f1879838be38204544dea2444eb9 100644 (file)
@@ -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
index 968aa2fd2d6a5b7046a35fcb84e74e1fc9fa74cd..2d9e2883d1b2975347a6fb163ed1fa7c72658e99 100644 (file)
@@ -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,84 @@ 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']);
+       
+       // 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();
index 8360a42ec0c1832c73ce55bdea7c75619d769327..0c3c8b1d7aa8cd341c4dcc6beaaf9c51bad41b11 100644 (file)
@@ -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";
index 600043ee58f36bc6243ae43b66360956096b1f4e..5c24df51e20558b7f12425105b8f3848f8b75f55 100644 (file)
@@ -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,
index 90111600ade20c9bd37c2f324e0e1b0ed4dc8572..18ad070120e95908c6e49da998317cc6180fdd8d 100644 (file)
@@ -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;
 }
 
index 427f8887ce92893394c2f49be07236856584772f..cef0647b596f50de31f6c6f49454deb38f37de96 100644 (file)
@@ -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');
        }
index fd413b7d65719a581b115cc82adc88f182bbc54a..299410a63d99b6f1860b0bca8ca482f286f5ea1b 100644 (file)
@@ -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
index cb255029f0d47e84d64ae9e825c731cdf1982362..34c992bada16ec361b485eac14d55b0568943199 100644 (file)
@@ -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) {
index ea429d39fe15384b90f445f129bd84ba35393b0e..9bbcea07d3a98ab25fe62d1f63a91676de1329ff 100644 (file)
@@ -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
index 93abcd5de845dd661fd9afef49649c438ed44644..5f00b4f5a4a9ced5703cf8f26cd22cdb9f82390d 100644 (file)
@@ -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/dirfind.php b/mod/dirfind.php
new file mode 100644 (file)
index 0000000..8010182
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+function dirfind_init(&$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('People Search') . ' - ' . $search . '</h2>';
+       
+       if($search) {
+
+               $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
+                       
+               if(strlen(get_config('system','directory_submit_url')))
+                       $x = fetch_url('http://dir.friendika.com/lsearch?f=' . $p .  '&search=' . urlencode($search));
+
+//TODO fallback local search if global dir not available.
+//             else
+//                     $x = post_url($a->get_baseurl() . '/lsearch', $params);
+
+               $j = json_decode($x);
+
+               if($j->total) {
+                       $a->set_pager_total($j->total);
+                       $a->set_pager_itemspage($j->items_page);
+               }
+
+               if(count($j->results)) {
+                       
+                       $tpl = get_markup_template('match.tpl');
+                       foreach($j->results as $jj) {
+                               
+                               $o .= replace_macros($tpl,array(
+                                       '$url' => $jj->url,
+                                       '$name' => $jj->name,
+                                       '$photo' => $jj->photo,
+                                       '$tags' => $jj->tags
+                               ));
+                       }
+               }
+               else {
+                       info( t('No matches') . EOL);
+               }               
+
+       }
+
+       $o .= '<div class="clear"></div>';
+       $o .= paginate($a);
+       return $o;
+}
index 08c5e68b84f98032476b7d885288aa23952bcb69..9e6d33230a57100dc3936df422d9442293784efe 100644 (file)
@@ -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']),
index eea2dad4ffc490a99b892512614e68e206273a5b..c33bbd5c2de7b5d9deaec1463df9fdb95252bf63 100644 (file)
@@ -59,6 +59,7 @@ function match_content(&$a) {
 
        }
 
+       $o .= cleardiv();
        $o .= paginate($a);
        return $o;
 }
index d4772d026144d21cc9bea0da2cc41c8829cfd98b..39aa0479ff17f99b8fa07f0aa9cfbb731be2769b 100644 (file)
@@ -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
        ));
 
 
index 9b7c4e6112778dffae3435133b6f26ab5290af26..5aa39bf638c2d63b6a56e944c2142a59dae08522 100644 (file)
@@ -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;
 
index 52ce90e149ad7c7f9ba90e622b2df6ce92bdb011..9761a944d7a4d1125f9bf4df9738852388e56549 100644 (file)
@@ -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'
                ));
        }
 
index 546c46f166b2f73eec81325ed06bc1d870c4640a..caa78f9b7cf2f800ae8fb82ff38aa1d43621e3fd 100644 (file)
@@ -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']);
                }
        
index 034794e179db10d2137967a270fdf3778647ad28..2a8bf1484ec3e62495ee7a1bc4969635d4e48800 100644 (file)
@@ -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']));
index 7112db8878f1d25e0f4268bb94f3056549cca4c4..b5997fbe73d1aee72cbf70635982aa7ab2a1e9e2 100644 (file)
@@ -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,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/mod/tagmatch.php b/mod/tagmatch.php
deleted file mode 100644 (file)
index 8023fa4..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-
-
-function tagmatch_content(&$a) {
-
-       $search = notags(trim($_REQUEST['search']));
-       
-       $o = '';
-
-       $o .= '<h2>' . t('Tag Match') . ' - ' . $search . '</h2>';
-       
-       if($search) {
-
-               $p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
-                       
-               if(strlen(get_config('system','directory_submit_url')))
-                       $x = fetch_url('http://dir.friendika.com/lsearch?f=' . $p .  '&search=' . urlencode($search));
-
-//TODO fallback local search if global dir not available.
-//             else
-//                     $x = post_url($a->get_baseurl() . '/lsearch', $params);
-
-               $j = json_decode($x);
-
-               if($j->total) {
-                       $a->set_pager_total($j->total);
-                       $a->set_pager_itemspage($j->items_page);
-               }
-
-               if(count($j->results)) {
-                       
-                       $tpl = get_markup_template('match.tpl');
-                       foreach($j->results as $jj) {
-                               
-                               $o .= replace_macros($tpl,array(
-                                       '$url' => $jj->url,
-                                       '$name' => $jj->name,
-                                       '$photo' => $jj->photo,
-                                       '$tags' => $jj->tags
-                               ));
-                       }
-               }
-               else {
-                       info( t('No matches') . EOL);
-               }               
-
-       }
-
-       $o .= '<div class="clear"></div>';
-       $o .= paginate($a);
-       return $o;
-}
index 723f12c1ac8cc084ec163d83b15d8f6210bd2a23..ed6b9e05eb0e536eb6309dda56230d2f855f5821 100644 (file)
@@ -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` ) ");
+}
+
+
index 324980093846003dff47950c0ae9756263bf0b61..4dffda1ce407d918707c2196ed0b628585f0c31d 100644 (file)
@@ -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>
index ba90b94f82932b81abcb4d0c24bb509dadefeaa0..1f03540f2c95019a8e7685b51f86528c00d30888 100644 (file)
@@ -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>
index 2c024930cad96422097d2030625e5e2f4d93abe3..259e74a931fa43450cc773eee2ef41eb55b86b1a 100644 (file)
@@ -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>
 
index 5eb07db44c6ee13efce041203904f613aea86193..22bd0aa5b22650bfcd76be3108bc4c4bda044a12 100644 (file)
@@ -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) {
index aa9892cbbb66ab40909a219b706fa68c443dc9e5..71b92986d20289ae64c9450ddbfa3dac41b0e1ef 100644 (file)
@@ -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> 
index 2aeb3006e0a2bf684ef13de27882fedbea46c9cf..afb65f5373db29bff0e0b4165c5303d713eff623 100644 (file)
@@ -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 (file)
index 0000000..4b3f01b
--- /dev/null
@@ -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>
+
index b79fbfe43c3e8df72ae7bba903b95aa00d75d211..3bbfc6ffd934a5b35f2fe8a5a218701e657c8c40 100644 (file)
@@ -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>
 
index 8fe0b519444eeb44270d1351ce9a3810a0fc3e9a..2cbfd17e92af79c4ede727d39961a7dd0214fcfb 100644 (file)
@@ -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 (file)
index 0000000..0f33578
--- /dev/null
@@ -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>
+
index f6bf91ffa26ff008730069c28b2f4d0062ecba7d..a2c883e4beba74dd6b6f118f44960803fc5902de 100644 (file)
@@ -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> 
index b13ea9ae2eaf52daf42135936520e0c994b499c6..afa9180651df4f00d05e2c7f04b199c55bdeb216 100644 (file)
@@ -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 }}
index b46a03c3863994ed5d164d173e18e047e72fc755..9bb866e7671e8cfa6ce2ea83e7e4569479ff9c5e 100644 (file)
@@ -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 (file)
index 0000000..d65ac8b
--- /dev/null
@@ -0,0 +1,77 @@
+
+<div id="profile-jot-wrapper" >
+       <div id="profile-jot-banner-wrapper">
+               <div id="profile-jot-desc" >&nbsp;</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>
index 31a25694f0982a53a51af1a9bd0cf8d0db18d64a..9f47cf099a211e1aef8392f5cd5f9f26008fab6d 100644 (file)
@@ -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;
+    }
+}
 
index f3237801dfe9c58d29d3c246c2e77c4ca044dd1f..56c4bc967144396252dbfc2105ffa8781a514cbc 100644 (file)
@@ -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;
+}
index 341314c1d0b1e282618a5e96cadd45ba50859234..4a3edc163403e9d5f6d14589f89cbca621121e4f 100644 (file)
@@ -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 = */
 /* ========= */