]> git.mxchange.org Git - friendica.git/commitdiff
Fix adding / removing photo tags + tagrm delete via GET + Item::update / add Term...
authorJonny Tischbein <jonny_tischbein@systemli.org>
Tue, 23 Oct 2018 09:40:20 +0000 (11:40 +0200)
committerJonny Tischbein <jonny_tischbein@systemli.org>
Thu, 25 Oct 2018 19:47:10 +0000 (21:47 +0200)
mod/photos.php
mod/tagrm.php
src/Model/Item.php
src/Model/Term.php
view/theme/frio/templates/photo_view.tpl

index 008d59cd9cd23d08dff9b41e7a8ecaf5a3098aab..65ad9b5d4b8658c67a46c63b0bdcfbe0e98b1ba2 100644 (file)
@@ -612,7 +612,7 @@ function photos_post(App $a)
                                                }
                                        } elseif (strpos($tag, '#') === 0) {
                                                $tagname = substr($tag, 1);
-                                               $str_tags .= '#[url=' . System::baseUrl() . "/search?tag=" . $tagname . ']' . $tagname . '[/url]';
+                                               $str_tags .= '#[url=' . System::baseUrl() . "/search?tag=" . $tagname . ']' . $tagname . '[/url],';
                                        }
                                }
                        }
@@ -1417,17 +1417,15 @@ function photos_content(App $a)
                if (count($linked_items) && strlen($link_item['tag'])) {
                        $arr = explode(',', $link_item['tag']);
                        // parse tags and add links
-                       $tag_str = '';
+                       $tag_arr = [];
                        foreach ($arr as $t) {
-                               if (strlen($tag_str)) {
-                                       $tag_str .= ', ';
-                               }
-                               $tag_str .= BBCode::convert($t);
+                               array_push($tag_arr, ['name' => BBCode::convert($t),
+                                       'removeurl' => '/tagrm/'.$link_item['id'] . '/' . bin2hex($t)]);
                        }
-                       $tags = [L10n::t('Tags: '), $tag_str];
+                       $tags = ['title' => L10n::t('Tags: '), 'tags' => $tag_arr];
                        if ($cmd === 'edit') {
-                               $tags[] = 'tagrm/' . $link_item['id'];
-                               $tags[] = L10n::t('[Remove any tag]');
+                               $tags += ['removeanyurl' => 'tagrm/' . $link_item['id']];
+                               $tags += ['removetitle' => L10n::t('[Remove any tag]')];
                        }
                }
 
index 105cc0b3d55467b867a5f8b1a3081b4cd698fcba..39581efbb04fe3b9cce3b1a713941c4e886ece91 100644 (file)
@@ -20,8 +20,27 @@ function tagrm_post(App $a)
                $a->internalRedirect($_SESSION['photo_return']);
        }
 
-       $tag =  (x($_POST,'tag')  ? hex2bin(notags(trim($_POST['tag']))) : '');
-       $item_id = (x($_POST,'item') ? intval($_POST['item'])               : 0);
+       $tags = [];
+       if (defaults($_POST, 'tag', '')){
+               foreach ($_POST['tag'] as $t){
+                       array_push($tags, hex2bin(notags(trim($t))));
+               }
+       }
+
+       $item_id = defaults($_POST,'item', 0);
+       update_tags($item_id, $tags);
+
+       info(L10n::t('Tag(s) removed') . EOL );
+
+       $a->internalRedirect($_SESSION['photo_return']);
+
+       // NOTREACHED
+}
+
+function update_tags($item_id, $tags){
+       if (empty($item_id) || empty($tags)){
+               $a->internalRedirect($_SESSION['photo_return']);
+       }
 
        $item = Item::selectFirst(['tag'], ['id' => $item_id, 'uid' => local_user()]);
        if (!DBA::isResult($item)) {
@@ -29,25 +48,29 @@ function tagrm_post(App $a)
        }
 
        $arr = explode(',', $item['tag']);
-       for ($x = 0; $x < count($arr); $x ++) {
-               if ($arr[$x] === $tag) {
-                       unset($arr[$x]);
-                       break;
+
+       foreach ($tags as $t) {
+               foreach ($arr as $i => $x) {
+                       if (strcmp($x, $t) == 0) {
+                               unset($arr[$i]);
+                               break;
+                       }
                }
        }
 
        $tag_str = implode(',',$arr);
+       if(empty($tag_str)){
+               $tag_str = '';
+       }
 
        Item::update(['tag' => $tag_str], ['id' => $item_id]);
 
-       info(L10n::t('Tag removed') . EOL );
+       info(L10n::t('Tag(s) removed') . EOL );
        $a->internalRedirect($_SESSION['photo_return']);
 
        // NOTREACHED
 }
 
-
-
 function tagrm_content(App $a)
 {
        $o = '';
@@ -57,6 +80,11 @@ function tagrm_content(App $a)
                // NOTREACHED
        }
 
+       if ($a->argc == 3){
+               update_tags($a->argv[1], [hex2bin(notags(trim($a->argv[2])))]);
+               goaway('/' . $_SESSION['photo_return']);
+       }
+
        $item_id = (($a->argc > 1) ? intval($a->argv[1]) : 0);
        if (!$item_id) {
                $a->internalRedirect($_SESSION['photo_return']);
@@ -70,7 +98,8 @@ function tagrm_content(App $a)
 
        $arr = explode(',', $item['tag']);
 
-       if (!count($arr)) {
+
+       if (empty($item['tag'])) {
                $a->internalRedirect($_SESSION['photo_return']);
        }
 
@@ -83,7 +112,7 @@ function tagrm_content(App $a)
        $o .= '<ul>';
 
        foreach ($arr as $x) {
-               $o .= '<li><input type="checkbox" name="tag" value="' . bin2hex($x) . '" >' . BBCode::convert($x) . '</input></li>';
+               $o .= '<li><input type="checkbox" name="tag[]" value="' . bin2hex($x) . '" >' . BBCode::convert($x) . '</input></li>';
        }
 
        $o .= '</ul>';
index 1c0b11db4aae80c6b3db9c5e2782b08940b96e46..9b016295ee91a09a75bef832b0ad64f3c8b7983f 100644 (file)
@@ -816,7 +816,7 @@ class Item extends BaseObject
                        $tags = $fields['tag'];
                        $fields['tag'] = null;
                } else {
-                       $tags = '';
+                       $tags = null;
                }
 
                if (array_key_exists('file', $fields)) {
@@ -895,10 +895,14 @@ class Item extends BaseObject
                                }
                        }
 
-                       if (!empty($tags)) {
-                               Term::insertFromTagFieldByItemId($item['id'], $tags);
-                               if (!empty($item['tag'])) {
-                                       DBA::update('item', ['tag' => ''], ['id' => $item['id']]);
+                       if (!is_null($tags)) {
+                               Term::deleteAllTags($item['id']);
+
+                               if ($tags) {
+                                       Term::insertFromTagFieldByItemId($item['id'], $tags);
+                                       if (!empty($item['tag'])) {
+                                               DBA::update('item', ['tag' => ''], ['id' => $item['id']]);
+                                       }
                                }
                        }
 
index 854861ccb589b022609d48000a7b21f0d2ce286c..6c89b5d00fe17d88a5e112a0ee16565d0579eded 100644 (file)
@@ -290,4 +290,19 @@ class Term
 
                return $return;
        }
+
+       /*
+        * Deletes all Tags from an item
+        */
+       public static function deleteAllTags($itemid)
+       {
+               $message = Item::selectFirst(['id'], ['id' => $itemid]);
+               if (!DBA::isResult($message)) {
+                       return;
+               }
+
+               // Clean up all tags
+               DBA::delete('term', ['otype' => TERM_OBJ_POST, 'oid' => $itemid, 'type' => [TERM_HASHTAG, TERM_MENTION]]);
+
+       }
 }
index e610926d4cbf3550683f54bcca423c1550821a83..cc72a10fa2d8b71b4959a73961dd2896f2967c9f 100644 (file)
 
                {{* Tags and mentions *}}
                {{if $tags}}
-               <div id="photo-tags">{{$tags.1}}</div>
+               <div id="photo-tags">{{$tags.title}}
+               {{foreach $tags.tags as $t}}
+               <span class="category label btn-success sm">
+                       <span class="p-category">{{$t.name}}</span>
+                       {{if $t.removeurl}} (<a href="{{$t.removeurl}}">x</a>) {{/if}}
+               </span>
+               {{/foreach}}
+               </div>
                {{/if}}
 
-               {{if $tags.2}}
+               {{if $tags.removeanyurl}}
                <div id="tag-remove">
-                       <a href="{{$tags.2}}">{{$tags.3}}</a>
+                       <a href="{{$tags.removeanyurl}}">{{$tags.removetitle}}</a>
                </div>
                {{/if}}