]> git.mxchange.org Git - friendica.git/commitdiff
personal config storage, template the vcard profile, logging failed uri's to help...
authorFriendika <info@friendika.com>
Tue, 14 Dec 2010 22:15:31 +0000 (14:15 -0800)
committerFriendika <info@friendika.com>
Tue, 14 Dec 2010 22:15:31 +0000 (14:15 -0800)
README
boot.php
database.sql
index.php
update.php
view/profile_vcard.tpl [new file with mode: 0644]
view/theme/default/style.css

diff --git a/README b/README
index e07e95320acd4404476408c2b2f65195fbf8ca56..f35b8c0cf9ca44d0e9a2a9a3e6a1ad8f3c29e7dc 100644 (file)
--- a/README
+++ b/README
@@ -43,7 +43,7 @@ are straight-forward and simple, because we know that relationships rarely are
 (straight-forward and simple). Whether you're communicating with drinking 
 buddies or potential employers, you can rest assured that each is only able to 
 see the side of you that you wish to present. If you send a private message to 
-your aunt Mary, we encrypt it with military grade encryption.
+your aunt Mary, we encrypt it with military grade encryption. 
 
 Other social network projects talk about privacy and offering a feature-rich 
 social networking alternative, but all they can deliver is vapour and vague 
index 4625f64f0fd4937d9fe1d2f1cbd6a569a968ec24..1546429c3505e0be30cebb0eae7f6912d38496d9 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -2,7 +2,7 @@
 
 set_time_limit(0);
 
-define ( 'BUILD_ID',               1022   );
+define ( 'BUILD_ID',               1023   );
 define ( 'DFRN_PROTOCOL_VERSION',  '2.0'  );
 
 define ( 'EOL',                    "<br />\r\n"     );
@@ -157,6 +157,7 @@ if(! class_exists('App')) {
 class App {
 
        public  $module_loaded = false;
+       public  $query_string;
        public  $config;
        public  $page;
        public  $profile;
@@ -189,6 +190,8 @@ class App {
                $this->page = array();
                $this->pager= array();
 
+               $this->query_string = '';
+
                $this->scheme = ((isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']))      ?  'https' : 'http' );
 
                if(x($_SERVER,'SERVER_NAME'))
@@ -197,7 +200,7 @@ class App {
                set_include_path("include/$this->hostname" . PATH_SEPARATOR . 'include' . PATH_SEPARATOR . '.' );
 
                if((x($_SERVER,'QUERY_STRING')) && substr($_SERVER['QUERY_STRING'],0,2) === "q=")
-                       $_SERVER['QUERY_STRING'] = substr($_SERVER['QUERY_STRING'],2);
+                       $this->query_string = substr($_SERVER['QUERY_STRING'],2);
                if(x($_GET,'q'))
                        $this->cmd = trim($_GET['q'],'/');
 
@@ -881,7 +884,7 @@ function hex2bin($s) {
 if(! function_exists('paginate')) {
 function paginate(&$a) {
        $o = '';
-       $stripped = preg_replace('/(&page=[0-9]*)/','',$_SERVER['QUERY_STRING']);
+       $stripped = preg_replace('/(&page=[0-9]*)/','',$a->query_string);
        $stripped = str_replace('q=','',$stripped);
        $stripped = trim($stripped,'/');
        $url = $a->get_baseurl() . '/' . $stripped;
@@ -1040,6 +1043,96 @@ function set_config($family,$key,$value) {
        return $ret;
 }}
 
+
+if(! function_exists('get_pconfig')) {
+function get_pconfig($uid,$family, $key, $instore = false) {
+
+       global $a;
+
+       if(! $instore) {
+               if(isset($a->config[$uid][$family][$key])) {
+                       if($a->config[$uid][$family][$key] === '!<unset>!') {
+                               return false;
+                       }
+                       return $a->config[$uid][$family][$key];
+               }
+       }
+       $ret = q("SELECT `v` FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+               intval($uid),
+               dbesc($family),
+               dbesc($key)
+       );
+       if(count($ret)) {
+               $a->config[$uid][$family][$key] = $ret[0]['v'];
+               return $ret[0]['v'];
+       }
+       else {
+               $a->config[$uid][$family][$key] = '!<unset>!';
+       }
+       return false;
+}}
+
+if(! function_exists('del_config')) {
+function del_config($family,$key) {
+
+       global $a;
+       if(x($a->config[$family],$key))
+               unset($a->config[$family][$key]);
+       $ret = q("DELETE FROM `config` WHERE `cat` = '%s' AND `k` = '%s' LIMIT 1",
+               dbesc($cat),
+               dbesc($key)
+       );
+       return $ret;
+}}
+
+
+
+// Same as above functions except these are for personal config storage and take an
+// additional $uid argument.
+
+if(! function_exists('set_pconfig')) {
+function set_pconfig($uid,$family,$key,$value) {
+
+       global $a;
+       $a->config[$uid][$family][$key] = $value;
+
+       if(get_pconfig($uid,$family,$key,true) === false) {
+               $ret = q("INSERT INTO `pconfig` ( `uid`, `cat`, `k`, `v` ) VALUES ( %d, '%s', '%s', '%s' ) ",
+                       intval($uid),
+                       dbesc($family),
+                       dbesc($key),
+                       dbesc($value)
+               );
+               if($ret) 
+                       return $value;
+               return $ret;
+       }
+       $ret = q("UPDATE `pconfig` SET `v` = '%s' WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+               intval($uid),
+               dbesc($value),
+               dbesc($family),
+               dbesc($key)
+       );
+       if($ret)
+               return $value;
+       return $ret;
+}}
+
+if(! function_exists('del_pconfig')) {
+function del_pconfig($uid,$family,$key) {
+
+       global $a;
+       if(x($a->config[$uid][$family],$key))
+               unset($a->config[$uid][$family][$key]);
+       $ret = q("DELETE FROM `pconfig` WHERE `uid` = %d AND `cat` = '%s' AND `k` = '%s' LIMIT 1",
+               intval($uid),
+               dbesc($cat),
+               dbesc($key)
+       );
+       return $ret;
+}}
+
+
 // convert an XML document to a normalised, case-corrected array
 // used by webfinger
 
@@ -1654,12 +1747,34 @@ function aes_encrypt($val,$ky)
     return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_DEV_URANDOM));
 }} 
 
+
+/**
+ *
+ * Function: linkify
+ *
+ * Replace naked text hyperlink with HTML formatted hyperlink
+ *
+ */
+
 if(! function_exists('linkify')) {
 function linkify($s) {
        $s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'\%]*)/", ' <a href="$1" >$1</a>', $s);
        return($s);
 }}
 
+
+/**
+ * 
+ * Function: smilies
+ *
+ * Description:
+ * Replaces text emoticons with graphical images
+ *
+ * @Parameter: string $s
+ *
+ * Returns string
+ */
+
 if(! function_exists('smilies')) {
 function smilies($s) {
        $a = get_app();
@@ -1739,14 +1854,95 @@ function profile_load(&$a, $nickname, $profile = 0) {
 
        $a->profile = $r[0];
 
-       $a->page['template'] = 'profile';
 
        $a->page['title'] = $a->profile['name'];
        $_SESSION['theme'] = $a->profile['theme'];
 
        if(! (x($a->page,'aside')))
                $a->page['aside'] = '';
+
+       $a->page['aside'] .= profile_sidebar($a->profile);
        $a->page['aside'] .= contact_block();
 
        return;
 }}
+
+
+/**
+ *
+ * Function: profile_sidebar
+ *
+ * Formats a profile for display in the sidebar.
+ * It is very difficult to templatise the HTML completely
+ * because of all the conditional logic.
+ *
+ * @parameter: array $profile
+ *
+ * Returns HTML string stuitable for sidebar inclusion
+ * Exceptions: Returns empty string if passed $profile is wrong type or not populated
+ *
+ */
+
+
+if(! function_exists('profile_sidebar')) {
+function profile_sidebar($profile) {
+
+       $o = '';
+       $location = '';
+       $address = false;
+
+       if((! is_array($profile)) && (! count($profile)))
+               return $o;
+
+       $fullname = '<div class="fn">' . $profile['name'] . '</div>';
+
+       $tabs = '';
+
+       $photo = '<div id="profile=photo-wrapper"><img class="photo" src="' . $profile['photo'] . '" alt="' . $profile['name'] . '" /></div>';
+
+       $connect = (($profile['uid'] != local_user()) ? '<li><a id="dfrn-request-link" href="dfrn_request/' . $profile['nickname'] . '">' . t('Connect') . '</a></li>' : '');
+       if((x($profile,'address') == 1) 
+               || (x($profile,'locality') == 1) 
+               || (x($profile,'region') == 1) 
+               || (x($profile,'postal-code') == 1) 
+               || (x($profile,'country-name') == 1))
+               $address = true;
+
+       if($address) {
+               $location .= '<div class="location"><span class="location-label">' . t('Location:') . '</span> <div class="adr">';
+               $location .= ((x($profile,'address') == 1) ? '<div class="street-address">' . $profile['address'] . '</div>' : '');
+               $location .= (((x($profile,'locality') == 1) || (x($profile,'region') == 1) || (x($profile,'postal-code') == 1)) 
+                       ? '<span class="city-state-zip"><span class="locality">' . $profile['locality'] . '</span>' 
+                       . ((x($profile['locality']) == 1) ? t(', ') : '') 
+                       . '<span class="region">' . $profile['region'] . '</span>'
+                       . ' <span class="postal-code">' . $profile['postal-code'] . '</span></span>' : '');
+               $location .= ((x($profile,'country-name') == 1) ? ' <span class="country-name">' . $profile['country-name'] . '</span>' : '');  
+               $location .= '</div></div><div class="profile-clear"></div>';
+
+       }
+
+       $gender = ((x($profile,'gender') == 1) ? '<div class="mf"><span class="gender-label">' . t('Gender:') . '</span> <span class="x-gender">' . $profile['gender'] . '</span></div><div class="profile-clear"></div>' : '');
+
+       $pubkey = ((x($profile,'key') == 1) ? '<div class="key" style="display:none;">' . $profile['pubkey'] . '</div>' : '');
+
+       $marital = ((x($profile,'marital') == 1) ? '<div class="marital"><span class="marital-label"><span class="heart">&hearts;</span> ' . t('Status:') . ' </span><span class="marital-text">' . $profile['marital'] . '</span></div></div><div class="profile-clear"></div>' : '');
+
+       $homepage = ((x($profile,'homepage') == 1) ? '<div class="homepage"><span class="homepage-label">' . t('Homepage:') . ' </span><span class="homepage-url">' . linkify($profile['homepage']) . '</span></div></div><div class="profile-clear"></div>' : '');
+
+       $tpl = load_view_file('view/profile_vcard.tpl');
+
+       $o .= replace_macros($tpl, array(
+               '$fullname' => $fullname,
+               '$tabs'     => $tabs,
+               '$photo'    => $photo,
+               '$connect'  => $connect,                
+               '$location' => $location,
+               '$gender'   => $gender,
+               '$pubkey'   => $pubkey,
+               '$marital'  => $marital,
+               '$homepage' => $homepage
+       ));
+
+       return $o;
+}}
\ No newline at end of file
index 0b322e9e020798adc4574fa9df8c4c09c8366577..148a8d0d8588acfe0855f865b3277dde5e6594f6 100644 (file)
@@ -419,3 +419,13 @@ CREATE TABLE IF NOT EXISTS `queue` (
 `last` DATETIME NOT NULL ,
 `content` MEDIUMTEXT NOT NULL
 ) ENGINE = MYISAM DEFAULT CHARSET=utf8;
+
+CREATE TABLE IF NOT EXISTS `pconfig` (
+`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+`uid` INT NOT NULL DEFAULT '0',
+`cat` CHAR( 255 ) NOT NULL ,
+`k` CHAR( 255 ) NOT NULL ,
+`v` MEDIUMTEXT NOT NULL
+) ENGINE = MYISAM DEFAULT CHARSET=utf8;
+
+
index e91603a30a78cd5cd294c38900180dd6140fb246..2f56d541430a1b67182ec20a72d88737b308fa27 100644 (file)
--- a/index.php
+++ b/index.php
@@ -131,6 +131,7 @@ if(strlen($a->module)) {
                $a->module_loaded = true;
        }
        else {
+               logger('index.php: page not found: ' . $_SERVER['REQUEST_URI'] . ' QUERY: ' . $_SERVER['QUERY_STRING'], LOGGER_DEBUG);
                header($_SERVER["SERVER_PROTOCOL"] . ' 404 ' . t('Not Found'));
                notice( t('Page not found.' ) . EOL);
        }
index 92b24079842ecc60db60cabe34e4a7fd4c34475a..b3fab6720bd658789b6a0312c4f4080ec7a414c7 100644 (file)
@@ -228,3 +228,12 @@ function update_1021() {
        q("ALTER TABLE `item` ADD `private` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `deny_gid` ");
 }
 
+function update_1022() {
+       q("CREATE TABLE `pconfig` (
+               `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
+               `uid` INT NOT NULL DEFAULT '0',
+               `cat` CHAR( 255 ) NOT NULL ,
+               `k` CHAR( 255 ) NOT NULL ,
+               `v` MEDIUMTEXT NOT NULL
+               ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci ");
+}
diff --git a/view/profile_vcard.tpl b/view/profile_vcard.tpl
new file mode 100644 (file)
index 0000000..81659af
--- /dev/null
@@ -0,0 +1,26 @@
+<div class="vcard">
+
+       $fullname
+
+       $tabs
+
+       $photo
+
+       <div id="profile-extra-links">
+               <ul>
+                       $connect
+               </ul>
+       </div>
+
+       $location
+
+       $gender
+
+       $pubkey
+
+</div>
+
+$marital
+
+$homepage
+
index f20341dd6925b4d68d0728f5fc8b16cba137484d..491486794f6afd4c1d9d7a5bf04b8e4f5c543b84 100644 (file)
@@ -188,7 +188,7 @@ img.photo {
 
 .heart {
        color: #FF0000;
-       font-size: 120%;
+       font-size: 100%;
 }
 
 aside {
@@ -1893,4 +1893,21 @@ a.mail-list-link {
 
 #search-box {
        margin-bottom: 25px;
-}
\ No newline at end of file
+}
+
+.location-label, .gender-label, .marital-label, .homepage-label {
+       float: left;
+       text-align: right;
+       display: block;
+       width: 65px;
+}
+
+.adr, .x-gender, .marital-text, .homepage-url {
+       float: left;
+       display: block;
+       margin-left: 8px;
+}
+
+.profile-clear {
+       clear: both;
+}