]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #2815 from annando/1609-mysql
authorTobias Diekershoff <tobias.diekershoff@gmx.net>
Thu, 29 Sep 2016 07:26:17 +0000 (09:26 +0200)
committerGitHub <noreply@github.com>
Thu, 29 Sep 2016 07:26:17 +0000 (09:26 +0200)
We should only use utf8mb4 for dumpsql and new installations

.gitignore
doc/api.md
include/api.php
js/main.js
view/theme/frio/css/style.css

index b300f579e299ab2526462792c2ac1bf03a338c83..8376ea87e8e5e8303d442e3e13e1b269ab3d7372 100644 (file)
@@ -42,3 +42,9 @@ nbproject
 \r
 #ignore local folder\r
 /local/\r
+\r
+#ignore config files from Visual Studio\r
+/.vs/\r
+/php_friendica.phpproj\r
+/php_friendica.sln\r
+/php_friendica.phpproj.user\r
index 0570e8e9908b2c2c2619b3e491c2c2f978ba98b4..bf1507adba7527bb20e62d7b71a92369212e46d1 100644 (file)
@@ -744,6 +744,38 @@ On success:
 On error:\r
 * different JSON returns {"result":"error","message":"searchstring not specified"}\r
 \r
+---\r
+### friendica/profile/show (GET; AUTH)\r
+show data of all profiles or a single profile of the authenticated user\r
+\r
+#### Parameters\r
+* profile_id: id of the profile to be returned (optional, if omitted all profiles are returned by default)\r
+\r
+#### Return values\r
+On success: Array of:\r
+\r
+* multi_profiles: true if user has activated multi_profiles\r
+* global_dir: URL of the global directory set in server settings\r
+* friendica_owner: user data of the authenticated user\r
+* profiles: array of the profile data\r
+\r
+On error: \r
+HTTP 403 Forbidden: when no authentication provided\r
+HTTP 400 Bad Request: if given profile_id is not in db or not assigned to authenticated user\r
+\r
+General description of profile data in API returns:\r
+* profile_id\r
+* profile_name\r
+* is_default: true if this is the public profile\r
+* hide_friends: true if friends are hidden\r
+* profile_photo\r
+* profile_thumb\r
+* publish: true if published on the server's local directory\r
+* net_publish: true if published to global_dir\r
+* description ... homepage: different data fields from 'profile' table in database\r
+* users: array with the users allowed to view this profile (empty if is_default=true)\r
+\r
+\r
 ---\r
 ## Not Implemented API calls\r
 The following API calls are implemented in GNU Social but not in Friendica: (incomplete)\r
index a9c5e7a46820736fb22faf6adcca65efbccbc506..b93f8cf72a32b0ce14dcabe9f1754b54f17431c1 100644 (file)
 
        }
 
+
+       /**
+        * @brief return data from profiles
+        *
+        * @param array $profile array containing data from db table 'profile'
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return array
+        */
+       function api_format_items_profiles(&$profile = null, $type = "json") {
+               if ($profile != null) {
+                       $profile = array('profile_id' => $profile['id'],
+                                                       'profile_name' => $profile['profile-name'],
+                                                       'is_default' => $profile['is-default'] ? true : false,
+                                                       'hide_friends'=> $profile['hide-friends'] ? true : false,
+                                                       'profile_photo' => $profile['photo'],
+                                                       'profile_thumb' => $profile['thumb'],
+                                                       'publish' => $profile['publish'] ? true : false,
+                                                       'net_publish' => $profile['net-publish'] ? true : false,
+                                                       'description' => $profile['pdesc'],
+                                                       'date_of_birth' => $profile['dob'],
+                                                       'address' => $profile['address'],
+                                                       'city' => $profile['locality'],
+                                                       'region' => $profile['region'],
+                                                       'postal_code' => $profile['postal-code'],
+                                                       'country' => $profile['country-name'],
+                                                       'hometown' => $profile['hometown'],
+                                                       'gender' => $profile['gender'],
+                                                       'marital' => $profile['marital'],
+                                                       'marital_with' => $profile['with'],
+                                                       'marital_since' => $profile['howlong'],
+                                                       'sexual' => $profile['sexual'],
+                                                       'politic' => $profile['politic'],
+                                                       'religion' => $profile['religion'],
+                                                       'public_keywords' => $profile['pub_keywords'],
+                                                       'private_keywords' => $profile['prv_keywords'],
+                                                       'likes' => bbcode(api_clean_plain_items($profile['likes']), false, false, 2, true),
+                                                       'dislikes' => bbcode(api_clean_plain_items($profile['dislikes']), false, false, 2, true),
+                                                       'about' => bbcode(api_clean_plain_items($profile['about']), false, false, 2, true),
+                                                       'music' => bbcode(api_clean_plain_items($profile['music']), false, false, 2, true),
+                                                       'book' => bbcode(api_clean_plain_items($profile['book']), false, false, 2, true),
+                                                       'tv' => bbcode(api_clean_plain_items($profile['tv']), false, false, 2, true),
+                                                       'film' => bbcode(api_clean_plain_items($profile['film']), false, false, 2, true),
+                                                       'interest' => bbcode(api_clean_plain_items($profile['interest']), false, false, 2, true),
+                                                       'romance' => bbcode(api_clean_plain_items($profile['romance']), false, false, 2, true),
+                                                       'work' => bbcode(api_clean_plain_items($profile['work']), false, false, 2, true),
+                                                       'education' => bbcode(api_clean_plain_items($profile['education']), false, false, 2, true),
+                                                       'social_networks' => bbcode(api_clean_plain_items($profile['contact']), false, false, 2, true),
+                                                       'homepage' => $profile['homepage'],
+                                                       'users' => null);
+                       return $profile;
+               } 
+       }
+
        /**
         * @brief format items to be returned by api
         *
        api_register_func('api/friendica/direct_messages_search', 'api_friendica_direct_messages_search', true);
 
 
+       /**
+        * @brief return data of all the profiles a user has to the client
+        *
+        * @param string $type Known types are 'atom', 'rss', 'xml' and 'json'
+        * @return string
+        */
+       function api_friendica_profile_show($type){
+               $a = get_app();
+
+               if (api_user()===false) throw new ForbiddenException();
+
+               // input params
+               $profileid = (x($_REQUEST,'profile_id') ? $_REQUEST['profile_id'] : 0);
+
+               // retrieve general information about profiles for user
+               $multi_profiles = feature_enabled(api_user(),'multi_profiles');
+               $directory = get_config('system', 'directory');
+
+// get data of the specified profile id or all profiles of the user if not specified
+               if ($profileid != 0) {
+                       $r = q("SELECT * FROM `profile` WHERE `uid` = %d AND `id` = %d",
+                               intval(api_user()),
+                               intval($profileid));
+                       // error message if specified gid is not in database
+                       if (count($r) == 0)
+                               throw new BadRequestException("profile_id not available");
+               }
+               else
+                       $r = q("SELECT * FROM `profile` WHERE `uid` = %d",
+                               intval(api_user()));
+
+               // loop through all returned profiles and retrieve data and users
+               $k = 0;
+               foreach ($r as $rr) {
+                       $profile = api_format_items_profiles($rr, $type);
+
+                       // select all users from contact table, loop and prepare standard return for user data
+                       $users = array();
+                       $r = q("SELECT `id`, `nurl` FROM `contact` WHERE `uid`= %d AND `profile-id` = %d",
+                               intval(api_user()),
+                               intval($rr['profile_id']));
+
+                       foreach ($r as $rr) {
+                               $user = api_get_user($a, $rr['nurl']);
+                               ($type == "xml") ? $users[$k++.":user"] = $user : $users[] = $user;
+                       }
+                       $profile['users'] = $users;
+
+                       // add prepared profile data to array for final return
+                       if ($type == "xml") {
+                               $profiles[$k++.":profile"] = $profile;
+                       } else {
+                               $profiles[] = $profile;
+                       }
+               }
+
+               // return settings, authenticated user and profiles data
+               $result = array('multi_profiles' => $multi_profiles ? true : false,
+                                               'global_dir' => $directory,
+                                               'friendica_owner' => api_get_user($a, intval(api_user())),
+                                               'profiles' => $profiles);
+               return api_format_data("friendica_profiles", $type, array('$result' => $result));
+       }
+       api_register_func('api/friendica/profile/show', 'api_friendica_profile_show', true, API_METHOD_GET);
+
 /*
 To.Do:
     [pagename] => api/1.1/statuses/lookup.json
@@ -3905,6 +4023,9 @@ account/update_profile_background_image
 account/update_profile_image
 blocks/create
 blocks/destroy
+friendica/profile/update
+friendica/profile/create
+friendica/profile/delete
 
 Not implemented in status.net:
 statuses/retweeted_to_me
index 2d0b2da36ac533b8da509b88f987294b011589cd..72bef8849038894b10b82dad76be4aad8e9617a6 100644 (file)
                }
        }
 
-  function openClose(theID) {
-    if(document.getElementById(theID).style.display == "block") {
-      document.getElementById(theID).style.display = "none"
-    }
-    else {
-      document.getElementById(theID).style.display = "block"
-    }
-  }
+       function openClose(theID) {
+               if(document.getElementById(theID).style.display == "block") {
+                       document.getElementById(theID).style.display = "none"
+               }
+               else {
+                       document.getElementById(theID).style.display = "block"
+               }
+       }
 
-  function openMenu(theID) {
-      document.getElementById(theID).style.display = "block"
-  }
+       function openMenu(theID) {
+               document.getElementById(theID).style.display = "block"
+       }
 
-  function closeMenu(theID) {
-      document.getElementById(theID).style.display = "none"
-  }
+       function closeMenu(theID) {
+               document.getElementById(theID).style.display = "none"
+       }
 
+       function decodeHtml(html) {
+               var txt = document.createElement("textarea");
+               txt.innerHTML = html;
+               return txt.value;
+       }
 
 
        var src = null;
                                        if (notification_lastitem!== null && notification_id > notification_lastitem) {
                                                if (getNotificationPermission()==="granted") {
                                                        var notification = new Notification(document.title, {
-                                                                                         body: e.text().replace('&rarr; ','').format(e.attr('name')),
+                                                                                         body: decodeHtml(e.text().replace('&rarr; ','').format(e.attr('name'))),
                                                                                          icon: e.attr('photo'),
                                                                                         });
                                                        notification['url'] = e.attr('href');
                        $(".comment-edit-form  textarea").editor_autocomplete(baseurl+"/acl");
                        /* autocomplete bbcode */
                        $(".comment-edit-form  textarea").bbco_autocomplete('bbcode');
-                       
+
                        // setup videos, since VideoJS won't take care of any loaded via AJAX
                        if(typeof videojs != 'undefined') videojs.autoSetup();
                });
index daabc0f95826f8b56a5a7ea247a1957708dcfca1..7795a7e433028eb11dc219b889204b72fb5c5ed1 100644 (file)
@@ -60,6 +60,9 @@ section hr {
 iframe, img {
     max-width: 100%;
 }
+blockquote {
+    font-size: inherit;
+}
 .clear {
     clear: both;
 }
@@ -1419,8 +1422,6 @@ section #jotOpen {
 
 .shared-wrapper,
 .vevent {
-    margin-left: 50px;
-    margin-right: 50px;
     padding: 10px;
     box-shadow: 0 0 0 1.5px rgba(0, 0, 0, .1) inset, 0 1px 1px rgba(0, 0, 0, .05);
 }
@@ -1437,13 +1438,15 @@ section #jotOpen {
 }
 .shared_header {
     margin-left: 0px;
-        margin-top: 0px;
+    margin-top: 0px;
     padding-top: 0px;
+    margin-bottom: 10px;
     border-top: none;
     color: inherit;
 }
 blockquote.shared_content {
-    margin-left: 20px;
+    padding: 0px;
+    margin-left: 0px;
     color: inherit;
 }
 .wall-item-tags,