Merge pull request #4682 from MrPetovan/task/4681-nsfw-add-hashtag-only-hiding
authorMichael Vogel <icarus@dabo.de>
Sun, 25 Mar 2018 20:26:17 +0000 (22:26 +0200)
committerGitHub <noreply@github.com>
Sun, 25 Mar 2018 20:26:17 +0000 (22:26 +0200)
Move suppress_tags config usage to template

13 files changed:
.github/issue_template.md [new file with mode: 0644]
boot.php
database.sql
mod/profile_photo.php
mod/profiles.php
mod/settings.php
src/Content/Text/BBCode.php
src/Database/DBStructure.php
src/Model/Contact.php
src/Model/Event.php
src/Model/GContact.php
src/Object/Image.php
src/Protocol/OStatus.php

diff --git a/.github/issue_template.md b/.github/issue_template.md
new file mode 100644 (file)
index 0000000..3a2a941
--- /dev/null
@@ -0,0 +1,13 @@
+### Expected behavior
+
+### Actual behavior
+
+### Steps to reproduce the problem
+
+### Friendica version you encountered the problem
+
+### Friendica source (git, zip)
+
+### PHP version
+
+### SQL version
index fcdce92..71050fe 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -41,7 +41,7 @@ define('FRIENDICA_PLATFORM',     'Friendica');
 define('FRIENDICA_CODENAME',     'The Tazmans Flax-lily');
 define('FRIENDICA_VERSION',      '2018-05-dev');
 define('DFRN_PROTOCOL_VERSION',  '2.23');
-define('DB_UPDATE_VERSION',      1257);
+define('DB_UPDATE_VERSION',      1258);
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
 /**
index 8778a0c..e8662f9 100644 (file)
@@ -1,6 +1,6 @@
 -- ------------------------------------------
 -- Friendica 2018-05-dev (The Tazmans Flax-lily)
--- DB_UPDATE_VERSION 1257
+-- DB_UPDATE_VERSION 1258
 -- ------------------------------------------
 
 
@@ -122,9 +122,9 @@ CREATE TABLE IF NOT EXISTS `contact` (
        `xmpp` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `attag` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `avatar` varchar(255) NOT NULL DEFAULT '' COMMENT '',
-       `photo` varchar(255) NOT NULL DEFAULT '' COMMENT '',
-       `thumb` varchar(255) NOT NULL DEFAULT '' COMMENT '',
-       `micro` varchar(255) NOT NULL DEFAULT '' COMMENT '',
+       `photo` varchar(255) DEFAULT '' COMMENT '',
+       `thumb` varchar(255) DEFAULT '' COMMENT '',
+       `micro` varchar(255) DEFAULT '' COMMENT '',
        `site-pubkey` text COMMENT '',
        `issued-id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
        `dfrn-id` varchar(255) NOT NULL DEFAULT '' COMMENT '',
@@ -1079,3 +1079,4 @@ CREATE TABLE IF NOT EXISTS `workerqueue` (
         INDEX `executed` (`executed`)
 ) DEFAULT COLLATE utf8mb4_general_ci;
 
+
index 80bdfa5..1a80b53 100644 (file)
@@ -9,6 +9,7 @@ use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\Photo;
 use Friendica\Model\Profile;
 use Friendica\Object\Image;
@@ -105,18 +106,11 @@ function profile_photo_post(App $a) {
 
                                // If setting for the default profile, unset the profile photo flag from any other photos I own
 
-                               if($is_default_profile) {
+                               if ($is_default_profile) {
                                        $r = q("UPDATE `photo` SET `profile` = 0 WHERE `profile` = 1 AND `resource-id` != '%s' AND `uid` = %d",
                                                dbesc($base_image['resource-id']),
                                                intval(local_user())
                                        );
-
-                                       $r = q("UPDATE `contact` SET `photo` = '%s', `thumb` = '%s', `micro` = '%s'  WHERE `self` AND `uid` = %d",
-                                               dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $Image->getExt()),
-                                               dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-5.' . $Image->getExt()),
-                                               dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-6.' . $Image->getExt()),
-                                               intval(local_user())
-                                       );
                                } else {
                                        $r = q("update profile set photo = '%s', thumb = '%s' where id = %d and uid = %d",
                                                dbesc(System::baseUrl() . '/photo/' . $base_image['resource-id'] . '-4.' . $Image->getExt()),
@@ -126,13 +120,7 @@ function profile_photo_post(App $a) {
                                        );
                                }
 
-                               // we'll set the updated profile-photo timestamp even if it isn't the default profile,
-                               // so that browsers will do a cache update unconditionally
-
-                               $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-                                       dbesc(DateTimeFormat::utcNow()),
-                                       intval(local_user())
-                               );
+                               Contact::updateSelfFromUserID(local_user(), true);
 
                                info(L10n::t('Shift-reload the page or clear browser cache if the new photo does not display immediately.') . EOL);
                                // Update global directory in background
@@ -229,10 +217,7 @@ function profile_photo_content(App $a) {
                                dbesc($resource_id)
                                );
 
-                       $r = q("UPDATE `contact` SET `avatar-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-                               dbesc(DateTimeFormat::utcNow()),
-                               intval(local_user())
-                       );
+                       Contact::updateSelfFromUserID(local_user(), true);
 
                        // Update global directory in background
                        $url = $_SESSION['my_url'];
index ce71f0c..bec09e2 100644 (file)
@@ -485,29 +485,15 @@ function profiles_post(App $a) {
                        info(L10n::t('Profile updated.') . EOL);
                }
 
-
-               if ($namechanged && $is_default) {
-                       $r = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `self` = 1 AND `uid` = %d",
-                               dbesc($name),
-                               dbesc(DateTimeFormat::utcNow()),
-                               intval(local_user())
-                       );
-                       $r = q("UPDATE `user` set `username` = '%s' where `uid` = %d",
-                               dbesc($name),
-                               intval(local_user())
-                       );
-               }
-
                if ($is_default) {
-                       $location = Profile::formatLocation(["locality" => $locality, "region" => $region, "country-name" => $country_name]);
-
-                       q("UPDATE `contact` SET `about` = '%s', `location` = '%s', `keywords` = '%s', `gender` = '%s' WHERE `self` AND `uid` = %d",
-                               dbesc($about),
-                               dbesc($location),
-                               dbesc($pub_keywords),
-                               dbesc($gender),
-                               intval(local_user())
-                       );
+                       if ($namechanged) {
+                               $r = q("UPDATE `user` set `username` = '%s' where `uid` = %d",
+                                       dbesc($name),
+                                       intval(local_user())
+                               );
+                       }
+
+                       Contact::updateSelfFromUserID(local_user());
 
                        // Update global directory in background
                        $url = $_SESSION['my_url'];
index 8def780..f4ad584 100644 (file)
@@ -14,6 +14,7 @@ use Friendica\Core\PConfig;
 use Friendica\Core\System;
 use Friendica\Core\Worker;
 use Friendica\Database\DBM;
+use Friendica\Model\Contact;
 use Friendica\Model\GContact;
 use Friendica\Model\Group;
 use Friendica\Model\User;
@@ -490,10 +491,7 @@ function settings_post(App $a)
 
        $err = '';
 
-       $name_change = false;
-
        if ($username != $a->user['username']) {
-               $name_change = true;
                if (strlen($username) > 40) {
                        $err .= L10n::t(' Please use a shorter name.');
                }
@@ -633,14 +631,7 @@ function settings_post(App $a)
                intval(local_user())
        );
 
-
-       if ($name_change) {
-               q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `self`",
-                       dbesc($username),
-                       dbesc(DateTimeFormat::utcNow()),
-                       intval(local_user())
-               );
-       }
+       Contact::updateSelfFromUserID(local_user());
 
        if (($old_visibility != $net_publish) || ($page_flags != $old_page_flags)) {
                // Update global directory in background
index ebaef2b..7d1c429 100644 (file)
@@ -76,10 +76,12 @@ class BBCode extends BaseObject
 
                                        $picturedata = Image::getInfoFromURL($matches[1]);
 
-                                       if (($picturedata[0] >= 500) && ($picturedata[0] >= $picturedata[1])) {
-                                               $post["image"] = $matches[1];
-                                       } else {
-                                               $post["preview"] = $matches[1];
+                                       if ($picturedata) {
+                                               if (($picturedata[0] >= 500) && ($picturedata[0] >= $picturedata[1])) {
+                                                       $post["image"] = $matches[1];
+                                               } else {
+                                                       $post["preview"] = $matches[1];
+                                               }
                                        }
                                }
 
@@ -266,7 +268,7 @@ class BBCode extends BaseObject
                                                $post["text"] = str_replace($pictures[0][0], "", $body);
                                        } else {
                                                $imgdata = Image::getInfoFromURL($pictures[0][1]);
-                                               if (substr($imgdata["mime"], 0, 6) == "image/") {
+                                               if ($imgdata && substr($imgdata["mime"], 0, 6) == "image/") {
                                                        $post["type"] = "photo";
                                                        $post["image"] = $pictures[0][1];
                                                        $post["preview"] = $pictures[0][2];
index 9e6ce5b..5d527aa 100644 (file)
@@ -788,9 +788,9 @@ class DBStructure
                                                "xmpp" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                                                "attag" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                                                "avatar" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
-                                               "photo" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
-                                               "thumb" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
-                                               "micro" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
+                                               "photo" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
+                                               "thumb" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
+                                               "micro" => ["type" => "varchar(255)", "default" => "", "comment" => ""],
                                                "site-pubkey" => ["type" => "text", "comment" => ""],
                                                "issued-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                                                "dfrn-id" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
index b5fef04..60dec8b 100644 (file)
@@ -22,6 +22,7 @@ use Friendica\Protocol\PortableContact;
 use Friendica\Protocol\Salmon;
 use Friendica\Util\DateTimeFormat;
 use Friendica\Util\Network;
+use Friendica\Object\Image;
 use dba;
 
 require_once 'boot.php';
@@ -138,6 +139,90 @@ class Contact extends BaseObject
                return $return;
        }
 
+       /**
+        * Updates the self-contact for the provided user id
+        *
+        * @param int $uid
+        * @param boolean $update_avatar Force the avatar update
+        */
+       public static function updateSelfFromUserID($uid, $update_avatar = false)
+       {
+               $fields = ['id', 'name', 'nick', 'location', 'about', 'keywords', 'gender', 'avatar',
+                       'xmpp', 'contact-type', 'forum', 'prv', 'avatar-date', 'nurl'];
+               $self = dba::selectFirst('contact', $fields, ['uid' => $uid, 'self' => true]);
+               if (!DBM::is_result($self)) {
+                       return;
+               }
+
+               $fields = ['nickname', 'page-flags', 'account-type'];
+               $user = dba::selectFirst('user', $fields, ['uid' => $uid]);
+               if (!DBM::is_result($user)) {
+                       return;
+               }
+
+               $fields = ['name', 'photo', 'thumb', 'about', 'address', 'locality', 'region',
+                       'country-name', 'gender', 'pub_keywords', 'xmpp'];
+               $profile = dba::selectFirst('profile', $fields, ['uid' => $uid, 'is-default' => true]);
+               if (!DBM::is_result($profile)) {
+                       return;
+               }
+
+               $fields = ['name' => $profile['name'], 'nick' => $user['nickname'],
+                       'avatar-date' => $self['avatar-date'], 'location' => Profile::formatLocation($profile),
+                       'about' => $profile['about'], 'keywords' => $profile['pub_keywords'],
+                       'gender' => $profile['gender'], 'avatar' => $profile['photo'],
+                       'contact-type' => $user['account-type'], 'xmpp' => $profile['xmpp']];
+
+               $avatar = dba::selectFirst('photo', ['resource-id', 'type'], ['uid' => $uid, 'profile' => true]);
+               if (DBM::is_result($avatar)) {
+                       if ($update_avatar) {
+                               $fields['avatar-date'] = DateTimeFormat::utcNow();
+                       }
+
+                       // Creating the path to the avatar, beginning with the file suffix
+                       $types = Image::supportedTypes();
+                       if (isset($types[$avatar['type']])) {
+                               $file_suffix = $types[$avatar['type']];
+                       } else {
+                               $file_suffix = 'jpg';
+                       }
+
+                       // We are adding a timestamp value so that other systems won't use cached content
+                       $timestamp = strtotime($fields['avatar-date']);
+
+                       $prefix = System::baseUrl() . '/photo/' .$avatar['resource-id'] . '-';
+                       $suffix = '.' . $file_suffix . '?ts=' . $timestamp;
+
+                       $fields['photo'] = $prefix . '4' . $suffix;
+                       $fields['thumb'] = $prefix . '5' . $suffix;
+                       $fields['micro'] = $prefix . '6' . $suffix;
+               } else {
+                       // We hadn't found a photo entry, so we use the default avatar
+                       $fields['photo'] = System::baseUrl() . '/images/person-175.jpg';
+                       $fields['thumb'] = System::baseUrl() . '/images/person-80.jpg';
+                       $fields['micro'] = System::baseUrl() . '/images/person-48.jpg';
+               }
+
+               $fields['forum'] = $user['page-flags'] == PAGE_COMMUNITY;
+               $fields['prv'] = $user['page-flags'] == PAGE_PRVGROUP;
+
+               $update = false;
+
+               foreach ($fields as $field => $content) {
+                       if ($self[$field] != $content) {
+                               $update = true;
+                       }
+               }
+
+               if ($update) {
+                       $fields['name-date'] = DateTimeFormat::utcNow();
+                       dba::update('contact', $fields, ['id' => $self['id']]);
+
+                       // Update the public contact as well
+                       dba::update('contact', $fields, ['uid' => 0, 'nurl' => $self['nurl']]);
+               }
+       }
+
        /**
         * @brief Marks a contact for removal
         *
index 87c8b23..9fa5552 100644 (file)
@@ -737,7 +737,7 @@ class Event extends BaseObject
 
                $events = dba::select('event', $fields, $conditions);
                if (DBM::is_result($events)) {
-                       $return = $events;
+                       $return = dba::inArray($events);
                }
 
                return $return;
index d098e8f..8f16c07 100644 (file)
@@ -873,7 +873,8 @@ class GContact
 
                        // Now update the contact entry with the user id "0" as well.
                        // This is used for the shadow copies of public items.
-
+                       /// @todo Check if we really should do this.
+                       // The quality of the gcontact table is mostly lower than the public contact
                        $public_contact = dba::selectFirst('contact', ['id'], ['nurl' => normalise_link($contact["url"]), 'uid' => 0]);
                        if (DBM::is_result($public_contact)) {
                                logger("Update public contact ".$public_contact["id"], LOGGER_DEBUG);
@@ -894,6 +895,12 @@ class GContact
                                                'contact-type' => $contact['contact-type'], 'url' => $contact['url'],
                                                'location' => $contact['location'], 'about' => $contact['about']];
 
+                               // Don't update the birthday field if not set or invalid
+                               if (empty($contact['birthday']) || ($contact['birthday'] < '0001-01-01')) {
+                                       unset($fields['bd']);
+                               }
+
+
                                dba::update('contact', $fields, ['id' => $public_contact["id"]], $old_contact);
                        }
                }
index 2f4d55d..9692b84 100644 (file)
@@ -771,6 +771,10 @@ class Image
        {
                $data = [];
 
+               if (empty($url)) {
+                       return $data;
+               }
+
                $data = Cache::get($url);
 
                if (is_null($data) || !$data || !is_array($data)) {
index 602d178..8b69392 100644 (file)
@@ -1313,7 +1313,7 @@ class OStatus
        }
 
        /**
-        * @brief Adds attachement data to the XML document
+        * @brief Adds attachment data to the XML document
         *
         * @param object $doc  XML document
         * @param object $root XML root element where the hub links are added
@@ -1328,11 +1328,13 @@ class OStatus
                switch ($siteinfo["type"]) {
                        case 'photo':
                                $imgdata = Image::getInfoFromURL($siteinfo["image"]);
-                               $attributes = ["rel" => "enclosure",
-                                               "href" => $siteinfo["image"],
-                                               "type" => $imgdata["mime"],
-                                               "length" => intval($imgdata["size"])];
-                               XML::addElement($doc, $root, "link", "", $attributes);
+                               if ($imgdata) {
+                                       $attributes = ["rel" => "enclosure",
+                                                       "href" => $siteinfo["image"],
+                                                       "type" => $imgdata["mime"],
+                                                       "length" => intval($imgdata["size"])];
+                                       XML::addElement($doc, $root, "link", "", $attributes);
+                               }
                                break;
                        case 'video':
                                $attributes = ["rel" => "enclosure",
@@ -1348,12 +1350,14 @@ class OStatus
 
                if (!Config::get('system', 'ostatus_not_attach_preview') && ($siteinfo["type"] != "photo") && isset($siteinfo["image"])) {
                        $imgdata = Image::getInfoFromURL($siteinfo["image"]);
-                       $attributes = ["rel" => "enclosure",
-                                       "href" => $siteinfo["image"],
-                                       "type" => $imgdata["mime"],
-                                       "length" => intval($imgdata["size"])];
+                       if ($imgdata) {
+                               $attributes = ["rel" => "enclosure",
+                                               "href" => $siteinfo["image"],
+                                               "type" => $imgdata["mime"],
+                                               "length" => intval($imgdata["size"])];
 
-                       XML::addElement($doc, $root, "link", "", $attributes);
+                               XML::addElement($doc, $root, "link", "", $attributes);
+                       }
                }
 
                $arr = explode('[/attach],', $item['attach']);