Friendica Communications Platform
(please note that this is a clone of the repository at github, issues are handled there)
https://friendi.ca
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
<?php |
|
/** |
|
* @copyright Copyright (C) 2010-2021, 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\Item; |
|
|
|
use Friendica\BaseModule; |
|
use Friendica\Core\Logger; |
|
use Friendica\Core\Session; |
|
use Friendica\Core\System; |
|
use Friendica\Database\DBA; |
|
use Friendica\DI; |
|
use Friendica\Model\Item; |
|
use Friendica\Model\Post; |
|
use Friendica\Network\HTTPException; |
|
|
|
/** |
|
* Toggle starred items |
|
*/ |
|
class Star extends BaseModule |
|
{ |
|
public static function rawContent(array $parameters = []) |
|
{ |
|
$l10n = DI::l10n(); |
|
|
|
if (!Session::isAuthenticated()) { |
|
throw new HttpException\ForbiddenException($l10n->t('Access denied.')); |
|
} |
|
|
|
if (empty($parameters['id'])) { |
|
throw new HTTPException\BadRequestException(); |
|
} |
|
|
|
$itemId = intval($parameters['id']); |
|
|
|
|
|
$item = Post::selectFirstForUser(local_user(), ['uid', 'uri-id', 'starred'], ['uid' => [0, local_user()], 'id' => $itemId]); |
|
if (empty($item)) { |
|
throw new HTTPException\NotFoundException(); |
|
} |
|
|
|
if ($item['uid'] == 0) { |
|
$stored = Item::storeForUserByUriId($item['uri-id'], local_user()); |
|
if (!empty($stored)) { |
|
$item = Post::selectFirst(['starred'], ['id' => $stored]); |
|
if (!DBA::isResult($item)) { |
|
throw new HTTPException\NotFoundException(); |
|
} |
|
$itemId = $stored; |
|
} else { |
|
throw new HTTPException\NotFoundException(); |
|
} |
|
} |
|
|
|
$starred = !(bool)$item['starred']; |
|
|
|
Item::update(['starred' => $starred], ['id' => $itemId]); |
|
|
|
// See if we've been passed a return path to redirect to |
|
$return_path = $_REQUEST['return'] ?? ''; |
|
if (!empty($return_path)) { |
|
$rand = '_=' . time(); |
|
if (strpos($return_path, '?')) { |
|
$rand = "&$rand"; |
|
} else { |
|
$rand = "?$rand"; |
|
} |
|
|
|
DI::baseUrl()->redirect($return_path . $rand); |
|
} |
|
|
|
$return = [ |
|
'status' => 'ok', |
|
'item_id' => $itemId, |
|
'verb' => 'star', |
|
'state' => (int)$starred, |
|
]; |
|
|
|
System::jsonExit($return); |
|
} |
|
}
|
|
|