diff --git a/src/Model/Post/Delayed.php b/src/Model/Post/Delayed.php index 0bae1a8e2e..dd26869d1c 100644 --- a/src/Model/Post/Delayed.php +++ b/src/Model/Post/Delayed.php @@ -44,7 +44,7 @@ class Delayed * @param array $taglist * @param array $attachments * @return int ID of the created delayed post entry - */ + */ public static function add(string $uri, array $item, int $notify = 0, bool $unprepared = false, string $delayed = '', array $taglist = [], array $attachments = []) { if (empty($item['uid']) || self::exists($uri, $item['uid'])) { @@ -98,6 +98,23 @@ class Delayed return DBA::delete('delayed-post', ['uri' => $uri, 'uid' => $uid]); } + /** + * Delete scheduled posts and the associated workerqueue entry + * + * @param integer $id + * @return void + */ + public static function deleteById(int $id) + { + $post = DBA::selectFirst('delayed-post', ['wid'], ['id' => $id]); + if (empty($post['wid'])) { + return; + } + + DBA::delete('delayed-post', ['id' => $id]); + DBA::delete('workerqueue', ['id' => $post['wid']]); + } + /** * Check if an entry exists * @@ -192,7 +209,7 @@ class Delayed if (self::exists($uri, $item['uid'])) { self::delete($uri, $item['uid']); } - + return $id; } $id = Item::insert($item, $notify); diff --git a/src/Module/Api/Mastodon/ScheduledStatuses.php b/src/Module/Api/Mastodon/ScheduledStatuses.php index d18e51d9d5..5b43f4515a 100644 --- a/src/Module/Api/Mastodon/ScheduledStatuses.php +++ b/src/Module/Api/Mastodon/ScheduledStatuses.php @@ -25,6 +25,7 @@ use Friendica\App\Router; use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Post; use Friendica\Module\BaseApi; /** @@ -49,15 +50,11 @@ class ScheduledStatuses extends BaseApi DI::mstdnError()->UnprocessableEntity(); } - $condtion = ['id' => $parameters['id'], 'uid' => $uid]; - $post = DBA::selectFirst('delayed-post', ['id'], $condtion); - if (empty($post['id'])) { + if (!DBA::exists('delayed-post', ['id' => $parameters['id'], 'uid' => $uid])) { DI::mstdnError()->RecordNotFound(); } - if (!DBA::delete('delayed-post', $condtion)) { - DI::mstdnError()->RecordNotFound(); - } + Post\Delayed::deleteById($parameters['id']); System::jsonExit([]); } diff --git a/src/Module/Profile/Schedule.php b/src/Module/Profile/Schedule.php index 9ea5e0c6be..ae76c57f1d 100644 --- a/src/Module/Profile/Schedule.php +++ b/src/Module/Profile/Schedule.php @@ -21,12 +21,34 @@ namespace Friendica\Module\Profile; +use Friendica\BaseModule; +use Friendica\Content\Text\BBCode; +use Friendica\Core\Renderer; +use Friendica\Database\DBA; use Friendica\DI; +use Friendica\Model\Post; use Friendica\Module\BaseProfile; use Friendica\Network\HTTPException; class Schedule extends BaseProfile { + public static function post(array $parameters = []) + { + if (!local_user()) { + throw new HTTPException\ForbiddenException(DI::l10n()->t('Permission denied.')); + } + + if (empty($_REQUEST['delete'])) { + throw new HTTPException\BadRequestException(); + } + + if (!DBA::exists('delayed-post', ['id' => $_REQUEST['delete'], 'uid' => local_user()])) { + throw new HTTPException\NotFoundException(); + } + + Post\Delayed::deleteById($_REQUEST['delete']); + } + public static function content(array $parameters = []) { if (!local_user()) { @@ -37,7 +59,33 @@ class Schedule extends BaseProfile $o = self::getTabsHTML($a, 'schedule', true, $a->user); - $o .= DI::l10n()->t('Currently here is no functionality here. Please use an app to have a look at your scheduled posts.'); + $schedule = []; + $delayed = DBA::select('delayed-post', [], ['uid' => local_user()]); + while ($row = DBA::fetch($delayed)) { + $parameter = Post\Delayed::getParametersForid($row['id']); + if (empty($parameter)) { + continue; + } + $schedule[] = [ + 'id' => $row['id'], + 'scheduled_at' => $row['delayed'], + 'content' => BBCode::toPlaintext($parameter['item']['body'], false) + ]; + } + DBA::close($delayed); + + $tpl = Renderer::getMarkupTemplate('profile/schedule.tpl'); + $o .= Renderer::replaceMacros($tpl, [ + '$form_security_token' => BaseModule::getFormSecurityToken("profile_schedule"), + '$baseurl' => DI::baseUrl()->get(true), + '$title' => DI::l10n()->t('Scheduled Posts'), + '$nickname' => $parameters['nickname'] ?? '', + '$scheduled_at' => DI::l10n()->t('Scheduled'), + '$content' => DI::l10n()->t('Content'), + '$delete' => DI::l10n()->t('Remove post'), + '$schedule' => $schedule, + ]); + return $o; } } diff --git a/static/routes.config.php b/static/routes.config.php index 825be5a945..d42d5cfbbf 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -33,7 +33,7 @@ use Friendica\Module; $profileRoutes = [ '' => [Module\Profile\Index::class, [R::GET]], '/profile' => [Module\Profile\Profile::class, [R::GET]], - '/schedule' => [Module\Profile\Schedule::class, [R::GET]], + '/schedule' => [Module\Profile\Schedule::class, [R::GET, R::POST]], '/contacts/common' => [Module\Profile\Common::class, [R::GET]], '/contacts[/{type}]' => [Module\Profile\Contacts::class, [R::GET]], '/status[/{category}[/{date1}[/{date2}]]]' => [Module\Profile\Status::class, [R::GET]], diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index 2fb3c01f40..5403cfb10c 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2021.09-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-02 12:15+0000\n" +"POT-Creation-Date: 2021-08-02 17:00+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -845,7 +845,7 @@ msgstr "" #: src/Module/Invite.php:127 src/Module/Notifications/Notification.php:47 #: src/Module/Notifications/Notification.php:76 #: src/Module/Profile/Common.php:56 src/Module/Profile/Contacts.php:57 -#: src/Module/Profile/Schedule.php:33 src/Module/Register.php:62 +#: src/Module/Profile/Schedule.php:38 src/Module/Register.php:62 #: src/Module/Register.php:75 src/Module/Register.php:193 #: src/Module/Register.php:232 src/Module/Search/Directory.php:38 #: src/Module/Settings/Delegation.php:42 src/Module/Settings/Delegation.php:70 @@ -7096,7 +7096,7 @@ msgstr "" msgid "Only You Can See This" msgstr "" -#: src/Module/BaseProfile.php:117 +#: src/Module/BaseProfile.php:117 src/Module/Profile/Schedule.php:68 msgid "Scheduled Posts" msgstr "" @@ -8779,10 +8779,16 @@ msgstr "" msgid "%s's comments" msgstr "" -#: src/Module/Profile/Schedule.php:40 -msgid "" -"Currently here is no functionality here. Please use an app to have a look at " -"your scheduled posts." +#: src/Module/Profile/Schedule.php:70 +msgid "Scheduled" +msgstr "" + +#: src/Module/Profile/Schedule.php:71 +msgid "Content" +msgstr "" + +#: src/Module/Profile/Schedule.php:72 +msgid "Remove post" msgstr "" #: src/Module/Register.php:69 diff --git a/view/templates/profile/schedule.tpl b/view/templates/profile/schedule.tpl new file mode 100644 index 0000000000..eb5d7ea824 --- /dev/null +++ b/view/templates/profile/schedule.tpl @@ -0,0 +1,25 @@ +
+

{{$title}}

+ + + + + + + + + {{foreach $schedule as $entry}} + + + + + + {{/foreach}} + +
{{$scheduled_at}}{{$content}}
{{$entry.scheduled_at}}{{$entry.content}} +
+ + +
+
+
diff --git a/view/theme/frio/templates/profile/schedule.tpl b/view/theme/frio/templates/profile/schedule.tpl new file mode 100644 index 0000000000..2a769307e4 --- /dev/null +++ b/view/theme/frio/templates/profile/schedule.tpl @@ -0,0 +1,28 @@ +
+ {{* include the title template for the settings title *}} + {{include file="section_title.tpl" title=$title}} + + + + + + + + + {{foreach $schedule as $row}} + + + + + + {{/foreach}} + +
{{$scheduled_at}}{{$content}}
{{$row.scheduled_at}}{{$row.content}} +
+ + +
+
+