]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #141 from fabrixxm/newacl
authorFriendika <info@friendika.com>
Wed, 20 Jul 2011 00:24:09 +0000 (17:24 -0700)
committerFriendika <info@friendika.com>
Wed, 20 Jul 2011 00:24:09 +0000 (17:24 -0700)
New jot ACL selector

36 files changed:
LICENSE
addon/LICENSE
addon/facebook/README
addon/facebook/facebook.php
addon/statusnet/statusnet.php
addon/twitter/twitter.php
boot.php
database.sql
doc/Installing-Connectors.md
include/Scrape.php
include/bbcode.php
include/nav.php
include/zotfns.php [new file with mode: 0644]
index.php
mod/contacts.php
mod/friendika.php
mod/install.php
mod/invite.php
mod/item.php
mod/parse_url.php
mod/register.php
mod/settings.php
mod/xrd.php
update.php
view/apiconfig.tpl [new file with mode: 0644]
view/field_intcheckbox.tpl [new file with mode: 0644]
view/install_db.tpl
view/jot-header.tpl
view/nav.tpl
view/register.tpl
view/settings.tpl
view/theme/duepuntozero/style.css
view/theme/greenzero/greenicons.png [new file with mode: 0644]
view/theme/greenzero/style.css
view/xrd_diaspora.tpl [new file with mode: 0644]
view/xrd_person.tpl

diff --git a/LICENSE b/LICENSE
index 1bb0861466de2595b1af292fbcbdac6f3e1f6ffe..33579fe080957f5e9ee6cd9199b1933ecee9484c 100644 (file)
--- a/LICENSE
+++ b/LICENSE
@@ -1,42 +1,25 @@
-* Friendika
-* Copyright (c) 2010, 2011 Mike Macgirvin
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are met:
-*     * Redistributions of source code must retain the above copyright
-*       notice, this list of conditions and the following disclaimer.
-*     * Redistributions in binary form must reproduce the above copyright
-*       notice, this list of conditions and the following disclaimer in the
-*       documentation and/or other materials provided with the distribution.
-*     * Neither the name of Friendika nor the
-*       names of its contributors may be used to endorse or promote products
-*       derived from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED BY Mike Macgirvin ``AS IS'' AND ANY
-* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-* DISCLAIMED. IN NO EVENT SHALL Mike Macgirvin BE LIABLE FOR ANY
-* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+The Friendika project is distributed under the following license terms:
 
-Friendika incorporates other software which may be licensed under different 
-terms and conditions. Some system libraries which are supplied with and
-incorporated into Friendika were provided by their respective authors under
-the LGPL (Lesser GNU Public License) and may result in legal encumberance if 
-you make any code changes to these libraries. 
+* This software is provided for any use with no license terms or restrictions.
+
+No guarantee is provided. Use at your own risk.
+
+Components packaged with this software may fall under different license terms.
+
+cropper      - BSD
+TwitterOAuth - BSD
+markdown     - BSD
+slinky       - BSD
+ajax-upload  - MIT
+simplepie    - MIT
+LightOpenID  - MIT
+HTML5        - MIT
+jQuery       - MIT
+TinyMCE      - LGPL
+phpsec       - LGPL
+HTMLPurifer  - LGPL
+Facebook SDK - Apache
+
+Addons, plugins, and themes may also be provided under their own license terms.
 
-Addon or "plugin" modules (projects by other authors and fully contained within
-the 'addon' and 'theme' directories) are licensed under terms provided by the
-respective software author or authors of those works, and MAY include copyleft 
-licenses such as GPLv3, AGPL, and/or commercial licenses. For the purposes of
-licensing, addon modules and themes are considered separate standalone works,
-where the "work as a whole" is defined as the embodiment of the theme or 
-addon module.
-  
-  
 
index 2e6e056e8c4419eb1d83a00f362d4bb3f6adcdc7..02cff93203ce4bce2adfd62328a4bd2ee25cd304 100644 (file)
@@ -1,5 +1,3 @@
-
-
 Friendika addons/plugins license terms are under the control of the project 
 author or authors. 
 
index 42ec01383cd2605c8d738a1ba75eda8b74772716..19c5948866f2bd535bdf31e9cd759282ba2afbcc 100644 (file)
@@ -15,6 +15,8 @@ Installing the Friendika/Facebook connector
         $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
         $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
      Replace with the settings Facebook gives you.
+  d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set Site URL 
+     to yoursubdomain.yourdomain.com.  Set Site Domain to your yourdomain.com.
 2. Enable the facebook plugin by including it in .htconfig.php - e.g. 
     $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
index c54d5b5f09b116064680fccbac11871d413745c2..73518afb2dae851519e62531a2685933008b84c3 100644 (file)
@@ -23,6 +23,9 @@
  *         $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
  *         $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
  *      Replace with the settings Facebook gives you.
+ *   d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set 
+ *      Site URL to yoursubdomain.yourdomain.com. Set Site Domain to your 
+ *      yourdomain.com.
  * 2. Enable the facebook plugin by including it in .htconfig.php - e.g. 
  *     $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
  * 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
index 9357b0ebd9cfcf938a0967d29d5b8838c34b18eb..63cdd28df62fb7346cf73abd0ac22dff19997a9f 100644 (file)
@@ -260,7 +260,7 @@ function statusnet_settings(&$a,&$s) {
                        $s .= '<input id="statusnet-token" type="hidden" name="statusnet-token" value="'.$token.'" />';
                        $s .= '<input id="statusnet-token2" type="hidden" name="statusnet-token2" value="'.$request_token['oauth_token_secret'].'" />';
                        $s .= '</div><div class="clear"></div>';
-                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
+                       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="statusnet-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
                        $s .= '<h4>'.t('Cancel Connection Process').'</h4>';
                        $s .= '<div id="statusnet-cancel-wrapper">';
                        $s .= '<p>'.t('Current StatusNet API is').': '.$api.'</p>';
index 1dce9d2f66a38b5b0b6b28f1ec55742504b33442..7f2b2e1c79362184686341a8d25f091ac5fdeada 100644 (file)
@@ -243,8 +243,11 @@ function twitter_post_hook(&$a,&$b) {
                                        $msg .= '... ' . $shortlink;
                                }
                 // and now tweet it :-)
-                               if(strlen($msg))
-                                       $tweet->post('statuses/update', array('status' => $msg));
+                               if(strlen($msg)) {
+                                       $result = $tweet->post('statuses/update', array('status' => $msg));
+                                       logger('twitter_post returns: ' . $result);
+                               }
+
                        }
                }
        }
index 8ff029a5c31d59069f0c0271470d66300b602fa8..abb043036bc7e53f1f3a0b33bf5012dac90a3b9d 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -1,12 +1,8 @@
 <?php
 
-set_time_limit(0);
-ini_set('pcre.backtrack_limit', 250000);
-
-
-define ( 'FRIENDIKA_VERSION',      '2.2.1034' );
+define ( 'FRIENDIKA_VERSION',      '2.2.1045' );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.21'    );
-define ( 'DB_UPDATE_VERSION',      1075      );
+define ( 'DB_UPDATE_VERSION',      1076      );
 
 define ( 'EOL',                    "<br />\r\n"     );
 define ( 'ATOM_TIME',              'Y-m-d\TH:i:s\Z' );
@@ -89,6 +85,7 @@ define ( 'PAGE_FREELOVE',          3 );
  * Network and protocol family types 
  */
 
+define ( 'NETWORK_ZOT',              'zot!');    // Zot!
 define ( 'NETWORK_DFRN',             'dfrn');    // Friendika, Mistpark, other DFRN implementations
 define ( 'NETWORK_OSTATUS',          'stat');    // status.net, identi.ca, GNU-social, other OStatus implementations
 define ( 'NETWORK_FEED',             'feed');    // RSS/Atom feeds with no known "post/notify" protocol
@@ -103,6 +100,13 @@ define ( 'NETWORK_FACEBOOK',         'face');    // Facebook API
 
 define ( 'MAX_LIKERS',    75);
 
+/**
+ * Communication timeout
+ */
+
+define ( 'ZCURL_TIMEOUT' , (-1));
+
+
 /**
  * email notification options
  */
@@ -117,6 +121,7 @@ define ( 'NOTIFY_MAIL',    0x0010 );
  * various namespaces we may need to parse
  */
 
+define ( 'NAMESPACE_ZOT',             'http://purl.org/macgirvin/zot' );
 define ( 'NAMESPACE_DFRN' ,           'http://purl.org/macgirvin/dfrn/1.0' ); 
 define ( 'NAMESPACE_THREAD' ,         'http://purl.org/syndication/thread/1.0' );
 define ( 'NAMESPACE_TOMB' ,           'http://purl.org/atompub/tombstones/1.0' );
@@ -170,20 +175,28 @@ define ( 'GRAVITY_COMMENT',      6);
  *
  */
 
-if (get_magic_quotes_gpc()) {
-    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
-    while (list($key, $val) = each($process)) {
-        foreach ($val as $k => $v) {
-            unset($process[$key][$k]);
-            if (is_array($v)) {
-                $process[$key][stripslashes($k)] = $v;
-                $process[] = &$process[$key][stripslashes($k)];
-            } else {
-                $process[$key][stripslashes($k)] = stripslashes($v);
-            }
-        }
-    }
-    unset($process);
+function startup() {
+       error_reporting(E_ERROR | E_WARNING | E_PARSE);
+       set_time_limit(0);
+       ini_set('pcre.backtrack_limit', 250000);
+
+
+       if (get_magic_quotes_gpc()) {
+       $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
+           while (list($key, $val) = each($process)) {
+           foreach ($val as $k => $v) {
+                   unset($process[$key][$k]);
+               if (is_array($v)) {
+                       $process[$key][stripslashes($k)] = $v;
+                       $process[] = &$process[$key][stripslashes($k)];
+               } else {
+                       $process[$key][stripslashes($k)] = stripslashes($v);
+               }
+               }
+       }
+           unset($process);
+       }
+
 }
 
 /*
@@ -251,6 +264,8 @@ class App {
 
                $this->query_string = '';
 
+               startup();
+
                $this->scheme = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']))      ?  'https' : 'http' );
 
                if(x($_SERVER,'SERVER_NAME')) {
@@ -756,15 +771,17 @@ function post_url($url,$params, $headers = null, &$redirects = 0) {
        $curl_time = intval(get_config('system','curl_timeout'));
        curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
 
-       if(!is_array($headers)) {
-               $headers = array('Expect:');
-       } else {
-               if(!in_array('Expect:', $headers)) {
-                       array_push($headers, 'Expect:');
+       if(defined('LIGHTTPD')) {
+               if(!is_array($headers)) {
+                       $headers = array('Expect:');
+               } else {
+                       if(!in_array('Expect:', $headers)) {
+                               array_push($headers, 'Expect:');
+                       }
                }
        }
-
-       curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+       if($headers)
+               curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
 
        $check_cert = get_config('system','verifyssl');
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
@@ -2056,6 +2073,9 @@ function get_tags($s) {
                                // we might be inside a bbcode color tag - leave it alone
                                continue;
                        }
+                       // ignore strictly numeric tags like #1
+                       if((strpos($mtch,'#') === 0) && ctype_digit(substr($mtch,1)))
+                               continue;
                        if(substr($mtch,-1,1) === '.')
                                $ret[] = substr($mtch,0,-1);
                        else
@@ -2937,3 +2957,15 @@ function return_bytes ($size_str) {
     }
 }}
 
+function generate_guid() {
+       $found = true;
+       do {
+               $guid = substr(random_string(),0,16);
+               $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1",
+                       dbesc($guid)
+               );
+               if(! count($x))
+                       $found = false;
+       } while ($found == true );
+       return $guid;
+}
\ No newline at end of file
index 8ea3e42de71e83308c6c8f9fa131ccdbc962d8cf..50697845a33a7f5c6fcdb14f021832c56445a5fa 100644 (file)
@@ -379,6 +379,7 @@ CREATE TABLE IF NOT EXISTS `session` (
 
 CREATE TABLE IF NOT EXISTS `user` (
   `uid` int(11) NOT NULL AUTO_INCREMENT,
+  `guid` char(16) NOT NULL,
   `username` char(255) NOT NULL,
   `password` char(255) NOT NULL,
   `nickname` char(255) NOT NULL,
index e43f17fe3c00dafecea3a957ccfa7ba3a02310dc..c8fc8e790577ce551c4d4ae5d2feb35b71f01536 100644 (file)
@@ -129,6 +129,10 @@ $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
 
 Replace with the settings Facebook gives you.
 
+d. Navigate to Set Web->Site URL & Domain -> Website Settings.  Set Site URL
+to yoursubdomain.yourdomain.com.  Set Site Domain to your yourdomain.com.
+
+
 Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
 and click 'Install Facebook Connector'.
 
index fbfec176f8894d7cbc875bd81451d78b54c6d61d..6726d0b1518d815b5ebc05bca6c5bc88ba6d3f46 100644 (file)
@@ -300,6 +300,8 @@ function probe_url($url) {
                if(count($links)) {
                        logger('probe_url: found lrdd links: ' . print_r($links,true), LOGGER_DATA);
                        foreach($links as $link) {
+                               if($link['@attributes']['rel'] === NAMESPACE_ZOT)
+                                       $zot = unamp($link['@attributes']['href']);
                                if($link['@attributes']['rel'] === NAMESPACE_DFRN)
                                        $dfrn = unamp($link['@attributes']['href']);
                                if($link['@attributes']['rel'] === 'salmon')
@@ -379,6 +381,25 @@ function probe_url($url) {
                }
        }       
 
+       if(strlen($zot)) {
+               $s = fetch_url($zot);
+               if($s) {
+                       $j = json_decode($s);
+                       if($j) {
+                               $network = NETWORK_ZOT;
+                               $vcard   = array(
+                                       'fn'    => $j->fullname, 
+                                       'nick'  => $j->nickname, 
+                                       'photo' => $j->photo
+                               );
+                               $profile  = $j->url;
+                               $notify   = $j->post;
+                               $pubkey   = $j->pubkey;
+                               $poll     = 'N/A';
+                       }
+               }
+       }
+
        if(strlen($dfrn)) {
                $ret = scrape_dfrn($dfrn);
                if(is_array($ret) && x($ret,'dfrn-request')) {
@@ -390,7 +411,7 @@ function probe_url($url) {
                }
        }
 
-       if($network !== NETWORK_DFRN && $network !== NETWORK_MAIL) {
+       if($network !== NETWORK_ZOT && $network !== NETWORK_DFRN && $network !== NETWORK_MAIL) {
                $network  = NETWORK_OSTATUS;
                $priority = 0;
 
@@ -549,6 +570,7 @@ function probe_url($url) {
        $result['priority'] = $priority;
        $result['network'] = $network;
        $result['alias'] = $alias;
+       $result['pubkey'] = $pubkey;
 
        logger('probe_url: ' . print_r($result,true), LOGGER_DEBUG);
 
index 7fc1eac1c449c6aa04d4ed7d8b6a090009ec6731..3619015ca9f8c6fa0734ff0af8c6f932c65f34b3 100644 (file)
@@ -3,6 +3,13 @@
 require_once("include/oembed.php");
 require_once('include/event.php');
 
+
+
+function stripcode_br_cb($s) {
+       return '[code]' . str_replace('<br />', '', $s[1]) . '[/code]';
+}
+
+
        // BBcode 2 HTML was written by WAY2WEB.net
        // extended to work with Mistpark/Friendika - Mike Macgirvin
 
@@ -89,9 +96,16 @@ function bbcode($Text,$preserve_nl = false) {
        $Text = preg_replace("(\[font=(.*?)\](.*?)\[\/font\])","<span style=\"font-family: $1;\">$2</span>",$Text);
 
        // Declare the format for [code] layout
+
+       $Text = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'stripcode_br_cb',$Text);
+
        $CodeLayout = '<code>$1</code>';
        // Check for [code] text
        $Text = preg_replace("/\[code\](.*?)\[\/code\]/is","$CodeLayout", $Text);
+
+
+
+
        // Declare the format for [quote] layout
        $QuoteLayout = '<blockquote>$1</blockquote>';                     
        // Check for [quote] text
index 3b15c2b8a99dfdbab3e3a2c667bb7391970ae645..895c321e6ad39ac893d3dadd3585c1d34377a97f 100644 (file)
@@ -30,7 +30,7 @@ function nav(&$a) {
        $sitelocation = $myident . substr($a->get_baseurl(),strpos($a->get_baseurl(),'//') + 2 );
 
 
-       // nav links: array of array('href', 'text', 'extra css classes')
+       // nav links: array of array('href', 'text', 'extra css classes', 'title')
        $nav = Array();
 
        /**
@@ -38,10 +38,10 @@ function nav(&$a) {
         */
 
        if(local_user()) {
-               $nav['logout'] = Array('logout',t('Logout'), "");
+               $nav['logout'] = Array('logout',t('Logout'), "", t('End this session'));
        }
        else {
-               $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'nav-selected':''));
+               $nav['login'] = Array('login',t('Login'), ($a->module == 'login'?'nav-selected':''), t('Sign in'));
        }
 
 
@@ -52,21 +52,21 @@ function nav(&$a) {
        $homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : '');
 
        if(($a->module != 'home') && (! (local_user()))) 
-               $nav['home'] = array($homelink, t('Home'), "");
+               $nav['home'] = array($homelink, t('Home'), "", t('Home Page'));
 
 
        if(($a->config['register_policy'] == REGISTER_OPEN) && (! local_user()) && (! remote_user()))
-               $nav['register'] = array('register',t('Register'), "");
+               $nav['register'] = array('register',t('Register'), "", t('Create an account'));
 
        $help_url = $a->get_baseurl() . '/help';
 
        if(! get_config('system','hide_help'))
-               $nav['help'] = array($help_url, t('Help'), "");
+               $nav['help'] = array($help_url, t('Help'), "", t('Help and documentation'));
 
        if($a->apps)
-               $nav['apps'] = array('apps', t('Apps'), "");
+               $nav['apps'] = array('apps', t('Apps'), "", t('Addon applications, utilities, games'));
 
-       $nav['search'] = array('search', t('Search'), "");
+       $nav['search'] = array('search', t('Search'), "", t('Search site content'));
 
        $gdirpath = 'directory';
 
@@ -76,9 +76,9 @@ function nav(&$a) {
                        $gdirpath = $gdir;
        }
        elseif(! get_config('system','no_community_page'))
-               $nav['community'] = array('community', t('Community'), "");
+               $nav['community'] = array('community', t('Community'), "", t('Conversations on this site'));
 
-       $nav['directory'] = array($gdirpath, t('Directory'), ""); 
+       $nav['directory'] = array($gdirpath, t('Directory'), "", t('People directory')); 
 
        /**
         *
@@ -88,33 +88,33 @@ function nav(&$a) {
 
        if(local_user()) {
 
-               $nav['network'] = array('network', t('Network'), "");
+               $nav['network'] = array('network', t('Network'), "", t('Conversations from your friends'));
 
-               $nav['home'] = array('profile/' . $a->user['nickname'], t('Home'), "");
+               $nav['home'] = array('profile/' . $a->user['nickname'], t('Home'), "", t('Your posts and conversations'));
 
 
                /* only show friend requests for normal pages. Other page types have automatic friendship. */
 
                if($_SESSION['page_flags'] == PAGE_NORMAL) {
-                       $nav['notifications'] = array('notifications',  t('Notifications'), "");
+                       $nav['notifications'] = array('notifications',  t('Notifications'), "", t('Friend requests'));
                }
 
-               $nav['messages'] = array('message', t('Messages'), "");
+               $nav['messages'] = array('message', t('Messages'), "", t('Private mail'));
                
                if(is_array($a->identities) && count($a->identities) > 1) {
-                       $nav['manage'] = array('manage', t('Manage'), "");
+                       $nav['manage'] = array('manage', t('Manage'), "", t('Manage other pages'));
                }
 
-               $nav['settings'] = array('settings', t('Settings'),"");
-               $nav['profiles'] = array('profiles', t('Profiles'),"");
-               $nav['contacts'] = array('contacts', t('Contacts'),"");
+               $nav['settings'] = array('settings', t('Settings'),"", t('Account settings'));
+               $nav['profiles'] = array('profiles', t('Profiles'),"", t('Manage/edit profiles'));
+               $nav['contacts'] = array('contacts', t('Contacts'),"", t('Manage/edit friends and contacts'));
        }
 
        /**
         * Admin page
         */
         if (is_site_admin()){
-                $nav['admin'] = array('admin/', t('Admin'), "");
+                $nav['admin'] = array('admin/', t('Admin'), "", t('Site setup and configuration'));
         }
 
 
diff --git a/include/zotfns.php b/include/zotfns.php
new file mode 100644 (file)
index 0000000..b695b6f
--- /dev/null
@@ -0,0 +1,193 @@
+<?php
+
+
+require_once('include/salmon.php');
+
+function zot_get($url,$args) {
+       $argstr = '';
+       foreach($args as $k => $v) {
+               if($argstr)
+                       $argstr .= '&';
+               $argstr .= $k . '=' . $v;
+       }       
+       $s = fetch_url($url . '?' . $argstr);
+       if($s) {
+               $j = json_decode($s);
+               if($j)
+                       return($j);
+       }
+       return false;
+}
+
+function zot_post($url,$args) {
+       $s = post_url($url,$args);
+       if($s) {
+               $j = json_decode($s);
+               if($j)
+                       return($j);
+       }
+       return false;
+}
+
+
+function zot_prv_encode($s,$prvkey) {
+       $x = '';
+       $res = openssl_private_encrypt($s,$x,$prvkey);
+       return base64url_encode($y);
+}
+function zot_pub_encode($s,$pubkey) {
+       $x = '';
+       $res = openssl_public_encrypt($s,$x,$pubkey);
+       return base64url_encode($x);
+}
+
+function zot_prv_decode($s,$prvkey) {
+       $s = base64url_decode($s);
+       $x = '';
+       openssl_private_decrypt($s,$x,$prvkey);
+       return $x;
+}
+
+function zot_pub_decode($s,$pubkey) {
+       $s = base64url_decode($s);
+       $x = '';
+       openssl_public_decrypt($s,$x,$pubkey);
+       return $x;
+}
+
+
+function zot_getzid($url,$myaddress,$myprvkey) {
+       $ret = array();
+       $j = zot_get($url,array('sender' => $myaddress));
+       if($j->zid_encoded)
+               $ret['zid'] = zot_prv_decode($j->zid_encoded,$myprvkey);
+       if($j->zkey_encoded)
+               $ret['zkey'] = zot_prv_decode($j->zkey_encoded,$myprvkey);
+       return $ret;
+}
+
+function zot_post_init($url,$zid,$myprvkey,$theirpubkey) {
+       $ret = array();
+
+       $zinit = random_string(32);
+
+       $j = zot_get($url,array('zid' => $zid,'zinit' => $zinit));
+       
+       $a = get_app();
+       if(! $a->get_curl_code())
+               return ZCURL_TIMEOUT;
+       if(! $j->zinit) {
+               logger('zot_post_init: no zinit returned.');
+               return false;
+       }
+       if(zot_pub_decode($j->zinit,$thierpubkey) !== $zinit) {
+               logger('zot_post_init: incorrect zinit returned.');
+               return false;
+       }
+
+       if($j->challenge) {
+               $s = zot_prv_decode($j->challenge,$myprvkey);
+               $s1 = substr($s,0,strpos($s,'.'));
+               if($s1 != $zid) {
+                       logger("zot_post_init: incorrect zid returned");
+                       return false;
+               }
+               $ret['result'] = substr($s,strpos($s,'.') + 1);
+               $ret['perms'] = $j->perms;
+       }
+       return $ret;
+}
+
+
+function zot_encrypt_data($data,&$key) {
+       $key = random_string();
+       return aes_encrypt($data,$key);
+}
+
+
+// encrypt the data prior to calling this function so it only need be done once per message
+// regardless of the number of recipients.
+
+function zot_post_data($url,$zid,$myprvkey,$theirpubkey,$encrypted_data,$key, $intro = false) {
+       $i = zot_post_init($url,$zid,$myprvkey,$theirpubkey);
+       if($i === ZCURL_TIMEOUT)
+               return ZCURL_TIMEOUT;
+
+       if((! $i) || (! array_key_exists('perms',$i)) || (! array_key_exists('result',$i)))
+               return false;
+       if((! stristr($i['perms'],'post')) && ($intro === false)) {
+               logger("zot_post_data: no permission to post: url=$url zid=$zid");
+               return false;
+       } 
+       $p = array();
+       $p['zid'] = $zid;
+       $p['result'] = zot_pub_encode($i['result'],$theirpubkey);
+       $p['aes_key'] = zot_prv_encode($key,$myprvkey);
+       $p['data'] = $encrypted_data;
+       $s = zot_post($url,$p);
+       $a = get_app();
+       if(! $a->get_curl_code())
+               return ZCURL_TIMEOUT;
+
+       if($s) {
+               $j = json_decode($s); 
+               return $j;
+       }
+       return false;
+}
+       
+function zot_deliver($recipients,$myprvkey,$data) {
+
+       if(is_array($recipients) && count($recipients)) {
+
+               $key = '';
+               $encrypted = zot_encrypt_data($data,$key);
+
+
+               foreach($recipients as $r) {
+                       $result = zot_post_data(
+                               $r['post'],
+                               $r['zid'],
+                               $myprvkey,
+                               $r['pubkey'],
+                               $encrypted,
+                               $key
+                       );
+                       if($result === false) {
+                               // post failed
+                               logger('zot_deliver: failed: ' . print_r($r,true));
+                       }
+                       elseif($result === ZCURL_TIMEOUT) {
+                               // queue for redelivery
+                       }
+                       elseif($result->error) {
+                               // failed at other end
+                               logger('zot_deliver: remote failure: ' . $result->error . ' ' . print_r($r,true));
+                       }
+                       elseif($result->success) {
+                               logger('zot_deliver: success ' . print_r($r,true, LOGGER_DEBUG));
+                       }
+                       else
+                               logger('zot_deliver: unknown failure.');
+               }
+       }
+}
+
+
+function zot_new_contact($user,$cc) {
+
+       $zid = random_string(32);
+       $zkey = random_string(32);
+
+       logger("zot_new_contact: zid=$zid zkey=$zkey uid={$user['uid']} " . print_r($cc,true));
+
+       $ret = array();
+       $ret['zid_encoded'] = zot_pub_encode($zid,$cc['pubkey']);
+       $ret['zkey_encoded'] = zot_pub_encode($zkey,$cc['pubkey']);
+       return $ret;
+
+
+       
+
+
+}
\ No newline at end of file
index 2e24c5b015c3130fafba4d9df2ea5a51e449bc13..3e72baddc5a9d7ec278d9aa9b410da6e4e161564 100644 (file)
--- a/index.php
+++ b/index.php
@@ -1,7 +1,5 @@
 <?php
 
-error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
 /**
  *
  * Friendika
index 7a97b53d230a33e02647dc836c923534f9b513c2..2fc01a0d8bee9d73fa58960e64e9b68b3c02e022 100644 (file)
@@ -3,13 +3,26 @@
 require_once('include/Contact.php');
 
 function contacts_init(&$a) {
+       if(! local_user())
+               return;
+
        require_once('include/group.php');
        if(! x($a->page,'aside'))
                $a->page['aside'] = '';
        $a->page['aside'] .= group_side();
 
-       if($a->config['register_policy'] != REGISTER_CLOSED)
-               $a->page['aside'] .= '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
+       $inv = '<div class="side-link" id="side-invite-link" ><a href="invite" >' . t("Invite Friends") . '</a></div>';
+
+       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;
+               }
+       }
+       elseif($a->config['register_policy'] != REGISTER_CLOSED)
+               $a->page['aside'] .= $inv;
 
 
        $a->page['aside'] .= '<div class="side-link" id="side-match-link"><a href="match" >' 
index 8c034c4acc0abe6b60f920bcbc6d8eb8bb18468f..753a9f478fabcf220b916f58dc6b91decc29ab34 100644 (file)
@@ -39,7 +39,6 @@ function friendika_content(&$a) {
 
        $o .= '<p></p><p>';
 
-       $o .= 'View <a href="LICENSE">License</a>' . '<br /><br />';
        $o .= t('This is Friendika version') . ' ' . FRIENDIKA_VERSION . ' ';
        $o .= t('running at web location') . ' ' . $a->get_baseurl() . '</p><p>';
 
index 301630528b8bccf3d5e62c704268d68935ddf45d..970ff6af8f09ccfdbf3f171181f58054f18217a6 100644 (file)
@@ -140,7 +140,7 @@ function install_content(&$a) {
                '$dbpass' => notags(trim($_POST['dbpass'])),
                '$dbdata' => notags(trim($_POST['dbdata'])),
                '$phpath' => $phpath,
-               '$adminemail' => notags(trim($_POST['adminemail']))
+               '$adminmail' => notags(trim($_POST['adminmail']))
        ));
 
        return $o;
index b52aa19f6130a6469127226dd211cef45a1947d8..d4eb9c5ef17b59cd539d56913d7278af01107076 100644 (file)
@@ -20,6 +20,13 @@ function invite_post(&$a) {
 
        $total = 0;
 
+       if(get_config('system','invitation_only')) {
+               $invonly = true;
+               $x = get_pconfig(local_user(),'system','invites_remaining');
+               if((! $x) && (! is_site_admin()))
+                       return;
+       }
+
        foreach($recips as $recip) {
 
                $recip = trim($recip);
@@ -28,9 +35,29 @@ function invite_post(&$a) {
                        notice(  sprintf( t('%s : Not a valid email address.'), $recip) . EOL);
                        continue;
                }
+               
+               if($invonly && ($x || is_site_admin())) {
+                       $code = autoname(8) . srand(1000,9999);
+                       $nmessage = str_replace('$invite_code',$code,$message);
+
+                       $r = q("INSERT INTO `register` (`hash`,`created`) VALUES ('%s', '%s') ",
+                               dbesc($code),
+                               dbesc(datetime_convert())
+                       );
+
+                       if(! is_site_admin()) {
+                               $x --;
+                               if($x >= 0)
+                                       set_pconfig(local_user(),'system','invites_remaining',$x);
+                               else
+                                       return;
+                       }
+               }
+               else
+                       $nmessage = $message;
 
                $res = mail($recip, sprintf( t('Please join my network on %s'), $a->config['sitename']), 
-                       $message, 
+                       $nmessage, 
                        "From: " . $a->user['email'] . "\n"
                        . 'Content-type: text/plain; charset=UTF-8' . "\n"
                        . 'Content-transfer-encoding: 8bit' );
@@ -56,14 +83,25 @@ function invite_content(&$a) {
        }
 
        $tpl = get_markup_template('invite.tpl');
-       
+       $invonly = false;
+
+       if(get_config('system','invitation_only')) {
+               $invonly = true;
+               $x = get_pconfig(local_user(),'system','invites_remaining');
+               if((! $x) && (! is_site_admin())) {
+                       notice( t('You have no more invitations available') . EOL);
+                       return '';
+               }
+       }                       
+
+
        $o = replace_macros($tpl, array(
                '$invite' => t('Send invitations'),
                '$addr_text' => t('Enter email addresses, one per line:'),
                '$msg_text' => t('Your message:'),
                '$default_message' => sprintf(t('Please join my social network on %s'), $a->config['sitename']) . "\r\n" . "\r\n"
                        . t('To accept this invitation, please visit:') . "\r\n" . "\r\n" . $a->get_baseurl()
-                       . "\r\n" . "\r\n" . t('Once you have registered, please connect with me via my profile page at:') 
+                       . "\r\n" . "\r\n" . (($invonly) ? t('You will need to supply this invitation code: $invite_code') . "\r\n" . "\r\n" : '') .t('Once you have registered, please connect with me via my profile page at:') 
                        . "\r\n" . "\r\n" . $a->get_baseurl() . '/profile/' . $a->user['nickname'] ,
                '$submit' => t('Submit')
        ));
index 8a4f8293c83a0162f4be6b4e765896de58d550e1..f6f665a189da2e56185e428a13be12a77d353936 100644 (file)
@@ -184,12 +184,10 @@ function item_post(&$a) {
 
        if($post_type === 'net-comment') {
                if($parent_item !== null) {
-                       if($parent_item['type'] === 'remote') {
-                               $post_type = 'remote-comment';
-                       } 
-                       else {          
+                       if($parent_item['wall'] == 1)
                                $post_type = 'wall-comment';
-                       }
+                       else
+                               $post_type = 'remote-comment';
                }
        }
 
index ec28d74111817db7fcc540afcb3a769a5c8ee729..46c6b46e97998e3db59b542d11b3b15b937c8fe4 100644 (file)
@@ -13,7 +13,7 @@ function parse_url_content(&$a) {
 
        $text = null;
 
-       $template = "<a href=\"%s\" >%s</a>\n%s";
+       $template = "<br /><a href=\"%s\" >%s</a>%s<br />";
 
 
        $arr = array('url' => $url, 'text' => '');
@@ -39,12 +39,20 @@ function parse_url_content(&$a) {
                killme();
        }
 
+       if(strpos($s,'<title>')) {
+               $title = substr($s,strpos($s,'<title>')+7,64);
+               if(strpos($title,'<') !== false)
+                       $title = strip_tags(substr($title,0,strpos($title,'<')));
+       }
+
        $config = HTMLPurifier_Config::createDefault();
        $config->set('Cache.DefinitionImpl', null);
 
        $purifier = new HTMLPurifier($config);
        $s = $purifier->purify($s);
 
+//     logger('parse_url: purified: ' . $s, LOGGER_DATA);
+
        $dom = @HTML5_Parser::parse($s);
 
        if(! $dom) {
@@ -65,21 +73,27 @@ function parse_url_content(&$a) {
        if($divs) {
                foreach($divs as $div) {
                        $class = $div->getAttribute('class');
-                       if($class && stristr($class,'article')) {
+                       if($class && (stristr($class,'article') || stristr($class,'content'))) {
                                $items = $div->getElementsByTagName('p');
                                if($items) {
                                        foreach($items as $item) {
-                                               if($item->getElementsByTagName('script'))
-                                                       continue;
                                                $text = $item->textContent;
+                                               if(stristr($text,'<script')) {
+                                                       $text = '';
+                                                       continue;
+                                               }
                                                $text = strip_tags($text);
-                                               if(strlen($text) < 100)
+                                               if(strlen($text) < 100) {
+                                                       $text = '';
                                                        continue;
+                                               }
                                                $text = substr($text,0,250) . '...' ;
                                                break;
                                        }
                                }
                        }
+                       if($text)
+                               break;
                }
        }
 
@@ -87,12 +101,14 @@ function parse_url_content(&$a) {
                $items = $dom->getElementsByTagName('p');
                if($items) {
                        foreach($items as $item) {
-                               if($item->getElementsByTagName('script'))
-                                       continue;
                                $text = $item->textContent;
+                               if(stristr($text,'<script'))
+                                       continue;
                                $text = strip_tags($text);
-                               if(strlen($text) < 100)
+                               if(strlen($text) < 100) {
+                                       $text = '';
                                        continue;
+                               }
                                $text = substr($text,0,250) . '...' ;
                                break;
                        }
@@ -100,7 +116,7 @@ function parse_url_content(&$a) {
        }
 
        if(strlen($text)) {
-               $text = '<br />' . $text;
+               $text = '<br /><br />' . $text;
        }
 
        echo sprintf($template,$url,($title) ? $title : $url,$text);
index 5fac9d79ce94c77c0206bca04c62093650b769b4..94eac7a14e885099a8a51bd2bba8971fb98bedb5 100644 (file)
@@ -32,7 +32,11 @@ function register_post(&$a) {
                break;
        }
 
+       $using_invites = get_config('system','invitation_only');
+       $num_invites = get_config('system','number_invites');
 
+
+       $invite_id  = ((x($_POST,'invite_id'))  ? notags(trim($_POST['invite_id']))  : '');
        $username   = ((x($_POST,'username'))   ? notags(trim($_POST['username']))   : '');
        $nickname   = ((x($_POST,'nickname'))   ? notags(trim($_POST['nickname']))   : '');
        $email      = ((x($_POST,'email'))      ? notags(trim($_POST['email']))      : '');
@@ -43,6 +47,19 @@ function register_post(&$a) {
        $netpublish = ((strlen(get_config('system','directory_submit_url'))) ? $publish : 0);
                
        $tmp_str = $openid_url;
+
+       if($using_invites) {
+               if(! $invite_id) {
+                       notice( t('An invitation is required.') . EOL);
+                       return;
+               }
+               $r = q("select * from register where `hash` = '%s' limit 1", dbesc($invite_id));
+               if(! results($r)) {
+                       notice( t('Invitation could not be verified.') . EOL);
+                       return;
+               }
+       } 
+
        if((! x($username)) || (! x($email)) || (! x($nickname))) {
                if($openid_url) {
                        if(! validate_url($tmp_str)) {
@@ -181,9 +198,10 @@ function register_post(&$a) {
        $spkey = openssl_pkey_get_details($sres);
        $spubkey = $spkey["key"];
 
-       $r = q("INSERT INTO `user` ( `username`, `password`, `email`, `openid`, `nickname`,
+       $r = q("INSERT INTO `user` ( `guid`, `username`, `password`, `email`, `openid`, `nickname`,
                `pubkey`, `prvkey`, `spubkey`, `sprvkey`, `register_date`, `verified`, `blocked` )
-               VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
+               VALUES ( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d )",
+               dbesc(generate_guid()),
                dbesc($username),
                dbesc($new_password_encoded),
                dbesc($email),
@@ -329,6 +347,12 @@ function register_post(&$a) {
 
 
        if( $a->config['register_policy'] == REGISTER_OPEN ) {
+
+               if($using_invites && $invite_id) {
+                       q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
+                       set_pconfig($newuid,'system','invites_remaining',$num_invites);
+               }
+
                $email_tpl = get_intltext_template("register_open_eml.tpl");
                $email_tpl = replace_macros($email_tpl, array(
                                '$sitename' => $a->config['sitename'],
@@ -376,6 +400,10 @@ function register_post(&$a) {
                else
                        push_lang('en');
 
+               if($using_invites && $invite_id) {
+                       q("delete * from register where hash = '%s' limit 1", dbesc($invite_id));
+                       set_pconfig($newuid,'system','invites_remaining',$num_invites);
+               }
 
                $email_tpl = get_intltext_template("register_verify_eml.tpl");
                $email_tpl = replace_macros($email_tpl, array(
@@ -434,6 +462,7 @@ function register_content(&$a) {
        $openid_url   = ((x($_POST,'openid_url'))   ? $_POST['openid_url']   : ((x($_GET,'openid_url'))   ? $_GET['openid_url']            : ''));
        $nickname     = ((x($_POST,'nickname'))     ? $_POST['nickname']     : ((x($_GET,'nickname'))     ? $_GET['nickname']              : ''));
        $photo        = ((x($_POST,'photo'))        ? $_POST['photo']        : ((x($_GET,'photo'))        ? hex2bin($_GET['photo'])        : ''));
+       $invite_id    = ((x($_POST,'invite_id'))    ? $_POST['invite_id']    : ((x($_GET,'invite_id'))    ? $_GET['invite_id']             : ''));
 
        $noid = get_config('system','no_openid');
 
@@ -476,6 +505,10 @@ function register_content(&$a) {
        $o = get_markup_template("register.tpl");
        $o = replace_macros($o, array(
                '$oidhtml' => $oidhtml,
+               '$invitations' => get_config('system','invitation_only'),
+               '$invite_desc' => t('Membership on this site is by invitation only.'),
+               '$invite_label' => t('Your invitation ID: '),
+               '$invite_id' => $invite_id,
                '$realpeople' => $realpeople,
                '$regtitle'  => t('Registration'),
                '$registertext' =>((x($a->config,'register_text'))
index e115556879f88177303d3ddbe2ce4e8556f0e31e..1b4098de8f6c1c6b929bfd00785df79d1a63b4b7 100644 (file)
@@ -435,11 +435,6 @@ function settings_content(&$a) {
        ));
 
 
-
-
-
-
-
        $invisible = (((! $profile['publish']) && (! $profile['net-publish']))
                ? true : false);
 
@@ -495,6 +490,7 @@ function settings_content(&$a) {
                '$h_pass'       => t('Password Settings'),
                '$password1'=> array('npassword', t('New Password:'), '', ''),
                '$password2'=> array('confirm', t('Confirm:'), '', t('Leave password fields blank unless changing')),
+               '$oid_enable' => (! get_config('system','no_openid')),
                '$openid'       => $openid_field,
                
                '$h_basic'      => t('Basic Settings'),
@@ -527,11 +523,11 @@ function settings_content(&$a) {
                
                '$h_not'        => t('Notification Settings'),
                '$lbl_not'      => t('Send a notification email when:'),
-               '$notify1'      => array('notify1', t('You receive an introduction'), ($notify & NOTIFY_INTRO), ''),
-               '$notify2'      => array('notify1', t('Your introductions are confirmed'), ($notify & NOTIFY_CONFIRM), ''),
-               '$notify3'      => array('notify1', t('Someone writes on your profile wall'), ($notify & NOTIFY_WALL), ''),
-               '$notify4'      => array('notify1', t('Someone writes a followup comment'), ($notify & NOTIFY_COMMENT), ''),
-               '$notify5'      => array('notify1', t('You receive a private message'), ($notify & NOTIFY_MAIL), ''),
+               '$notify1'      => array('notify1', t('You receive an introduction'), ($notify & NOTIFY_INTRO), NOTIFY_INTRO, ''),
+               '$notify2'      => array('notify2', t('Your introductions are confirmed'), ($notify & NOTIFY_CONFIRM), NOTIFY_CONFIRM, ''),
+               '$notify3'      => array('notify3', t('Someone writes on your profile wall'), ($notify & NOTIFY_WALL), NOTIFY_WALL, ''),
+               '$notify4'      => array('notify4', t('Someone writes a followup comment'), ($notify & NOTIFY_COMMENT), NOTIFY_COMMENT, ''),
+               '$notify5'      => array('notify5', t('You receive a private message'), ($notify & NOTIFY_MAIL), NOTIFY_MAIL, ''),
                
                
                
index de0c20ea5d39c5b7ef2b2f12a387429f1fe26d1b..accc2f68ef1f0388f8a9b193aa180dafccc3f311 100644 (file)
@@ -27,6 +27,20 @@ function xrd_content(&$a) {
        header('Access-Control-Allow-Origin: *');
        header("Content-type: text/xml");
 
+       $dspr_enabled = get_config('system','diaspora_enabled');
+
+       if($dspr_enabled) {
+               $tpl = file_get_contents('view/xrd_diaspora.tpl');
+               $dspr = replace_macros($tpl,array(
+                       '$baseurl' => $a->get_baseurl(),
+                       '$dspr_guid' => $r[0]['guid'],
+                       '$dspr_key' => base64_encode($r[0]['pubkey'])
+               ));
+       }
+       else
+               $dspr = '';
+
+
        $tpl = file_get_contents('view/xrd_person.tpl');
 
        $o = replace_macros($tpl, array(
@@ -34,6 +48,7 @@ function xrd_content(&$a) {
                '$profile_url' => $a->get_baseurl() . '/profile/'       . $r[0]['nickname'],
                '$atom'        => $a->get_baseurl() . '/dfrn_poll/'     . $r[0]['nickname'],
                '$photo'       => $a->get_baseurl() . '/photo/profile/' . $r[0]['uid']      . '.jpg',
+               '$dspr'        => $dspr,
                '$salmon'      => $a->get_baseurl() . '/salmon/'        . $r[0]['nickname'],
                '$salmen'      => $a->get_baseurl() . '/salmon/'        . $r[0]['nickname'] . '/mention',
                '$modexp'      => 'data:application/magic-public-key,'  . $salmon_key
index f2cd5573f50ae3f5d647092537638cece127d4a9..9c55f15cf554f4acfc66bca388b59e2ff30e59ba 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-define( 'UPDATE_VERSION' , 1075 );
+define( 'UPDATE_VERSION' , 1076 );
 
 /**
  *
@@ -601,3 +601,26 @@ function update_1074() {
        }
        q("ALTER TABLE `profile` DROP `hidewall`");
 }
+
+function update_1075() {
+       q("ALTER TABLE `user` ADD `guid` CHAR( 16 ) NOT NULL AFTER `uid` ");
+       $r = q("SELECT `uid` FROM `user` WHERE 1");
+       if(count($r)) {
+               foreach($r as $rr) {
+                       $found = true;
+                       do {
+                               $guid = substr(random_string(),0,16);
+                               $x = q("SELECT `uid` FROM `user` WHERE `guid` = '%s' LIMIT 1",
+                                       dbesc($guid)
+                               );
+                               if(! count($x))
+                                       $found = false;
+                       } while ($found == true );
+
+                       q("UPDATE `user` SET `guid` = '%s' WHERE `uid` = %d LIMIT 1",
+                               dbesc($guid),
+                               intval($rr['uid'])
+                       );
+               }
+       }
+}
\ No newline at end of file
diff --git a/view/apiconfig.tpl b/view/apiconfig.tpl
new file mode 100644 (file)
index 0000000..71ab241
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+ <site>
+  <name>$sitedesc</name>
+  <server>$sitename</server>
+  <theme>default</theme>
+  <path></path>
+  <logo>$sitelogo</logo>
+
+  <fancy>true</fancy>
+  <language>en</language>
+  <email>$adminemail</email>
+  <broughtby></broughtby>
+  <broughtbyurl></broughtbyurl>
+  <timezone>UTC</timezone>
+  <closed>$siteclosed</closed>
+
+  <inviteonly>false</inviteonly>
+  <private>$siteprivate</private>
+  <textlimit>$textlimit</textlimit>
+  <ssl>$has_ssl</ssl>
+  <sslserver>$ssl_server</sslserver>
+  <shorturllength>30</shorturllength>
+
+</site>
+ <license>
+  <type>cc</type>
+  <owner></owner>
+  <url>http://creativecommons.org/licenses/by/3.0/</url>
+  <title>Creative Commons Attribution 3.0</title>
+  <image>http://i.creativecommons.org/l/by/3.0/80x15.png</image>
+
+</license>
+ <nickname>
+  <featured></featured>
+</nickname>
+ <profile>
+  <biolimit></biolimit>
+</profile>
+ <group>
+  <desclimit></desclimit>
+</group>
+ <notice>
+
+  <contentlimit></contentlimit>
+</notice>
+ <throttle>
+  <enabled>false</enabled>
+  <count>20</count>
+  <timespan>600</timespan>
+</throttle>
+ <xmpp>
+
+  <enabled>false</enabled>
+  <server>INVALID SERVER</server>
+  <port>5222</port>
+  <user>update</user>
+</xmpp>
+ <integration>
+  <source>StatusNet</source>
+
+</integration>
+ <attachments>
+  <uploads>false</uploads>
+  <file_quota>0</file_quota>
+</attachments>
+</config>
diff --git a/view/field_intcheckbox.tpl b/view/field_intcheckbox.tpl
new file mode 100644 (file)
index 0000000..47a513a
--- /dev/null
@@ -0,0 +1,6 @@
+       
+       <div class='field checkbox'>
+               <label for='id_$field.0'>$field.1</label>
+               <input type="checkbox" name='$field.0' id='id_$field.0' value="$field.3" {{ if $field.2 }}checked="true"{{ endif }}>
+               <span class='field_help'>$field.4</span>
+       </div>
index 6a4d1e2a247db83a5bd1758270855f770a0d39a9..ff4e11ab160c5b433c782cb6c50ca483afcceaea 100644 (file)
@@ -27,7 +27,7 @@ $lbl_03 $lbl_04 $lbl_05
 <div id="install-dbdata-end"></div>
 
 <label for="install-admin" id="install-admin-label">$lbl_11</label>
-<input type="text" name="adminemail" id="install-admin"  value="$adminemail" />
+<input type="text" name="adminmail" id="install-admin"  value="$adminmail" />
 <div id="install-admin-end"></div>
 
 <div id="install-tz-desc">
index 5e598e05e8001061c770999ea6fb4bfa9656b51e..7d215bd46c11c70d38c625e7b82d0128e0a7cfba 100644 (file)
@@ -8,7 +8,7 @@ tinyMCE.init({
        theme : "advanced",
        mode : "specific_textareas",
        editor_selector: /(profile-jot-text|prvmail-text)/,
-       plugins : "bbcode,paste",
+       plugins : "bbcode,paste,autoresize",
        theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
        theme_advanced_buttons2 : "",
        theme_advanced_buttons3 : "",
index 008278dc4b1e9da475a68175a5d31afb25d7643b..09a25ac837d88bc939fe4559a5ba8b5ca33bf23e 100644 (file)
@@ -2,48 +2,48 @@ $langselector
 
 <div id="site-location">$sitelocation</div>
 
-{{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0">$nav.logout.1</a> {{ endif }}
-{{ if $nav.login }}<a id="nav-login-link" class="nav-login-link $nav.login.2" href="$nav.login.0">$nav.login.1</a> {{ endif }}
+{{ if $nav.logout }}<a id="nav-logout-link" class="nav-link $nav.logout.2" href="$nav.logout.0" title="$nav.logout.3" >$nav.logout.1</a> {{ endif }}
+{{ if $nav.login }}<a id="nav-login-link" class="nav-login-link $nav.login.2" href="$nav.login.0" title="$nav.login.3" >$nav.login.1</a> {{ endif }}
 
 <span id="nav-link-wrapper" >
 
-{{ if $nav.register }}<a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0">$nav.register.1</a>{{ endif }}
+{{ if $nav.register }}<a id="nav-register-link" class="nav-commlink $nav.register.2" href="$nav.register.0" title="$nav.register.3" >$nav.register.1</a>{{ endif }}
        
-<a id="nav-help-link" class="nav-link $nav.help.2" target="friendika-help" href="$nav.help.0">$nav.help.1</a>
+<a id="nav-help-link" class="nav-link $nav.help.2" target="friendika-help" href="$nav.help.0" title="$nav.help.3" >$nav.help.1</a>
        
-{{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0">$nav.apps.1</a>{{ endif }}
+{{ if $nav.apps }}<a id="nav-apps-link" class="nav-link $nav.apps.2" href="$nav.apps.0" title="$nav.apps.3" >$nav.apps.1</a>{{ endif }}
 
-<a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0">$nav.search.1</a>
-<a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0">$nav.directory.1</a>
+<a id="nav-search-link" class="nav-link $nav.search.2" href="$nav.search.0" title="$nav.search.3" >$nav.search.1</a>
+<a id="nav-directory-link" class="nav-link $nav.directory.2" href="$nav.directory.0" title="$nav.directory.3" >$nav.directory.1</a>
 
-{{ if $nav.admin }}<a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0">$nav.admin.1</a>{{ endif }}
+{{ if $nav.admin }}<a id="nav-admin-link" class="nav-link $nav.admin.2" href="$nav.admin.0" title="$nav.admin.3" >$nav.admin.1</a>{{ endif }}
 
 {{ if $nav.network }}
-<a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0">$nav.network.1</a>
+<a id="nav-network-link" class="nav-commlink $nav.network.2" href="$nav.network.0" title="$nav.network.3" >$nav.network.1</a>
 <span id="net-update" class="nav-ajax-left"></span>
 {{ endif }}
 {{ if $nav.home }}
-<a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0">$nav.home.1</a>
+<a id="nav-home-link" class="nav-commlink $nav.home.2" href="$nav.home.0" title="$nav.home.3" >$nav.home.1</a>
 <span id="home-update" class="nav-ajax-left"></span>
 {{ endif }}
 {{ if $nav.community }}
-<a id="nav-community-link" class="nav-commlink $nav.community.2" href="$nav.community.0">$nav.community.1</a>
+<a id="nav-community-link" class="nav-commlink $nav.community.2" 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" href="$nav.notifications.0">$nav.notifications.1</a>
+<a id="nav-notify-link" class="nav-commlink $nav.notifications.2" href="$nav.notifications.0" title="$nav.notifications.3" >$nav.notifications.1</a>
 <span id="notify-update" class="nav-ajax-left"></span>
 {{ endif }}
 {{ if $nav.messages }}
-<a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0">$nav.messages.1</a>
+<a id="nav-messages-link" class="nav-commlink $nav.messages.2" href="$nav.messages.0" title="$nav.messages.3" >$nav.messages.1</a>
 <span id="mail-update" class="nav-ajax-left"></span>
 {{ endif }}
 
-{{ if $nav.manage }}<a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0">$nav.manage.1</a>{{ endif }}
+{{ if $nav.manage }}<a id="nav-manage-link" class="nav-commlink $nav.manage.2" href="$nav.manage.0" title="$nav.manage.3">$nav.manage.1</a>{{ endif }}
 
-{{ if $nav.settings }}<a id="nav-settings-link" class="nav-link $nav.settings.2" href="$nav.settings.0">$nav.settings.1</a>{{ endif }}
-{{ if $nav.profiles }}<a id="nav-profiles-link" class="nav-link $nav.profiles.2" href="$nav.profiles.0">$nav.profiles.1</a>{{ endif }}
+{{ if $nav.settings }}<a id="nav-settings-link" class="nav-link $nav.settings.2" href="$nav.settings.0" title="$nav.settings.3">$nav.settings.1</a>{{ endif }}
+{{ if $nav.profiles }}<a id="nav-profiles-link" class="nav-link $nav.profiles.2" href="$nav.profiles.0" title="$nav.profiles.3" >$nav.profiles.1</a>{{ endif }}
 
-{{ if $nav.contacts }}<a id="nav-contacts-link" class="nav-link $nav.contacts.2" href="$nav.contacts.0">$nav.contacts.1</a>{{ endif }}
+{{ if $nav.contacts }}<a id="nav-contacts-link" class="nav-link $nav.contacts.2" href="$nav.contacts.0" title="$nav.contacts.3" >$nav.contacts.1</a>{{ endif }}
 </span>
 <span id="nav-end"></span>
 <span id="banner">$banner</span>
index ac8388de4459cc0b2562239cf786e6c61f09d26f..16e8ba76753c02c291374613018dee1d0419c6f4 100644 (file)
        </div>
        <div id="register-openid-end" ></div>
 
+{{ if $invitations }}
+
+       <p id="register-invite-desc">$invite_desc</p>
+       <div id="register-invite-wrapper" >
+               <label for="register-invite" id="label-register-invite" >$invite_label</label>
+               <input type="text" maxlength="60" size="32" name="invite_id" id="register-invite" value="$invite_id" >
+       </div>
+       <div id="register-name-end" ></div>
+
+{{ endif }}
+
 
        <div id="register-name-wrapper" >
                <label for="register-name" id="label-register-name" >$namelabel</label>
index 5e8b907695938a9af41d3c377d5fbc2fee980533..b79fbfe43c3e8df72ae7bba903b95aa00d75d211 100644 (file)
@@ -15,8 +15,9 @@ $nickname_block
 {{inc field_password.tpl with $field=$password1 }}{{endinc}}
 {{inc field_password.tpl with $field=$password2 }}{{endinc}}
 
+{{ if $oid_enable }}
 {{inc field_input.tpl with $field=$openid }}{{endinc}}
-
+{{ endif }}
 
 <div class="settings-submit-wrapper" >
 <input type="submit" name="submit" class="settings-submit" value="$submit" />
@@ -82,11 +83,11 @@ $hide_wall
 <div id="settings-notify-desc">$lbl_not </div>
 
 <div class="group">
-{{inc field_checkbox.tpl with $field=$notify1 }}{{endinc}}
-{{inc field_checkbox.tpl with $field=$notify2 }}{{endinc}}
-{{inc field_checkbox.tpl with $field=$notify3 }}{{endinc}}
-{{inc field_checkbox.tpl with $field=$notify4 }}{{endinc}}
-{{inc field_checkbox.tpl with $field=$notify5 }}{{endinc}}
+{{inc field_intcheckbox.tpl with $field=$notify1 }}{{endinc}}
+{{inc field_intcheckbox.tpl with $field=$notify2 }}{{endinc}}
+{{inc field_intcheckbox.tpl with $field=$notify3 }}{{endinc}}
+{{inc field_intcheckbox.tpl with $field=$notify4 }}{{endinc}}
+{{inc field_intcheckbox.tpl with $field=$notify5 }}{{endinc}}
 </div>
 
 
index ca258617d94ee1d1ac8a6e3cb9e43fe080920746..fbeab23211ee321e8d02d4efa4726b9e91a25e9e 100644 (file)
@@ -45,8 +45,8 @@ code {
        border: 1px solid #444;
        background: #EEE;
        color: #444;
-       padding: 10px;
-       margin-top: 20px;
+       padding: 0px 10px 10px 10px;
+       margin-top: 20px; 
 }
 /*blockquote:before {
        content: '>> ';
diff --git a/view/theme/greenzero/greenicons.png b/view/theme/greenzero/greenicons.png
new file mode 100644 (file)
index 0000000..b20ac5c
Binary files /dev/null and b/view/theme/greenzero/greenicons.png differ
index 51fcc09aecaad387a981b65622ecf8a768db0eba..ab309930ceda38ce1603d5fc49689e51541be957 100644 (file)
@@ -12,6 +12,13 @@ a:hover {text-decoration: underline; }
        color: #ffffff;
 }
 
+.icon {
+       display: block; width: 16px; height: 16px;
+       background-image: url('greenicons.png');
+}
+
+
+
 body {         background-image: url(head.jpg); }
 aside(         background-image: url(border.jpg); }
 section {      background-image: url(border.jpg); }
diff --git a/view/xrd_diaspora.tpl b/view/xrd_diaspora.tpl
new file mode 100644 (file)
index 0000000..25cda53
--- /dev/null
@@ -0,0 +1,3 @@
+       <Link rel="http://joindiaspora.com/seed_location" type="text/html" href="$baseurl/" />
+       <Link rel="http://joindiaspora.com/guid" type="text/html" href="$dspr_guid" />
+       <Link rel="diaspora-public-key" type="RSA" href="$dspr_key" />
index b99f7c1fce1afe430b1b1f26a52218762b985cb9..0dabaa5a31b0bddbf88efa78fcf53767d613d2e8 100644 (file)
@@ -19,6 +19,7 @@
     <Link rel="http://webfinger.net/rel/avatar"
           type="image/jpeg"
           href="$photo" />
+       $dspr
     <Link rel="salmon" 
           href="$salmon" />
     <Link rel="http://salmon-protocol.org/ns/salmon-replies"