]> git.mxchange.org Git - friendica.git/commitdiff
Delay unprepared posts
authorMichael <heluecht@pirati.ca>
Sun, 13 Dec 2020 12:47:49 +0000 (12:47 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 13 Dec 2020 12:47:49 +0000 (12:47 +0000)
include/api.php
src/Model/Item.php
src/Model/Post/Delayed.php
src/Protocol/ActivityPub/Transmitter.php
src/Protocol/Diaspora.php
src/Protocol/Feed.php
src/Protocol/OStatus.php
src/Worker/DelayedPublish.php

index dc5d6404877a20575356aa2691d824226123ec76..92d35c001ec1b1236e436fa761cfb8b76e73eed5 100644 (file)
@@ -67,7 +67,6 @@ use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
-require_once __DIR__ . '/../mod/share.php';
 require_once __DIR__ . '/../mod/item.php';
 require_once __DIR__ . '/../mod/wall_upload.php';
 
index c67399b9289011852c3795c20a0c51f916dcc3d5..dec3716d0169206637cddfb1ebe898caa4c8c8ae 100644 (file)
@@ -2910,8 +2910,8 @@ class Item
                $datarray['api_source'] = true;
 
                // We have to tell the hooks who we are - this really should be improved
-               $_SESSION["authenticated"] = true;
-               $_SESSION["uid"] = $contact['uid'];
+               $_SESSION['authenticated'] = true;
+               $_SESSION['uid'] = $contact['uid'];
 
                return (bool)$result;
        }
index bfab4062825063c3a32668bc41c51a3545180377..aa0270e640a77e30fea42b86cf0314a4a41dff81 100644 (file)
@@ -25,37 +25,57 @@ use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\Core\Worker;
 use Friendica\Database\Database;
+use Friendica\DI;
 use Friendica\Model\Item;
 use Friendica\Model\Tag;
+use Friendica\Util\DateTimeFormat;
 
 class Delayed
 {
        /**
         * Insert a new delayed post
         *
-        * @param string $delayed
-        * @param array $item
+        * @param string  $uri
+        * @param array   $item
         * @param integer $notify
-        * @param array $taglist
-        * @param array $attachments
+        * @param bool    $unprepared
+        * @param string  $delayed
+        * @param array   $taglist
+        * @param array   $attachments
         * @return bool insert success
         */ 
-       public static function add(string $delayed, array $item, int $notify = 0, array $taglist = [], array $attachments = [])
+       public static function add(string $uri, array $item, int $notify = 0, bool $unprepared = false, string $delayed = '', array $taglist = [], array $attachments = [])
        {
-               if (empty($item['uri']) || empty($item['uid']) || self::exists($item['uri'], $item['uid'])) {
+               if (empty($item['uid']) || self::exists($uri, $item['uid'])) {
+                       return false;
+               }
+
+               if (empty($delayed)) {
+                       $min_posting = DI::config()->get('system', 'minimum_posting_interval', 0);
+
+                       $last_publish = DI::pConfig()->get($item['uid'], 'system', 'last_publish', 0, true);
+                       $next_publish = max($last_publish + (60 * $min_posting), time());
+                       $delayed = date(DateTimeFormat::MYSQL, $next_publish);
+               } else {
+                       $next_publish = strtotime($delayed);
+               }
+
+               Logger::notice('Adding post for delayed publishing', ['uid' => $item['uid'], 'delayed' => $delayed, 'uri' => $uri]);
+
+               if (!Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'DelayedPublish', $item, $notify, $taglist, $attachments, $unprepared)) {
                        return false;
                }
 
-               Logger::notice('Adding post for delayed publishing', ['uid' => $item['uid'], 'delayed' => $delayed, 'uri' => $item['uri']]);
+               DI::pConfig()->set($item['uid'], 'system', 'last_publish', $next_publish);
 
-               Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'DelayedPublish', $item, $notify, $taglist, $attachments);
-               return DBA::insert('delayed-post', ['uri' => $item['uri'], 'uid' => $item['uid'], 'delayed' => $delayed], Database::INSERT_IGNORE);
+               return DBA::insert('delayed-post', ['uri' => $uri, 'uid' => $item['uid'], 'delayed' => $delayed], Database::INSERT_IGNORE);
        }
 
        /**
         * Delete a delayed post
         *
         * @param string $uri
+        * @param int    $uid
         *
         * @return bool delete success
         */
@@ -68,6 +88,7 @@ class Delayed
         * Check if an entry exists
         *
         * @param string $uri
+        * @param int    $uid
         *
         * @return bool "true" if an entry with that URI exists
         */
@@ -83,10 +104,30 @@ class Delayed
         * @param integer $notify
         * @param array $taglist
         * @param array $attachments
+        * @param bool  $unprepared
         * @return bool
         */
-       public static function publish(array $item, int $notify = 0, array $taglist = [], array $attachments = [])
+       public static function publish(array $item, int $notify = 0, array $taglist = [], array $attachments = [], bool $unprepared = false)
        {
+               if ($unprepared) {
+                       $_SESSION['authenticated'] = true;
+                       $_SESSION['uid'] = $item['uid'];
+
+                       $_REQUEST = $item;
+                       $_REQUEST['api_source'] = true;
+                       $_REQUEST['profile_uid'] = $item['uid'];
+                       $_REQUEST['title'] = $item['title'] ?? '';
+
+                       if (!empty($item['app'])) {
+                               $_REQUEST['source'] = $item['app'];
+                       }
+
+                       require_once 'mod/item.php';
+                       $id = item_post(DI::app());
+
+                       Logger::notice('Unprepared post stored', ['id' => $id, 'uid' => $item['uid'], 'extid' => $item['extid']]);
+                       return;
+               }
                $id = Item::insert($item, $notify);
 
                Logger::notice('Post stored', ['id' => $id, 'uid' => $item['uid'], 'cid' => $item['contact-id']]);
index cf0b0170d700c611038723f1b2e097c6a56a0aa2..29a3b0ada9d44371f38648d01a600b3c6e2edf0d 100644 (file)
@@ -51,9 +51,6 @@ use Friendica\Util\Map;
 use Friendica\Util\Network;
 use Friendica\Util\XML;
 
-require_once 'include/api.php';
-require_once 'mod/share.php';
-
 /**
  * ActivityPub Transmitter Protocol class
  *
index 54a8d1c1bafc8dc908e515074253df4ac298f419..5f28e092d5798ab751c701a1c412eeca50ae5cfa 100644 (file)
@@ -3382,7 +3382,6 @@ class Diaspora
                        }
 
                        if ($item['author-link'] != $item['owner-link']) {
-                               require_once 'mod/share.php';
                                $body = BBCode::getShareOpeningTag($item['author-name'], $item['author-link'], $item['author-avatar'],
                                        $item['plink'], $item['created']) . $body . '[/share]';
                        }
index a2e9daaa036ab31826aa4ac82991ec72e5cd173b..f674f7081512d252d19bbadfc9011745df91e838 100644 (file)
@@ -656,8 +656,7 @@ class Feed
                                }
                                $publish_at = date(DateTimeFormat::MYSQL, $publish_time);
 
-                               Post\Delayed::add($publish_at, $posting['item'], $posting['notify'], $posting['taglist'], $posting['attachments']);
-                               DI::pConfig()->set($item['uid'], 'system', 'last_publish', $next_publish);
+                               Post\Delayed::add($posting['item']['uri'], $posting['item'], $posting['notify'], false, $publish_at, $posting['taglist'], $posting['attachments']);
                        }
                }
 
index a6e0df4c33e355644cc6e99344f77a39a13fa43e..8315f511306f9810a900214a31babed1166c772a 100644 (file)
@@ -46,9 +46,6 @@ use Friendica\Util\Proxy as ProxyUtils;
 use Friendica\Util\Strings;
 use Friendica\Util\XML;
 
-require_once 'mod/share.php';
-require_once 'include/api.php';
-
 /**
  * This class contain functions for the OStatus protocol
  */
index db37ba306789cfa9ee986cf1b70405e368163703..2d08b25b005169b0a06fea71bd53ed8828019e03 100644 (file)
@@ -33,11 +33,12 @@ class DelayedPublish
          * @param integer $notify
          * @param array $taglist
          * @param array $attachments
+         * @param bool  $unprepared
          * @return void
          */
-       public static function execute(array $item, int $notify = 0, array $taglist = [], array $attachments = [])
+       public static function execute(array $item, int $notify = 0, array $taglist = [], array $attachments = [], bool $unprepared = false)
        {
-               $id = Post\Delayed::publish($item, $notify, $taglist, $attachments);
-               Logger::notice('Post published', ['id' => $id, 'uid' => $item['uid'], 'cid' => $item['contact-id'], 'notify' => $notify]);
+               $id = Post\Delayed::publish($item, $notify, $taglist, $attachments, $unprepared);
+               Logger::notice('Post published', ['id' => $id, 'uid' => $item['uid'], 'cid' => $item['contact-id'], 'notify' => $notify, 'unprepared' => $unprepared]);
        }
 }