]> git.mxchange.org Git - friendica.git/commitdiff
new event APIs
authorpankraz <pankraz@ma-nic.de>
Fri, 22 Jul 2022 17:46:18 +0000 (19:46 +0200)
committerHypolite Petovan <hypolite@mrpetovan.com>
Sun, 14 Aug 2022 03:28:19 +0000 (23:28 -0400)
doc/API-Friendica.md
src/Module/Api/Friendica/Events/Create.php [new file with mode: 0644]
src/Module/Api/Friendica/Events/Delete.php [new file with mode: 0644]
static/routes.config.php

index 726accf62aef8ca3380cdc120b4ea4bd0bdbe815..a80884baeb45752d3c56bc5c78f9aee9c635c2d6 100644 (file)
@@ -24,6 +24,28 @@ Returns a list of [Event](help/API-Entities#Event) entities for the current logg
 - `since_id`: (optional) minimum event id for pagination
 - `count`: maximum number of items returned, default 20
 
+### POST api/friendica/event_create
+
+Create a new event for the current logged in user.
+
+#### Parameters
+
+- `id` : (optional) id of event, event will be amended if supplied
+- `name` : name of the event (required)
+- `startTime` : start of the event (ISO), required
+- `endTime` : (optional) end of the event, event is open end, if not supplied
+- `desc` : (optional) description of the event
+- `place` : (optional) location of the event
+- `publish` : (optional) create message for event
+
+### POST api/friendica/event_delete
+
+Delete event from calendar (not the message)
+
+#### Parameters
+
+- `id` : id of event to be deleted
+
 ### GET api/externalprofile/show
 
 Returns a [Contact](help/API-Entities#Contact) entity for the provided profile URL.
diff --git a/src/Module/Api/Friendica/Events/Create.php b/src/Module/Api/Friendica/Events/Create.php
new file mode 100644 (file)
index 0000000..8a1ebbb
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @copyright Copyright (C) 2010-2022, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Module\Api\Friendica\Events;
+
+use Friendica\Core\Protocol;
+use Friendica\Core\Worker;
+use Friendica\Database\DBA;
+use Friendica\DI;
+use Friendica\Model\Event;
+use Friendica\Model\Conversation;
+use Friendica\Model\Item;
+use Friendica\Module\BaseApi;
+use Friendica\Network\HTTPException;
+use Friendica\Util\DateTimeFormat;
+use Friendica\Worker\Delivery;
+
+/**
+ * API endpoint: /api/friendica/event_create
+ */
+class Create extends BaseApi
+{
+       protected function post(array $request = [])
+       {
+               BaseApi::checkAllowedScope(BaseApi::SCOPE_WRITE);
+               $uid = BaseApi::getCurrentUserID();
+
+               // params
+               $request = $this->getRequest([
+                       'id'        => 0, //if provided, event will be amended
+                       'name'      => '', //summary of the event
+                       'desc'      => '', //description in BBCode
+                       'startTime' => '', //starttime, required
+                       'endTime'   => '', //endtime, required if nofinish false
+                       'place'     => '', //location of the event
+                       'publish'   => 0,  //publish message
+                       'allow_cid' => '', //array of allowed person, if access restricted
+                       'allow_gid' => '', //array of allowed groups, if access restricted
+                       'deny_cid'  => '', //array of denied person, if access restricted
+                       'deny_gid'  => '', //array of denied groups, if access restricted
+               ], $request);
+
+               // error if no name specified
+               if (empty($request['name'])) {
+                       throw new HTTPException\BadRequestException('event name not specified');
+               }
+
+               // error startDate is not specified
+               if (empty($request['startTime'])) {
+                       throw new HTTPException\BadRequestException('startDate not specified');
+               }
+
+               // nofinish if endTime is not specified
+               if (empty($request['endTime'])) {
+                       $finish   = DBA::NULL_DATETIME;
+                       $nofinish = true;
+               } else {
+                       $finish   = DateTimeFormat::convert($request['endTime'], 'UTC', DI::app()->getTimeZone());
+                       $nofinish = false;
+               }
+
+               $start = DateTimeFormat::convert($request['startTime'], 'UTC', DI::app()->getTimeZone());
+
+               // create event
+               $event = [];
+
+               $event['id']       = $request['id'];
+               $event['uid']      = $uid;
+               $event['type']     = 'event';
+               $event['summary']  = $request['name'];
+               $event['desc']     = $request['desc'];
+               $event['location'] = $request['place'];
+               $event['start']    = $start;
+               $event['finish']   = $finish;
+               $event['nofinish'] = $nofinish;
+
+               $event['allow_cid'] = $request['allow_cid'];
+               $event['allow_gid'] = $request['allow_gid'];
+               $event['deny_cid']  = $request['deny_cid'];
+               $event['deny_gid']  = $request['deny_gid'];
+               $event['publish']   = $request['publish'];
+
+               $event_id = Event::store($event);
+
+               if (!empty($request['publish'])) {
+                       $item = ['network' => Protocol::DFRN, 'protocol' => Conversation::PARCEL_DIRECT, 'direction' => Conversation::PUSH];
+                       $item = Event::getItemArrayForId($event_id, $item);
+                       if (Item::insert($item)) {
+                               Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$item['uri-id'], $uid);
+                       }
+               }
+
+               $result = ['success' => true, 'event_id' => $event_id, 'event' => $event];
+
+               $this->response->exit('event_create', ['$result' => $result], $this->parameters['extension'] ?? null);
+       }
+}
diff --git a/src/Module/Api/Friendica/Events/Delete.php b/src/Module/Api/Friendica/Events/Delete.php
new file mode 100644 (file)
index 0000000..cf23b91
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+/**
+ * @copyright Copyright (C) 2010-2022, the Friendica project
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace Friendica\Module\Api\Friendica\Events;
+
+use Friendica\Database\DBA;
+use Friendica\Model\Event;
+use Friendica\Module\BaseApi;
+use Friendica\Network\HTTPException;
+
+/**
+ * API endpoint: /api/friendica/event_delete
+ */
+
+
+class Delete extends BaseApi
+{
+       protected function post(array $request = [])
+       {
+               self::checkAllowedScope(self::SCOPE_WRITE);
+               $uid = self::getCurrentUserID();
+
+               $request = $this->getRequest([
+                       'id' => 0
+               ], $request);
+
+               // params
+
+               // error if no id specified
+               if ($request['id'] == 0) {
+                       throw new HTTPException\BadRequestException('id not specified');
+               }
+
+               // error message if specified id is not in database
+               if (!DBA::exists('event', ['uid' => $uid, 'id' => $request['id']])) {
+                       throw new HTTPException\BadRequestException('id not available');
+               }
+
+               // delete event
+               $eventid = $request['id'];
+               Event::delete($eventid);
+
+               $success = ['id' => $eventid, 'status' => 'deleted'];
+               $this->response->exit('event_delete', ['$result' => $success], $this->parameters['extension'] ?? null);
+       }
+}
index 65beac70b2208287cfd5ddb6ffb9c8a0a3909d13..111a989dfbdc47afc9101245056045424e1461dd 100644 (file)
@@ -82,6 +82,8 @@ $apiRoutes = [
                '/direct_messages_setseen[.{extension:json|xml|rss|atom}]' => [Module\Api\Friendica\DirectMessages\Setseen::class, [        R::POST]],
                '/direct_messages_search[.{extension:json|xml|rss|atom}]'  => [Module\Api\Friendica\DirectMessages\Search ::class, [R::GET         ]],
                '/events[.{extension:json|xml|rss|atom}]'                  => [Module\Api\Friendica\Events\Index::class,           [R::GET         ]],
+                '/event_create[.{extension:json|xml|rss|atom}]'            => [Module\Api\Friendica\Events\Create::class,          [        R::POST]],
+                '/event_delete[.{extension:json|xml|rss|atom}]'            => [Module\Api\Friendica\Events\Delete::class,          [        R::POST]],
                '/group_show[.{extension:json|xml|rss|atom}]'              => [Module\Api\Friendica\Group\Show::class,             [R::GET         ]],
                '/group_create[.{extension:json|xml|rss|atom}]'            => [Module\Api\Friendica\Group\Create::class,           [        R::POST]],
                '/group_delete[.{extension:json|xml|rss|atom}]'            => [Module\Api\Friendica\Group\Delete::class,           [        R::POST]],