]> git.mxchange.org Git - friendica-addons.git/blobdiff - advancedcontentfilter/advancedcontentfilter.php
Adjust php-cs
[friendica-addons.git] / advancedcontentfilter / advancedcontentfilter.php
index 62b18d15a08ad65ad5d1b7941e27c4c0ecdedd0a..57c87ffd96c9e9fa8804075b84a5d04c41524e24 100644 (file)
@@ -43,7 +43,9 @@ use Friendica\Database\DBA;
 use Friendica\Database\DBStructure;
 use Friendica\DI;
 use Friendica\Model\Item;
+use Friendica\Model\Post;
 use Friendica\Model\Tag;
+use Friendica\Model\User;
 use Friendica\Module\Security\Login;
 use Friendica\Network\HTTPException;
 use Friendica\Util\DateTimeFormat;
@@ -60,18 +62,11 @@ function advancedcontentfilter_install(App $a)
        Hook::register('addon_settings'             , __FILE__, 'advancedcontentfilter_addon_settings');
 
        Hook::add('dbstructure_definition'          , __FILE__, 'advancedcontentfilter_dbstructure_definition');
-       DBStructure::update($a->getBasePath(), false, true);
+       DBStructure::performUpdate();
 
        Logger::log("installed advancedcontentfilter");
 }
 
-function advancedcontentfilter_uninstall()
-{
-       Hook::unregister('dbstructure_definition'     , __FILE__, 'advancedcontentfilter_dbstructure_definition');
-       Hook::unregister('prepare_body_content_filter', __FILE__, 'advancedcontentfilter_prepare_body_content_filter');
-       Hook::unregister('addon_settings'             , __FILE__, 'advancedcontentfilter_addon_settings');
-}
-
 /*
  * Hooks
  */
@@ -96,6 +91,26 @@ function advancedcontentfilter_dbstructure_definition(App $a, &$database)
        ];
 }
 
+function advancedcontentfilter_get_filter_fields(array $item)
+{
+       $vars = [];
+
+       // Convert the language JSON text into a filterable format
+       if (!empty($item['language']) && ($languages = json_decode($item['language'], true))) {
+               foreach ($languages as $key => $value) {
+                       $vars['language_' . strtolower($key)] = $value;
+               }
+       }
+
+       foreach ($item as $key => $value) {
+               $vars[str_replace('-', '_', $key)] = $value;
+       }
+
+       ksort($vars);
+
+       return $vars;
+}
+
 function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data)
 {
        static $expressionLanguage;
@@ -108,10 +123,7 @@ function advancedcontentfilter_prepare_body_content_filter(App $a, &$hook_data)
                return;
        }
 
-       $vars = [];
-       foreach ($hook_data['item'] as $key => $value) {
-               $vars[str_replace('-', '_', $key)] = $value;
-       }
+       $vars = advancedcontentfilter_get_filter_fields($hook_data['item']);
 
        $rules = DI::cache()->get('rules_' . local_user());
        if (!isset($rules)) {
@@ -170,7 +182,7 @@ function advancedcontentfilter_module() {}
 
 function advancedcontentfilter_init(App $a)
 {
-       if ($a->argc > 1 && $a->argv[1] == 'api') {
+       if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'api') {
                $slim = new \Slim\App();
 
                require __DIR__ . '/src/middlewares.php';
@@ -185,11 +197,13 @@ function advancedcontentfilter_init(App $a)
 function advancedcontentfilter_content(App $a)
 {
        if (!local_user()) {
-               return Login::form('/' . implode('/', $a->argv));
+               return Login::form('/' . implode('/', DI::args()->getArgv()));
        }
 
-       if ($a->argc > 1 && $a->argv[1] == 'help') {
-               $lang = $a->user['language'];
+       if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'help') {
+               $user = User::getById(local_user());
+
+               $lang = $user['language'];
 
                $default_dir = 'addon/advancedcontentfilter/doc/';
                $help_file = 'advancedcontentfilter.md';
@@ -268,6 +282,7 @@ function advancedcontentfilter_build_fields($data)
                        'event_created', 'event_edited', 'event_start', 'event_finish', 'event_summary',
                        'event_desc', 'event_location', 'event_type', 'event_nofinish', 'event_adjust', 'event_ignore',
                        'children', 'pagedrop', 'tags', 'hashtags', 'mentions',
+                       'attachments',
                ];
 
                $expressionLanguage = new ExpressionLanguage\ExpressionLanguage();
@@ -346,6 +361,8 @@ function advancedcontentfilter_post_rules(ServerRequestInterface $request)
 
        $rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => DBA::lastInsertId()]);
 
+       DI::cache()->delete('rules_' . local_user());
+
        return json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]);
 }
 
@@ -375,6 +392,8 @@ function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, Res
                throw new HTTPException\ServiceUnavailableException(DBA::errorMessage());
        }
 
+       DI::cache()->delete('rules_' . local_user());
+
        return json_encode(['message' => DI::l10n()->t('Rule successfully updated')]);
 }
 
@@ -396,6 +415,8 @@ function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request,
                throw new HTTPException\ServiceUnavailableException(DBA::errorMessage());
        }
 
+       DI::cache()->delete('rules_' . local_user());
+
        return json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]);
 }
 
@@ -411,22 +432,23 @@ function advancedcontentfilter_get_variables_guid(ServerRequestInterface $reques
 
        $condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], local_user()];
        $params = ['order' => ['uid' => true]];
-       $item = Item::selectFirstForUser(local_user(), [], $condition, $params);
+       $item = Post::selectFirstForUser(local_user(), [], $condition, $params);
 
        if (!DBA::isResult($item)) {
                throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown post with guid: %s', $args['guid']));
        }
 
-       $tags = Tag::populateTagsFromItem($item);
+       $tags = Tag::populateFromItem($item);
 
        $item['tags'] = $tags['tags'];
        $item['hashtags'] = $tags['hashtags'];
        $item['mentions'] = $tags['mentions'];
 
-       $return = [];
-       foreach ($item as $key => $value) {
-               $return[str_replace('-', '_', $key)] = $value;
-       }
+       $attachments = Post\Media::splitAttachments($item['uri-id'], $item['guid'] ?? '');
+
+       $item['attachments'] = $attachments;
+
+       $return = advancedcontentfilter_get_filter_fields($item);
 
        return json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]);
 }