Merge pull request #10911 from nupplaphil/feat/depository_fsuggest
Move FSuggest to new paradigm
This commit is contained in:
commit
53402738b5
|
@ -1,163 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Friendica;
|
|
||||||
|
|
||||||
use Exception;
|
|
||||||
use Friendica\Capabilities\ICanCreateFromTableRow;
|
|
||||||
use Friendica\Database\Database;
|
|
||||||
use Friendica\Database\DBA;
|
|
||||||
use Friendica\Network\HTTPException\NotFoundException;
|
|
||||||
use Psr\Log\LoggerInterface;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Depositories are meant to store and retrieve Entities from the database.
|
|
||||||
*
|
|
||||||
* The reason why there are methods prefixed with an underscore is because PHP doesn't support generic polymorphism
|
|
||||||
* which means we can't directly overload base methods and make parameters more strict (from a parent class to a child
|
|
||||||
* class for example)
|
|
||||||
*
|
|
||||||
* Similarly, we can't make an overloaded method return type more strict until we only support PHP version 7.4 but this
|
|
||||||
* is less pressing.
|
|
||||||
*/
|
|
||||||
abstract class BaseDepository
|
|
||||||
{
|
|
||||||
const LIMIT = 30;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string This should be set to the main database table name the depository is using
|
|
||||||
*/
|
|
||||||
protected static $table_name;
|
|
||||||
|
|
||||||
/** @var Database */
|
|
||||||
protected $db;
|
|
||||||
|
|
||||||
/** @var LoggerInterface */
|
|
||||||
protected $logger;
|
|
||||||
|
|
||||||
/** @var ICanCreateFromTableRow */
|
|
||||||
protected $factory;
|
|
||||||
|
|
||||||
public function __construct(Database $database, LoggerInterface $logger, ICanCreateFromTableRow $factory)
|
|
||||||
{
|
|
||||||
$this->db = $database;
|
|
||||||
$this->logger = $logger;
|
|
||||||
$this->factory = $factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the collection according to the condition. Retrieves a limited subset of entities depending on the
|
|
||||||
* boundaries and the limit. The total count of rows matching the condition is stored in the collection.
|
|
||||||
*
|
|
||||||
* Depends on the corresponding table featuring a numerical auto incremented column called `id`.
|
|
||||||
*
|
|
||||||
* max_id and min_id are susceptible to the query order:
|
|
||||||
* - min_id alone only reliably works with ASC order
|
|
||||||
* - max_id alone only reliably works with DESC order
|
|
||||||
* If the wrong order is detected in either case, we reverse the query order and the entity list order after the query
|
|
||||||
*
|
|
||||||
* Chainable.
|
|
||||||
*
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @param int|null $min_id Retrieve models with an id no fewer than this, as close to it as possible
|
|
||||||
* @param int|null $max_id Retrieve models with an id no greater than this, as close to it as possible
|
|
||||||
* @param int $limit
|
|
||||||
* @return BaseCollection
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
protected function _selectByBoundaries(
|
|
||||||
array $condition = [],
|
|
||||||
array $params = [],
|
|
||||||
int $min_id = null,
|
|
||||||
int $max_id = null,
|
|
||||||
int $limit = self::LIMIT
|
|
||||||
): BaseCollection {
|
|
||||||
$totalCount = $this->count($condition);
|
|
||||||
|
|
||||||
$boundCondition = $condition;
|
|
||||||
|
|
||||||
$reverseOrder = false;
|
|
||||||
|
|
||||||
if (isset($min_id)) {
|
|
||||||
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` > ?', $min_id]);
|
|
||||||
if (!isset($max_id) && isset($params['order']['id']) && ($params['order']['id'] === true || $params['order']['id'] === 'DESC')) {
|
|
||||||
$reverseOrder = true;
|
|
||||||
|
|
||||||
$params['order']['id'] = 'ASC';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($max_id) && $max_id > 0) {
|
|
||||||
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` < ?', $max_id]);
|
|
||||||
if (!isset($min_id) && (!isset($params['order']['id']) || $params['order']['id'] === false || $params['order']['id'] === 'ASC')) {
|
|
||||||
$reverseOrder = true;
|
|
||||||
|
|
||||||
$params['order']['id'] = 'DESC';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$params['limit'] = $limit;
|
|
||||||
|
|
||||||
$Entities = $this->_select($boundCondition, $params);
|
|
||||||
if ($reverseOrder) {
|
|
||||||
$Entities->reverse();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BaseCollection($Entities->getArrayCopy(), $totalCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @return BaseCollection
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
protected function _select(array $condition, array $params = []): BaseCollection
|
|
||||||
{
|
|
||||||
$rows = $this->db->selectToArray(static::$table_name, [], $condition, $params);
|
|
||||||
|
|
||||||
$Entities = new BaseCollection();
|
|
||||||
foreach ($rows as $fields) {
|
|
||||||
$Entities[] = $this->factory->createFromTableRow($fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $Entities;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @return BaseEntity
|
|
||||||
* @throws NotFoundException
|
|
||||||
*/
|
|
||||||
protected function _selectOne(array $condition, array $params = []): BaseEntity
|
|
||||||
{
|
|
||||||
$fields = $this->db->selectFirst(static::$table_name, [], $condition, $params);
|
|
||||||
if (!$this->db->isResult($fields)) {
|
|
||||||
throw new NotFoundException();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->factory->createFromTableRow($fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @return int
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public function count(array $condition, array $params = []): int
|
|
||||||
{
|
|
||||||
return $this->db->count(static::$table_name, $condition, $params);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @return bool
|
|
||||||
* @throws Exception
|
|
||||||
*/
|
|
||||||
public function exists(array $condition): bool
|
|
||||||
{
|
|
||||||
return $this->db->exists(static::$table_name, $condition);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,231 +21,162 @@
|
||||||
|
|
||||||
namespace Friendica;
|
namespace Friendica;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
use Friendica\Capabilities\ICanCreateFromTableRow;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException\NotFoundException;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repositories are Factories linked to one or more database tables.
|
* Repositories are meant to store and retrieve Entities from the database.
|
||||||
*
|
*
|
||||||
* @see BaseModel
|
* The reason why there are methods prefixed with an underscore is because PHP doesn't support generic polymorphism
|
||||||
* @see BaseCollection
|
* which means we can't directly overload base methods and make parameters more strict (from a parent class to a child
|
||||||
|
* class for example)
|
||||||
|
*
|
||||||
|
* Similarly, we can't make an overloaded method return type more strict until we only support PHP version 7.4 but this
|
||||||
|
* is less pressing.
|
||||||
*/
|
*/
|
||||||
abstract class BaseRepository extends BaseFactory
|
abstract class BaseRepository
|
||||||
{
|
{
|
||||||
const LIMIT = 30;
|
const LIMIT = 30;
|
||||||
|
|
||||||
/** @var Database */
|
/**
|
||||||
protected $dba;
|
* @var string This should be set to the main database table name the depository is using
|
||||||
|
*/
|
||||||
/** @var string */
|
|
||||||
protected static $table_name;
|
protected static $table_name;
|
||||||
|
|
||||||
/** @var BaseModel */
|
/** @var Database */
|
||||||
protected static $model_class;
|
protected $db;
|
||||||
|
|
||||||
/** @var BaseCollection */
|
/** @var LoggerInterface */
|
||||||
protected static $collection_class;
|
protected $logger;
|
||||||
|
|
||||||
public function __construct(Database $dba, LoggerInterface $logger)
|
/** @var ICanCreateFromTableRow */
|
||||||
|
protected $factory;
|
||||||
|
|
||||||
|
public function __construct(Database $database, LoggerInterface $logger, ICanCreateFromTableRow $factory)
|
||||||
{
|
{
|
||||||
parent::__construct($logger);
|
$this->db = $database;
|
||||||
|
$this->logger = $logger;
|
||||||
$this->dba = $dba;
|
$this->factory = $factory;
|
||||||
$this->logger = $logger;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches a single model record. The condition array is expected to contain a unique index (primary or otherwise).
|
* Populates the collection according to the condition. Retrieves a limited subset of entities depending on the
|
||||||
|
* boundaries and the limit. The total count of rows matching the condition is stored in the collection.
|
||||||
*
|
*
|
||||||
* Chainable.
|
* Depends on the corresponding table featuring a numerical auto incremented column called `id`.
|
||||||
*
|
|
||||||
* @param array $condition
|
|
||||||
* @return BaseModel
|
|
||||||
* @throws HTTPException\NotFoundException
|
|
||||||
*/
|
|
||||||
public function selectFirst(array $condition)
|
|
||||||
{
|
|
||||||
$data = $this->dba->selectFirst(static::$table_name, [], $condition);
|
|
||||||
|
|
||||||
if (!$data) {
|
|
||||||
throw new HTTPException\NotFoundException(static::class . ' record not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->create($data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates a Collection according to the condition.
|
|
||||||
*
|
|
||||||
* Chainable.
|
|
||||||
*
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @return BaseCollection
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function select(array $condition = [], array $params = [])
|
|
||||||
{
|
|
||||||
$models = $this->selectModels($condition, $params);
|
|
||||||
|
|
||||||
return new static::$collection_class($models);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Populates the collection according to the condition. Retrieves a limited subset of models depending on the boundaries
|
|
||||||
* and the limit. The total count of rows matching the condition is stored in the collection.
|
|
||||||
*
|
*
|
||||||
* max_id and min_id are susceptible to the query order:
|
* max_id and min_id are susceptible to the query order:
|
||||||
* - min_id alone only reliably works with ASC order
|
* - min_id alone only reliably works with ASC order
|
||||||
* - max_id alone only reliably works with DESC order
|
* - max_id alone only reliably works with DESC order
|
||||||
* If the wrong order is detected in either case, we inverse the query order and we reverse the model array after the query
|
* If the wrong order is detected in either case, we reverse the query order and the entity list order after the query
|
||||||
*
|
*
|
||||||
* Chainable.
|
* Chainable.
|
||||||
*
|
*
|
||||||
* @param array $condition
|
* @param array $condition
|
||||||
* @param array $params
|
* @param array $params
|
||||||
* @param int? $min_id Retrieve models with an id no fewer than this, as close to it as possible
|
* @param int|null $min_id Retrieve models with an id no fewer than this, as close to it as possible
|
||||||
* @param int? $max_id Retrieve models with an id no greater than this, as close to it as possible
|
* @param int|null $max_id Retrieve models with an id no greater than this, as close to it as possible
|
||||||
* @param int $limit
|
* @param int $limit
|
||||||
* @return BaseCollection
|
* @return BaseCollection
|
||||||
* @throws \Exception
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public function selectByBoundaries(array $condition = [], array $params = [], int $min_id = null, int $max_id = null, int $limit = self::LIMIT)
|
protected function _selectByBoundaries(
|
||||||
{
|
array $condition = [],
|
||||||
$totalCount = DBA::count(static::$table_name, $condition);
|
array $params = [],
|
||||||
|
int $min_id = null,
|
||||||
|
int $max_id = null,
|
||||||
|
int $limit = self::LIMIT
|
||||||
|
): BaseCollection {
|
||||||
|
$totalCount = $this->count($condition);
|
||||||
|
|
||||||
$boundCondition = $condition;
|
$boundCondition = $condition;
|
||||||
|
|
||||||
$reverseModels = false;
|
$reverseOrder = false;
|
||||||
|
|
||||||
if (isset($min_id)) {
|
if (isset($min_id)) {
|
||||||
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` > ?', $min_id]);
|
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` > ?', $min_id]);
|
||||||
if (!isset($max_id) && isset($params['order']['id']) && ($params['order']['id'] === true || $params['order']['id'] === 'DESC')) {
|
if (!isset($max_id) && isset($params['order']['id']) && ($params['order']['id'] === true || $params['order']['id'] === 'DESC')) {
|
||||||
$reverseModels = true;
|
$reverseOrder = true;
|
||||||
|
|
||||||
$params['order']['id'] = 'ASC';
|
$params['order']['id'] = 'ASC';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($max_id)) {
|
if (isset($max_id) && $max_id > 0) {
|
||||||
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` < ?', $max_id]);
|
$boundCondition = DBA::mergeConditions($boundCondition, ['`id` < ?', $max_id]);
|
||||||
if (!isset($min_id) && (!isset($params['order']['id']) || $params['order']['id'] === false || $params['order']['id'] === 'ASC')) {
|
if (!isset($min_id) && (!isset($params['order']['id']) || $params['order']['id'] === false || $params['order']['id'] === 'ASC')) {
|
||||||
$reverseModels = true;
|
$reverseOrder = true;
|
||||||
|
|
||||||
$params['order']['id'] = 'DESC';
|
$params['order']['id'] = 'DESC';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$params['limit'] = $limit;
|
$params['limit'] = $limit;
|
||||||
|
|
||||||
$models = $this->selectModels($boundCondition, $params);
|
$Entities = $this->_select($boundCondition, $params);
|
||||||
|
if ($reverseOrder) {
|
||||||
if ($reverseModels) {
|
$Entities->reverse();
|
||||||
$models = array_reverse($models);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new static::$collection_class($models, $totalCount);
|
return new BaseCollection($Entities->getArrayCopy(), $totalCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method updates the database row from the model.
|
* @param array $condition
|
||||||
*
|
* @param array $params
|
||||||
* @param BaseModel $model
|
* @return BaseCollection
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected function _select(array $condition, array $params = []): BaseCollection
|
||||||
|
{
|
||||||
|
$rows = $this->db->selectToArray(static::$table_name, [], $condition, $params);
|
||||||
|
|
||||||
|
$Entities = new BaseCollection();
|
||||||
|
foreach ($rows as $fields) {
|
||||||
|
$Entities[] = $this->factory->createFromTableRow($fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $Entities;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $condition
|
||||||
|
* @param array $params
|
||||||
|
* @return BaseEntity
|
||||||
|
* @throws NotFoundException
|
||||||
|
*/
|
||||||
|
protected function _selectOne(array $condition, array $params = []): BaseEntity
|
||||||
|
{
|
||||||
|
$fields = $this->db->selectFirst(static::$table_name, [], $condition, $params);
|
||||||
|
if (!$this->db->isResult($fields)) {
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->factory->createFromTableRow($fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $condition
|
||||||
|
* @param array $params
|
||||||
|
* @return int
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function count(array $condition, array $params = []): int
|
||||||
|
{
|
||||||
|
return $this->db->count(static::$table_name, $condition, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $condition
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws \Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public function update(BaseModel $model)
|
public function exists(array $condition): bool
|
||||||
{
|
{
|
||||||
if ($this->dba->update(static::$table_name, $model->toArray(), ['id' => $model->id], $model->getOriginalData())) {
|
return $this->db->exists(static::$table_name, $condition);
|
||||||
$model->resetOriginalData();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method creates a new database row and returns a model if it was successful.
|
|
||||||
*
|
|
||||||
* @param array $fields
|
|
||||||
* @return BaseModel|bool
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function insert(array $fields)
|
|
||||||
{
|
|
||||||
$return = $this->dba->insert(static::$table_name, $fields);
|
|
||||||
|
|
||||||
if (!$return) {
|
|
||||||
throw new HTTPException\InternalServerErrorException('Unable to insert new row in table "' . static::$table_name . '"');
|
|
||||||
}
|
|
||||||
|
|
||||||
$fields['id'] = $this->dba->lastInsertId();
|
|
||||||
$return = $this->create($fields);
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Deletes the model record from the database.
|
|
||||||
*
|
|
||||||
* @param BaseModel $model
|
|
||||||
* @return bool
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function delete(BaseModel &$model)
|
|
||||||
{
|
|
||||||
if ($success = $this->dba->delete(static::$table_name, ['id' => $model->id])) {
|
|
||||||
$model = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base instantiation method, can be overriden to add specific dependencies
|
|
||||||
*
|
|
||||||
* @param array $data
|
|
||||||
* @return BaseModel
|
|
||||||
*/
|
|
||||||
protected function create(array $data)
|
|
||||||
{
|
|
||||||
return new static::$model_class($this->dba, $this->logger, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition Query condition
|
|
||||||
* @param array $params Additional query parameters
|
|
||||||
* @return BaseModel[]
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
protected function selectModels(array $condition, array $params = [])
|
|
||||||
{
|
|
||||||
$result = $this->dba->select(static::$table_name, [], $condition, $params);
|
|
||||||
|
|
||||||
/** @var BaseModel $prototype */
|
|
||||||
$prototype = null;
|
|
||||||
|
|
||||||
$models = [];
|
|
||||||
|
|
||||||
while ($record = $this->dba->fetch($result)) {
|
|
||||||
if ($prototype === null) {
|
|
||||||
$prototype = $this->create($record);
|
|
||||||
$models[] = $prototype;
|
|
||||||
} else {
|
|
||||||
$models[] = static::$model_class::createFromPrototype($prototype, $record);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->dba->close($result);
|
|
||||||
|
|
||||||
return $models;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param BaseCollection $collection
|
|
||||||
*/
|
|
||||||
public function saveCollection(BaseCollection $collection)
|
|
||||||
{
|
|
||||||
$collection->map([$this, 'update']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,11 +19,10 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Collection;
|
namespace Friendica\Contact\FriendSuggest\Collection;
|
||||||
|
|
||||||
use Friendica\BaseCollection;
|
use Friendica\BaseCollection;
|
||||||
|
|
||||||
class FSuggests extends BaseCollection
|
class FriendSuggests extends BaseCollection
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
<?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\Contact\FriendSuggest\Entity;
|
||||||
|
|
||||||
|
use Friendica\BaseEntity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Model for interacting with a friend suggestion
|
||||||
|
*
|
||||||
|
* @property-read int $uid
|
||||||
|
* @property-read int $cid
|
||||||
|
* @property-read string $name
|
||||||
|
* @property-read string $url
|
||||||
|
* @property-read string $request
|
||||||
|
* @property-read string $photo
|
||||||
|
* @property-read string $note
|
||||||
|
* @property-read \DateTime created
|
||||||
|
* @property-read int|null $id
|
||||||
|
*/
|
||||||
|
class FriendSuggest extends BaseEntity
|
||||||
|
{
|
||||||
|
/** @var int */
|
||||||
|
protected $uid;
|
||||||
|
/** @var int */
|
||||||
|
protected $cid;
|
||||||
|
/** @var string */
|
||||||
|
protected $name;
|
||||||
|
/** @var string */
|
||||||
|
protected $url;
|
||||||
|
/** @var string */
|
||||||
|
protected $request;
|
||||||
|
/** @var string */
|
||||||
|
protected $photo;
|
||||||
|
/** @var string */
|
||||||
|
protected $note;
|
||||||
|
/** @var \DateTime */
|
||||||
|
protected $created;
|
||||||
|
/** @var int|null */
|
||||||
|
protected $id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $uid
|
||||||
|
* @param int $cid
|
||||||
|
* @param string $name
|
||||||
|
* @param string $url
|
||||||
|
* @param string $request
|
||||||
|
* @param string $photo
|
||||||
|
* @param string $note
|
||||||
|
* @param \DateTime $created
|
||||||
|
* @param int|null $id
|
||||||
|
*/
|
||||||
|
public function __construct(int $uid, int $cid, string $name, string $url, string $request, string $photo, string $note, \DateTime $created, ?int $id = null)
|
||||||
|
{
|
||||||
|
$this->uid = $uid;
|
||||||
|
$this->cid = $cid;
|
||||||
|
$this->name = $name;
|
||||||
|
$this->url = $url;
|
||||||
|
$this->request = $request;
|
||||||
|
$this->photo = $photo;
|
||||||
|
$this->note = $note;
|
||||||
|
$this->created = $created;
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,23 +19,12 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Model;
|
namespace Friendica\Contact\FriendSuggest\Exception;
|
||||||
|
|
||||||
use Friendica\BaseModel;
|
class FriendSuggestNotFoundException extends \OutOfBoundsException
|
||||||
|
|
||||||
/**
|
|
||||||
* Model for interacting with a friend suggestion
|
|
||||||
*
|
|
||||||
* @property int uid
|
|
||||||
* @property int cid
|
|
||||||
* @property string name
|
|
||||||
* @property string url
|
|
||||||
* @property string request
|
|
||||||
* @property string photo
|
|
||||||
* @property string note
|
|
||||||
* @property string created
|
|
||||||
*/
|
|
||||||
class FSuggest extends BaseModel
|
|
||||||
{
|
{
|
||||||
|
public function __construct($message = '', \Throwable $previous = null)
|
||||||
|
{
|
||||||
|
parent::__construct($message, 404, $previous);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -19,18 +19,12 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Collection;
|
namespace Friendica\Contact\FriendSuggest\Exception;
|
||||||
|
|
||||||
use Friendica\BaseCollection;
|
class FriendSuggestPersistenceException extends \RuntimeException
|
||||||
use Friendica\Model;
|
|
||||||
|
|
||||||
class Notifications extends BaseCollection
|
|
||||||
{
|
{
|
||||||
/**
|
public function __construct($message = '', \Throwable $previous = null)
|
||||||
* @return Model\Notification
|
|
||||||
*/
|
|
||||||
public function current()
|
|
||||||
{
|
{
|
||||||
return parent::current();
|
parent::__construct($message, 500, $previous);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
<?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\Contact\FriendSuggest\Factory;
|
||||||
|
|
||||||
|
use Friendica\BaseFactory;
|
||||||
|
use Friendica\Capabilities\ICanCreateFromTableRow;
|
||||||
|
use Friendica\Contact\FriendSuggest\Entity;
|
||||||
|
|
||||||
|
class FriendSuggest extends BaseFactory implements ICanCreateFromTableRow
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function createFromTableRow(array $row): Entity\FriendSuggest
|
||||||
|
{
|
||||||
|
return new Entity\FriendSuggest(
|
||||||
|
$row['uid'] ?? 0,
|
||||||
|
$row['cid'] ?? 0,
|
||||||
|
$row['name'] ?? '',
|
||||||
|
$row['url'] ?? '',
|
||||||
|
$row['request'] ?? '',
|
||||||
|
$row['photo'] ?? '',
|
||||||
|
$row['note'] ?? '',
|
||||||
|
new \DateTime($row['created'] ?? 'now', new \DateTimeZone('UTC')),
|
||||||
|
$row['id'] ?? null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createNew(
|
||||||
|
int $uid,
|
||||||
|
int $cid,
|
||||||
|
string $name = '',
|
||||||
|
string $url = '',
|
||||||
|
string $request = '',
|
||||||
|
string $photo = '',
|
||||||
|
string $note = ''
|
||||||
|
): Entity\FriendSuggest {
|
||||||
|
return $this->createFromTableRow([
|
||||||
|
'uid' => $uid,
|
||||||
|
'cid' => $cid,
|
||||||
|
'name' => $name,
|
||||||
|
'url' => $url,
|
||||||
|
'request' => $request,
|
||||||
|
'photo' => $photo,
|
||||||
|
'note' => $note,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createEmpty(int $id): Entity\FriendSuggest
|
||||||
|
{
|
||||||
|
return $this->createFromTableRow(['id' => $id]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,159 @@
|
||||||
|
<?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\Contact\FriendSuggest\Repository;
|
||||||
|
|
||||||
|
use Friendica\BaseRepository;
|
||||||
|
use Friendica\Contact\FriendSuggest\Collection;
|
||||||
|
use Friendica\Contact\FriendSuggest\Entity;
|
||||||
|
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
|
||||||
|
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestPersistenceException;
|
||||||
|
use Friendica\Contact\FriendSuggest\Factory;
|
||||||
|
use Friendica\Database\Database;
|
||||||
|
use Friendica\Network\HTTPException\NotFoundException;
|
||||||
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
class FriendSuggest extends BaseRepository
|
||||||
|
{
|
||||||
|
/** @var Factory\FriendSuggest */
|
||||||
|
protected $factory;
|
||||||
|
|
||||||
|
protected static $table_name = 'fsuggest';
|
||||||
|
|
||||||
|
public function __construct(Database $database, LoggerInterface $logger, Factory\FriendSuggest $factory)
|
||||||
|
{
|
||||||
|
parent::__construct($database, $logger, $factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function convertToTableRow(Entity\FriendSuggest $fsuggest): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'uid' => $fsuggest->uid,
|
||||||
|
'cid' => $fsuggest->cid,
|
||||||
|
'name' => $fsuggest->name,
|
||||||
|
'url' => $fsuggest->url,
|
||||||
|
'request' => $fsuggest->request,
|
||||||
|
'photo' => $fsuggest->photo,
|
||||||
|
'note' => $fsuggest->note,
|
||||||
|
'created' => $fsuggest->created->format(DateTimeFormat::MYSQL),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $condition
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @return Entity\FriendSuggest
|
||||||
|
*
|
||||||
|
* @throws NotFoundException The underlying exception if there's no FriendSuggest with the given conditions
|
||||||
|
*/
|
||||||
|
private function selectOne(array $condition, array $params = []): Entity\FriendSuggest
|
||||||
|
{
|
||||||
|
return parent::_selectOne($condition, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $condition
|
||||||
|
* @param array $params
|
||||||
|
*
|
||||||
|
* @return Collection\FriendSuggests
|
||||||
|
*
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
private function select(array $condition, array $params = []): Collection\FriendSuggests
|
||||||
|
{
|
||||||
|
return new Collection\FriendSuggests(parent::_select($condition, $params)->getArrayCopy());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @return Entity\FriendSuggest
|
||||||
|
*
|
||||||
|
* @throws FriendSuggestNotFoundException in case there's no suggestion for this id
|
||||||
|
*/
|
||||||
|
public function selectOneById(int $id): Entity\FriendSuggest
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return $this->selectOne(['id' => $id]);
|
||||||
|
} catch (NotFoundException $e) {
|
||||||
|
throw new FriendSuggestNotFoundException(sprintf('No FriendSuggest found for id %d', $id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $cid
|
||||||
|
*
|
||||||
|
* @return Collection\FriendSuggests
|
||||||
|
*
|
||||||
|
* @throws FriendSuggestPersistenceException In case the underlying storage cannot select the suggestion
|
||||||
|
*/
|
||||||
|
public function selectForContact(int $cid): Collection\FriendSuggests
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
return $this->select(['cid' => $cid]);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
throw new FriendSuggestPersistenceException(sprintf('Cannot select FriendSuggestion for contact %d', $cid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Entity\FriendSuggest $fsuggest
|
||||||
|
*
|
||||||
|
* @return Entity\FriendSuggest
|
||||||
|
*
|
||||||
|
* @throws FriendSuggestNotFoundException in case the underlying storage cannot save the suggestion
|
||||||
|
*/
|
||||||
|
public function save(Entity\FriendSuggest $fsuggest): Entity\FriendSuggest
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$fields = $this->convertToTableRow($fsuggest);
|
||||||
|
|
||||||
|
if ($fsuggest->id) {
|
||||||
|
$this->db->update(self::$table_name, $fields, ['id' => $fsuggest->id]);
|
||||||
|
return $this->selectOneById($fsuggest->id);
|
||||||
|
} else {
|
||||||
|
$this->db->insert(self::$table_name, $fields);
|
||||||
|
return $this->selectOneById($this->db->lastInsertId());
|
||||||
|
}
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
throw new FriendSuggestNotFoundException(sprintf('Cannot insert/update the FriendSuggestion %d for user %d', $fsuggest->id, $fsuggest->uid), $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Collection\FriendSuggests $fsuggests
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*
|
||||||
|
* @throws FriendSuggestNotFoundException in case the underlying storage cannot delete the suggestion
|
||||||
|
*/
|
||||||
|
public function delete(Collection\FriendSuggests $fsuggests): bool
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
$ids = $fsuggests->column('id');
|
||||||
|
return $this->db->delete(self::$table_name, ['id' => $ids]);
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
throw new FriendSuggestNotFoundException('Cannot delete the FriendSuggestions', $exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Contact\Introduction\Collection;
|
namespace Friendica\Contact\Introduction\Collection;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Contact\Introduction\Exception;
|
namespace Friendica\Contact\Introduction\Exception;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Contact\Introduction\Exception;
|
namespace Friendica\Contact\Introduction\Exception;
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Contact\Introduction\Depository;
|
namespace Friendica\Contact\Introduction\Repository;
|
||||||
|
|
||||||
use Friendica\BaseDepository;
|
use Friendica\BaseRepository;
|
||||||
use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException;
|
use Friendica\Contact\Introduction\Exception\IntroductionNotFoundException;
|
||||||
use Friendica\Contact\Introduction\Exception\IntroductionPersistenceException;
|
use Friendica\Contact\Introduction\Exception\IntroductionPersistenceException;
|
||||||
use Friendica\Contact\Introduction\Collection;
|
use Friendica\Contact\Introduction\Collection;
|
||||||
|
@ -32,7 +32,7 @@ use Friendica\Network\HTTPException\NotFoundException;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class Introduction extends BaseDepository
|
class Introduction extends BaseRepository
|
||||||
{
|
{
|
||||||
/** @var Factory\Introduction */
|
/** @var Factory\Introduction */
|
||||||
protected $factory;
|
protected $factory;
|
|
@ -27,7 +27,7 @@ use Friendica\DI;
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
use Friendica\Model\Profile;
|
use Friendica\Model\Profile;
|
||||||
use Friendica\Object\Image;
|
use Friendica\Object\Image;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet;
|
||||||
use Friendica\Util\Strings;
|
use Friendica\Util\Strings;
|
||||||
use Friendica\Worker\Delivery;
|
use Friendica\Worker\Delivery;
|
||||||
|
|
||||||
|
|
32
src/DI.php
32
src/DI.php
|
@ -427,19 +427,27 @@ abstract class DI
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Repository\FSuggest;
|
* @return Contact\FriendSuggest\Repository\FriendSuggest;
|
||||||
*/
|
*/
|
||||||
public static function fsuggest()
|
public static function fsuggest()
|
||||||
{
|
{
|
||||||
return self::$dice->create(Repository\FSuggest::class);
|
return self::$dice->create(Contact\FriendSuggest\Repository\FriendSuggest::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Contact\Introduction\Depository\Introduction
|
* @return Contact\FriendSuggest\Factory\FriendSuggest;
|
||||||
|
*/
|
||||||
|
public static function fsuggestFactory()
|
||||||
|
{
|
||||||
|
return self::$dice->create(Contact\FriendSuggest\Factory\FriendSuggest::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Contact\Introduction\Repository\Introduction
|
||||||
*/
|
*/
|
||||||
public static function intro()
|
public static function intro()
|
||||||
{
|
{
|
||||||
return self::$dice->create(Contact\Introduction\Depository\Introduction::class);
|
return self::$dice->create(Contact\Introduction\Repository\Introduction::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -450,9 +458,9 @@ abstract class DI
|
||||||
return self::$dice->create(Contact\Introduction\Factory\Introduction::class);
|
return self::$dice->create(Contact\Introduction\Factory\Introduction::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function permissionSet(): Security\PermissionSet\Depository\PermissionSet
|
public static function permissionSet(): Security\PermissionSet\Repository\PermissionSet
|
||||||
{
|
{
|
||||||
return self::$dice->create(Security\PermissionSet\Depository\PermissionSet::class);
|
return self::$dice->create(Security\PermissionSet\Repository\PermissionSet::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function permissionSetFactory(): Security\PermissionSet\Factory\PermissionSet
|
public static function permissionSetFactory(): Security\PermissionSet\Factory\PermissionSet
|
||||||
|
@ -460,9 +468,9 @@ abstract class DI
|
||||||
return self::$dice->create(Security\PermissionSet\Factory\PermissionSet::class);
|
return self::$dice->create(Security\PermissionSet\Factory\PermissionSet::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function profileField(): Profile\ProfileField\Depository\ProfileField
|
public static function profileField(): Profile\ProfileField\Repository\ProfileField
|
||||||
{
|
{
|
||||||
return self::$dice->create(Profile\ProfileField\Depository\ProfileField::class);
|
return self::$dice->create(Profile\ProfileField\Repository\ProfileField::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function profileFieldFactory(): Profile\ProfileField\Factory\ProfileField
|
public static function profileFieldFactory(): Profile\ProfileField\Factory\ProfileField
|
||||||
|
@ -470,9 +478,9 @@ abstract class DI
|
||||||
return self::$dice->create(Profile\ProfileField\Factory\ProfileField::class);
|
return self::$dice->create(Profile\ProfileField\Factory\ProfileField::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function notification(): Navigation\Notifications\Depository\Notification
|
public static function notification(): Navigation\Notifications\Repository\Notification
|
||||||
{
|
{
|
||||||
return self::$dice->create(Navigation\Notifications\Depository\Notification::class);
|
return self::$dice->create(Navigation\Notifications\Repository\Notification::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function notificationFactory(): Navigation\Notifications\Factory\Notification
|
public static function notificationFactory(): Navigation\Notifications\Factory\Notification
|
||||||
|
@ -480,9 +488,9 @@ abstract class DI
|
||||||
return self::$dice->create(Navigation\Notifications\Factory\Notification::class);
|
return self::$dice->create(Navigation\Notifications\Factory\Notification::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function notify(): Navigation\Notifications\Depository\Notify
|
public static function notify(): Navigation\Notifications\Repository\Notify
|
||||||
{
|
{
|
||||||
return self::$dice->create(Navigation\Notifications\Depository\Notify::class);
|
return self::$dice->create(Navigation\Notifications\Repository\Notify::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function notifyFactory(): Navigation\Notifications\Factory\Notify
|
public static function notifyFactory(): Navigation\Notifications\Factory\Notify
|
||||||
|
|
|
@ -27,7 +27,7 @@ use Friendica\Collection\Api\Mastodon\Fields;
|
||||||
use Friendica\Model\APContact;
|
use Friendica\Model\APContact;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Profile\ProfileField\Depository\ProfileField as ProfileFieldDepository;
|
use Friendica\Profile\ProfileField\Repository\ProfileField as ProfileFieldRepository;
|
||||||
use ImagickException;
|
use ImagickException;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
|
@ -35,17 +35,17 @@ class Account extends BaseFactory
|
||||||
{
|
{
|
||||||
/** @var BaseURL */
|
/** @var BaseURL */
|
||||||
private $baseUrl;
|
private $baseUrl;
|
||||||
/** @var ProfileFieldDepository */
|
/** @var ProfileFieldRepository */
|
||||||
private $profileFieldDepo;
|
private $profileFieldRepo;
|
||||||
/** @var Field */
|
/** @var Field */
|
||||||
private $mstdnFieldFactory;
|
private $mstdnFieldFactory;
|
||||||
|
|
||||||
public function __construct(LoggerInterface $logger, BaseURL $baseURL, ProfileFieldDepository $profileFieldDepo, Field $mstdnFieldFactory)
|
public function __construct(LoggerInterface $logger, BaseURL $baseURL, ProfileFieldRepository $profileFieldRepo, Field $mstdnFieldFactory)
|
||||||
{
|
{
|
||||||
parent::__construct($logger);
|
parent::__construct($logger);
|
||||||
|
|
||||||
$this->baseUrl = $baseURL;
|
$this->baseUrl = $baseURL;
|
||||||
$this->profileFieldDepo = $profileFieldDepo;
|
$this->profileFieldRepo = $profileFieldRepo;
|
||||||
$this->mstdnFieldFactory = $mstdnFieldFactory;
|
$this->mstdnFieldFactory = $mstdnFieldFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ class Account extends BaseFactory
|
||||||
|
|
||||||
$self_contact = Contact::selectFirst(['uid'], ['nurl' => $publicContact['nurl'], 'self' => true]);
|
$self_contact = Contact::selectFirst(['uid'], ['nurl' => $publicContact['nurl'], 'self' => true]);
|
||||||
if (!empty($self_contact['uid'])) {
|
if (!empty($self_contact['uid'])) {
|
||||||
$profileFields = $this->profileFieldDepo->selectPublicFieldsByUserId($self_contact['uid']);
|
$profileFields = $this->profileFieldRepo->selectPublicFieldsByUserId($self_contact['uid']);
|
||||||
$fields = $this->mstdnFieldFactory->createFromProfileFields($profileFields);
|
$fields = $this->mstdnFieldFactory->createFromProfileFields($profileFields);
|
||||||
} else {
|
} else {
|
||||||
$fields = new Fields();
|
$fields = new Fields();
|
||||||
|
@ -94,7 +94,7 @@ class Account extends BaseFactory
|
||||||
{
|
{
|
||||||
$publicContact = Contact::selectFirst([], ['uid' => $userId, 'self' => true]);
|
$publicContact = Contact::selectFirst([], ['uid' => $userId, 'self' => true]);
|
||||||
|
|
||||||
$profileFields = $this->profileFieldDepo->selectPublicFieldsByUserId($userId);
|
$profileFields = $this->profileFieldRepo->selectPublicFieldsByUserId($userId);
|
||||||
$fields = $this->mstdnFieldFactory->createFromProfileFields($profileFields);
|
$fields = $this->mstdnFieldFactory->createFromProfileFields($profileFields);
|
||||||
|
|
||||||
$apContact = APContact::getByURL($publicContact['url'], false);
|
$apContact = APContact::getByURL($publicContact['url'], false);
|
||||||
|
|
|
@ -28,7 +28,7 @@ use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Profile;
|
use Friendica\Model\Profile;
|
||||||
use Friendica\Module\BaseApi;
|
use Friendica\Module\BaseApi;
|
||||||
use Friendica\Network\HTTPException;
|
use Friendica\Network\HTTPException;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* API endpoint: /api/friendica/profile/show
|
* API endpoint: /api/friendica/profile/show
|
||||||
|
|
|
@ -68,16 +68,15 @@ class FriendSuggest extends BaseModule
|
||||||
|
|
||||||
$note = Strings::escapeHtml(trim($_POST['note'] ?? ''));
|
$note = Strings::escapeHtml(trim($_POST['note'] ?? ''));
|
||||||
|
|
||||||
$suggest = DI::fsuggest()->insert([
|
$suggest = DI::fsuggest()->save(DI::fsuggestFactory()->createNew(
|
||||||
'uid' => local_user(),
|
local_user(),
|
||||||
'cid' => $cid,
|
$cid,
|
||||||
'name' => $contact['name'],
|
$contact['name'],
|
||||||
'url' => $contact['url'],
|
$contact['url'],
|
||||||
'request' => $contact['request'],
|
$contact['request'],
|
||||||
'photo' => $contact['avatar'],
|
$contact['avatar'],
|
||||||
'note' => $note,
|
$note
|
||||||
'created' => DateTimeFormat::utcNow()
|
));
|
||||||
]);
|
|
||||||
|
|
||||||
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::SUGGESTION, $suggest->id);
|
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::SUGGESTION, $suggest->id);
|
||||||
|
|
||||||
|
@ -94,7 +93,7 @@ class FriendSuggest extends BaseModule
|
||||||
DI::baseUrl()->redirect();
|
DI::baseUrl()->redirect();
|
||||||
}
|
}
|
||||||
|
|
||||||
$contacts = ContactModel::selectToArray(['id', 'name'], [
|
$suggestableContacts = ContactModel::selectToArray(['id', 'name'], [
|
||||||
'`uid` = ?
|
'`uid` = ?
|
||||||
AND `id` != ?
|
AND `id` != ?
|
||||||
AND `network` = ?
|
AND `network` = ?
|
||||||
|
@ -111,8 +110,8 @@ class FriendSuggest extends BaseModule
|
||||||
|
|
||||||
$formattedContacts = [];
|
$formattedContacts = [];
|
||||||
|
|
||||||
foreach ($contacts as $contact) {
|
foreach ($suggestableContacts as $suggestableContact) {
|
||||||
$formattedContacts[$contact['id']] = $contact['name'];
|
$formattedContacts[$suggestableContact['id']] = $suggestableContact['name'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$tpl = Renderer::getMarkupTemplate('fsuggest.tpl');
|
$tpl = Renderer::getMarkupTemplate('fsuggest.tpl');
|
||||||
|
|
|
@ -32,7 +32,7 @@ use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
use Friendica\Module\BaseNotifications;
|
use Friendica\Module\BaseNotifications;
|
||||||
use Friendica\Navigation\Notifications\Collection\FormattedNotifications;
|
use Friendica\Navigation\Notifications\Collection\FormattedNotifications;
|
||||||
use Friendica\Navigation\Notifications\Depository;
|
use Friendica\Navigation\Notifications\Repository;
|
||||||
use Friendica\Navigation\Notifications\ValueObject;
|
use Friendica\Navigation\Notifications\ValueObject;
|
||||||
use Friendica\Network\HTTPException\InternalServerErrorException;
|
use Friendica\Network\HTTPException\InternalServerErrorException;
|
||||||
use Friendica\Protocol\Activity;
|
use Friendica\Protocol\Activity;
|
||||||
|
@ -54,14 +54,14 @@ class FormattedNotification extends BaseFactory
|
||||||
{
|
{
|
||||||
/** @var Database */
|
/** @var Database */
|
||||||
private $dba;
|
private $dba;
|
||||||
/** @var Depository\Notify */
|
/** @var Repository\Notify */
|
||||||
private $notify;
|
private $notify;
|
||||||
/** @var BaseURL */
|
/** @var BaseURL */
|
||||||
private $baseUrl;
|
private $baseUrl;
|
||||||
/** @var L10n */
|
/** @var L10n */
|
||||||
private $l10n;
|
private $l10n;
|
||||||
|
|
||||||
public function __construct(LoggerInterface $logger, Database $dba, Depository\Notify $notify, BaseURL $baseUrl, L10n $l10n)
|
public function __construct(LoggerInterface $logger, Database $dba, Repository\Notify $notify, BaseURL $baseUrl, L10n $l10n)
|
||||||
{
|
{
|
||||||
parent::__construct($logger);
|
parent::__construct($logger);
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Navigation\Notifications\Depository;
|
namespace Friendica\Navigation\Notifications\Repository;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Friendica\BaseCollection;
|
use Friendica\BaseCollection;
|
||||||
use Friendica\BaseDepository;
|
use Friendica\BaseRepository;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Model\Verb;
|
use Friendica\Model\Verb;
|
||||||
|
@ -15,7 +15,7 @@ use Friendica\Network\HTTPException\NotFoundException;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class Notification extends BaseDepository
|
class Notification extends BaseRepository
|
||||||
{
|
{
|
||||||
/** @var Factory\Notification */
|
/** @var Factory\Notification */
|
||||||
protected $factory;
|
protected $factory;
|
|
@ -1,9 +1,9 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Navigation\Notifications\Depository;
|
namespace Friendica\Navigation\Notifications\Repository;
|
||||||
|
|
||||||
use Friendica\App\BaseURL;
|
use Friendica\App\BaseURL;
|
||||||
use Friendica\BaseDepository;
|
use Friendica\BaseRepository;
|
||||||
use Friendica\Content\Text\Plaintext;
|
use Friendica\Content\Text\Plaintext;
|
||||||
use Friendica\Core\Config\IConfig;
|
use Friendica\Core\Config\IConfig;
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
|
@ -22,7 +22,7 @@ use Friendica\Util\DateTimeFormat;
|
||||||
use Friendica\Util\Emailer;
|
use Friendica\Util\Emailer;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class Notify extends BaseDepository
|
class Notify extends BaseRepository
|
||||||
{
|
{
|
||||||
/** @var Factory\Notify */
|
/** @var Factory\Notify */
|
||||||
protected $factory;
|
protected $factory;
|
|
@ -19,9 +19,9 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Profile\ProfileField\Depository;
|
namespace Friendica\Profile\ProfileField\Repository;
|
||||||
|
|
||||||
use Friendica\BaseDepository;
|
use Friendica\BaseRepository;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Profile\ProfileField\Exception\ProfileFieldNotFoundException;
|
use Friendica\Profile\ProfileField\Exception\ProfileFieldNotFoundException;
|
||||||
use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
|
use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
|
||||||
|
@ -29,11 +29,11 @@ use Friendica\Profile\ProfileField\Exception\UnexpectedPermissionSetException;
|
||||||
use Friendica\Profile\ProfileField\Factory;
|
use Friendica\Profile\ProfileField\Factory;
|
||||||
use Friendica\Profile\ProfileField\Entity;
|
use Friendica\Profile\ProfileField\Entity;
|
||||||
use Friendica\Profile\ProfileField\Collection;
|
use Friendica\Profile\ProfileField\Collection;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class ProfileField extends BaseDepository
|
class ProfileField extends BaseRepository
|
||||||
{
|
{
|
||||||
/** @var Factory\ProfileField */
|
/** @var Factory\ProfileField */
|
||||||
protected $factory;
|
protected $factory;
|
||||||
|
@ -42,14 +42,14 @@ class ProfileField extends BaseDepository
|
||||||
|
|
||||||
protected static $view_name = 'profile_field-view';
|
protected static $view_name = 'profile_field-view';
|
||||||
|
|
||||||
/** @var PermissionSetDepository */
|
/** @var PermissionSetRepository */
|
||||||
protected $permissionSetDepository;
|
protected $permissionSetRepository;
|
||||||
|
|
||||||
public function __construct(Database $database, LoggerInterface $logger, Factory\ProfileField $factory, PermissionSetDepository $permissionSetDepository)
|
public function __construct(Database $database, LoggerInterface $logger, Factory\ProfileField $factory, PermissionSetRepository $permissionSetRepository)
|
||||||
{
|
{
|
||||||
parent::__construct($database, $logger, $factory);
|
parent::__construct($database, $logger, $factory);
|
||||||
|
|
||||||
$this->permissionSetDepository = $permissionSetDepository;
|
$this->permissionSetRepository = $permissionSetRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -124,7 +124,7 @@ class ProfileField extends BaseDepository
|
||||||
public function selectPublicFieldsByUserId(int $uid): Collection\ProfileFields
|
public function selectPublicFieldsByUserId(int $uid): Collection\ProfileFields
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$publicPermissionSet = $this->permissionSetDepository->selectPublicForUser($uid);
|
$publicPermissionSet = $this->permissionSetRepository->selectPublicForUser($uid);
|
||||||
|
|
||||||
return $this->select([
|
return $this->select([
|
||||||
'uid' => $uid,
|
'uid' => $uid,
|
||||||
|
@ -162,12 +162,12 @@ class ProfileField extends BaseDepository
|
||||||
*/
|
*/
|
||||||
public function selectByContactId(int $cid, int $uid): Collection\ProfileFields
|
public function selectByContactId(int $cid, int $uid): Collection\ProfileFields
|
||||||
{
|
{
|
||||||
$permissionSets = $this->permissionSetDepository->selectByContactId($cid, $uid);
|
$permissionSets = $this->permissionSetRepository->selectByContactId($cid, $uid);
|
||||||
|
|
||||||
$permissionSetIds = $permissionSets->column('id');
|
$permissionSetIds = $permissionSets->column('id');
|
||||||
|
|
||||||
// Includes public custom fields
|
// Includes public custom fields
|
||||||
$permissionSetIds[] = $this->permissionSetDepository->selectPublicForUser($uid)->id;
|
$permissionSetIds[] = $this->permissionSetRepository->selectPublicForUser($uid)->id;
|
||||||
|
|
||||||
return $this->select(
|
return $this->select(
|
||||||
['uid' => $uid, 'psid' => $permissionSetIds],
|
['uid' => $uid, 'psid' => $permissionSetIds],
|
|
@ -1782,7 +1782,7 @@ class Transmitter
|
||||||
{
|
{
|
||||||
$owner = User::getOwnerDataById($uid);
|
$owner = User::getOwnerDataById($uid);
|
||||||
|
|
||||||
$suggestion = DI::fsuggest()->getById($suggestion_id);
|
$suggestion = DI::fsuggest()->selectOneById($suggestion_id);
|
||||||
|
|
||||||
$data = ['@context' => ActivityPub::CONTEXT,
|
$data = ['@context' => ActivityPub::CONTEXT,
|
||||||
'id' => DI::baseUrl() . '/activity/' . System::createGUID(),
|
'id' => DI::baseUrl() . '/activity/' . System::createGUID(),
|
||||||
|
|
|
@ -1,93 +0,0 @@
|
||||||
<?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\Repository;
|
|
||||||
|
|
||||||
use Friendica\BaseRepository;
|
|
||||||
use Friendica\Collection;
|
|
||||||
use Friendica\Model;
|
|
||||||
|
|
||||||
class FSuggest extends BaseRepository
|
|
||||||
{
|
|
||||||
protected static $table_name = 'fsuggest';
|
|
||||||
|
|
||||||
protected static $model_class = Model\FSuggest::class;
|
|
||||||
|
|
||||||
protected static $collection_class = Collection\FSuggests::class;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $data
|
|
||||||
* @return Model\FSuggest
|
|
||||||
*/
|
|
||||||
protected function create(array $data)
|
|
||||||
{
|
|
||||||
return new Model\FSuggest($this->dba, $this->logger, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Friend Suggest based on it's ID
|
|
||||||
*
|
|
||||||
* @param int $id The id of the fsuggest
|
|
||||||
*
|
|
||||||
* @return Model\FSuggest
|
|
||||||
*
|
|
||||||
* @throws \Friendica\Network\HTTPException\NotFoundException
|
|
||||||
*/
|
|
||||||
public function getById(int $id)
|
|
||||||
{
|
|
||||||
return $this->selectFirst(['id' => $id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @return Model\FSuggest
|
|
||||||
* @throws \Friendica\Network\HTTPException\NotFoundException
|
|
||||||
*/
|
|
||||||
public function selectFirst(array $condition)
|
|
||||||
{
|
|
||||||
return parent::selectFirst($condition);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @return Collection\FSuggests
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function select(array $condition = [], array $params = [])
|
|
||||||
{
|
|
||||||
return parent::select($condition, $params);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $condition
|
|
||||||
* @param array $params
|
|
||||||
* @param int|null $min_id
|
|
||||||
* @param int|null $max_id
|
|
||||||
* @param int $limit
|
|
||||||
* @return Collection\FSuggests
|
|
||||||
* @throws \Exception
|
|
||||||
*/
|
|
||||||
public function selectByBoundaries(array $condition = [], array $params = [], int $min_id = null, int $max_id = null, int $limit = self::LIMIT)
|
|
||||||
{
|
|
||||||
return parent::selectByBoundaries($condition, $params, $min_id, $max_id, $limit);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\PermissionSet\Collection;
|
namespace Friendica\Security\PermissionSet\Collection;
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,28 @@
|
||||||
<?php
|
<?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\Security\PermissionSet\Entity;
|
namespace Friendica\Security\PermissionSet\Entity;
|
||||||
|
|
||||||
use Friendica\BaseEntity;
|
use Friendica\BaseEntity;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @property-read int|null $id
|
* @property-read int|null $id
|
||||||
|
@ -55,7 +74,7 @@ class PermissionSet extends BaseEntity
|
||||||
*/
|
*/
|
||||||
public function isPublic(): bool
|
public function isPublic(): bool
|
||||||
{
|
{
|
||||||
return (($this->id === PermissionSetDepository::PUBLIC) ||
|
return (($this->id === PermissionSetRepository::PUBLIC) ||
|
||||||
(is_null($this->id) &&
|
(is_null($this->id) &&
|
||||||
empty($this->allow_cid) &&
|
empty($this->allow_cid) &&
|
||||||
empty($this->allow_gid) &&
|
empty($this->allow_gid) &&
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\PermissionSet\Factory;
|
namespace Friendica\Security\PermissionSet\Factory;
|
||||||
|
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Friendica\Security\PermissionSet\Depository;
|
namespace Friendica\Security\PermissionSet\Repository;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Friendica\BaseDepository;
|
use Friendica\BaseRepository;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Group;
|
use Friendica\Model\Group;
|
||||||
|
@ -33,7 +33,7 @@ use Friendica\Security\PermissionSet\Entity;
|
||||||
use Friendica\Util\ACLFormatter;
|
use Friendica\Util\ACLFormatter;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
|
|
||||||
class PermissionSet extends BaseDepository
|
class PermissionSet extends BaseRepository
|
||||||
{
|
{
|
||||||
/** @var int Virtual permission set id for public permission */
|
/** @var int Virtual permission set id for public permission */
|
||||||
const PUBLIC = 0;
|
const PUBLIC = 0;
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\TwoFactor\Collection;
|
namespace Friendica\Security\TwoFactor\Collection;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\TwoFactor\Factory;
|
namespace Friendica\Security\TwoFactor\Factory;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\TwoFactor\Model;
|
namespace Friendica\Security\TwoFactor\Model;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,23 @@
|
||||||
<?php
|
<?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\Security\TwoFactor\Repository;
|
namespace Friendica\Security\TwoFactor\Repository;
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ class RemoveContent
|
||||||
DBA::delete('contact-relation', ['relation-cid' => $id]);
|
DBA::delete('contact-relation', ['relation-cid' => $id]);
|
||||||
DBA::delete('contact-relation', ['cid' => $id]);
|
DBA::delete('contact-relation', ['cid' => $id]);
|
||||||
DBA::delete('event', ['cid' => $id]);
|
DBA::delete('event', ['cid' => $id]);
|
||||||
DBA::delete('fsuggest', ['cid' => $id]);
|
DI::fsuggest()->delete(DI::fsuggest()->selectForContact($id));
|
||||||
DBA::delete('post-tag', ['cid' => $id]);
|
DBA::delete('post-tag', ['cid' => $id]);
|
||||||
DBA::delete('user-contact', ['cid' => $id]);
|
DBA::delete('user-contact', ['cid' => $id]);
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
namespace Friendica\Worker;
|
namespace Friendica\Worker;
|
||||||
|
|
||||||
|
use Friendica\Contact\FriendSuggest\Collection\FriendSuggests;
|
||||||
|
use Friendica\Contact\FriendSuggest\Exception\FriendSuggestNotFoundException;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
|
@ -64,8 +66,10 @@ class Delivery
|
||||||
}
|
}
|
||||||
$uid = $target_item['uid'];
|
$uid = $target_item['uid'];
|
||||||
} elseif ($cmd == self::SUGGESTION) {
|
} elseif ($cmd == self::SUGGESTION) {
|
||||||
$target_item = DBA::selectFirst('fsuggest', [], ['id' => $post_uriid]);
|
try {
|
||||||
if (!DBA::isResult($target_item)) {
|
$target_item = DI::fsuggest()->selectOneById($post_uriid)->toArray();
|
||||||
|
} catch (FriendSuggestNotFoundException $e) {
|
||||||
|
DI::logger()->info('Cannot find FriendSuggestion', ['id' => $post_uriid]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$uid = $target_item['uid'];
|
$uid = $target_item['uid'];
|
||||||
|
@ -209,7 +213,7 @@ class Delivery
|
||||||
// Also transmit via Diaspora if this is a direct answer to a Diaspora comment.
|
// Also transmit via Diaspora if this is a direct answer to a Diaspora comment.
|
||||||
// This is done since the uri wouldn't match (Diaspora doesn't transmit it)
|
// This is done since the uri wouldn't match (Diaspora doesn't transmit it)
|
||||||
// Also transmit relayed posts from Diaspora contacts via Diaspora.
|
// Also transmit relayed posts from Diaspora contacts via Diaspora.
|
||||||
if (($contact['network'] != Protocol::DIASPORA) && in_array(Protocol::DIASPORA, [$parent['network'] ?? '', $thr_parent['network'] ?? '', $target_item['network']])) {
|
if (($contact['network'] != Protocol::DIASPORA) && in_array(Protocol::DIASPORA, [$parent['network'] ?? '', $thr_parent['network'] ?? '', $target_item['network']] ?? '')) {
|
||||||
Logger::info('Enforcing the Diaspora protocol', ['id' => $contact['id'], 'network' => $contact['network'], 'parent' => $parent['network'], 'thread-parent' => $thr_parent['network'], 'post' => $target_item['network']]);
|
Logger::info('Enforcing the Diaspora protocol', ['id' => $contact['id'], 'network' => $contact['network'], 'parent' => $parent['network'], 'thread-parent' => $thr_parent['network'], 'post' => $target_item['network']]);
|
||||||
$contact['network'] = Protocol::DIASPORA;
|
$contact['network'] = Protocol::DIASPORA;
|
||||||
}
|
}
|
||||||
|
@ -269,7 +273,7 @@ class Delivery
|
||||||
private static function deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup, $server_protocol)
|
private static function deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup, $server_protocol)
|
||||||
{
|
{
|
||||||
// Transmit Diaspora reshares via Diaspora if the Friendica contact support Diaspora
|
// Transmit Diaspora reshares via Diaspora if the Friendica contact support Diaspora
|
||||||
if (Diaspora::isReshare($target_item['body']) && !empty(FContact::getByURL($contact['addr'], false))) {
|
if (Diaspora::isReshare($target_item['body'] ?? '') && !empty(FContact::getByURL($contact['addr'], false))) {
|
||||||
Logger::info('Reshare will be transmitted via Diaspora', ['url' => $contact['url'], 'guid' => ($target_item['guid'] ?? '') ?: $target_item['id']]);
|
Logger::info('Reshare will be transmitted via Diaspora', ['url' => $contact['url'], 'guid' => ($target_item['guid'] ?? '') ?: $target_item['id']]);
|
||||||
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
|
self::deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup);
|
||||||
return;
|
return;
|
||||||
|
@ -284,7 +288,7 @@ class Delivery
|
||||||
} elseif ($cmd == self::SUGGESTION) {
|
} elseif ($cmd == self::SUGGESTION) {
|
||||||
$item = $target_item;
|
$item = $target_item;
|
||||||
$atom = DFRN::fsuggest($item, $owner);
|
$atom = DFRN::fsuggest($item, $owner);
|
||||||
DBA::delete('fsuggest', ['id' => $item['id']]);
|
DI::fsuggest()->delete(new FriendSuggests([DI::fsuggest()->selectOneById($item['id'])]));
|
||||||
} elseif ($cmd == self::RELOCATION) {
|
} elseif ($cmd == self::RELOCATION) {
|
||||||
$atom = DFRN::relocate($owner, $owner['uid']);
|
$atom = DFRN::relocate($owner, $owner['uid']);
|
||||||
} elseif ($followup) {
|
} elseif ($followup) {
|
||||||
|
|
|
@ -90,7 +90,7 @@ class Notifier
|
||||||
'APDelivery', $cmd, $target_id, $inbox, $uid, $receivers, $post_uriid);
|
'APDelivery', $cmd, $target_id, $inbox, $uid, $receivers, $post_uriid);
|
||||||
}
|
}
|
||||||
} elseif ($cmd == Delivery::SUGGESTION) {
|
} elseif ($cmd == Delivery::SUGGESTION) {
|
||||||
$suggest = DI::fsuggest()->getById($target_id);
|
$suggest = DI::fsuggest()->selectOneById($target_id);
|
||||||
$uid = $suggest->uid;
|
$uid = $suggest->uid;
|
||||||
$recipients[] = $suggest->cid;
|
$recipients[] = $suggest->cid;
|
||||||
} elseif ($cmd == Delivery::REMOVAL) {
|
} elseif ($cmd == Delivery::REMOVAL) {
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Test\src\Contact\FriendSuggest\Factory;
|
||||||
|
|
||||||
|
use Friendica\Contact\FriendSuggest\Factory\FriendSuggest;
|
||||||
|
use Friendica\Contact\FriendSuggest\Entity;
|
||||||
|
use Friendica\Test\MockedTest;
|
||||||
|
use Friendica\Util\Logger\VoidLogger;
|
||||||
|
|
||||||
|
class FriendSuggestTest extends MockedTest
|
||||||
|
{
|
||||||
|
public function dataCreate()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'default' => [
|
||||||
|
'input' => [
|
||||||
|
'uid' => 12,
|
||||||
|
'cid' => 13,
|
||||||
|
'name' => 'test',
|
||||||
|
'url' => 'https://friendica.local/profile/test',
|
||||||
|
'request' => 'https://friendica.local/dfrn_request/test',
|
||||||
|
'photo' => 'https://friendica.local/photo/profile/test',
|
||||||
|
'note' => 'a common note',
|
||||||
|
'created' => '2021-10-12 12:23:00'
|
||||||
|
],
|
||||||
|
'assertion' => new Entity\FriendSuggest(
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
'test',
|
||||||
|
'https://friendica.local/profile/test',
|
||||||
|
'https://friendica.local/dfrn_request/test',
|
||||||
|
'https://friendica.local/photo/profile/test',
|
||||||
|
'a common note',
|
||||||
|
new \DateTime('2021-10-12 12:23:00', new \DateTimeZone('UTC'))
|
||||||
|
),
|
||||||
|
],
|
||||||
|
'minimum' => [
|
||||||
|
'input' => [
|
||||||
|
'id' => 20,
|
||||||
|
],
|
||||||
|
'assertion' => new Entity\FriendSuggest(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
'',
|
||||||
|
new \DateTime('now', new \DateTimeZone('URC')),
|
||||||
|
28
|
||||||
|
),
|
||||||
|
],
|
||||||
|
'full' => [
|
||||||
|
'input' => [
|
||||||
|
'uid' => 12,
|
||||||
|
'cid' => 13,
|
||||||
|
'name' => 'test',
|
||||||
|
'url' => 'https://friendica.local/profile/test',
|
||||||
|
'request' => 'https://friendica.local/dfrn_request/test',
|
||||||
|
'photo' => 'https://friendica.local/photo/profile/test',
|
||||||
|
'note' => 'a common note',
|
||||||
|
'created' => '2021-10-12 12:23:00',
|
||||||
|
'id' => 666,
|
||||||
|
],
|
||||||
|
'assertion' => new Entity\FriendSuggest(
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
'test',
|
||||||
|
'https://friendica.local/profile/test',
|
||||||
|
'https://friendica.local/dfrn_request/test',
|
||||||
|
'https://friendica.local/photo/profile/test',
|
||||||
|
'a common note',
|
||||||
|
new \DateTime('2021-10-12 12:23:00', new \DateTimeZone('UTC')),
|
||||||
|
666
|
||||||
|
),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function assertFriendSuggest(Entity\FriendSuggest $assertion, Entity\FriendSuggest $friendSuggest)
|
||||||
|
{
|
||||||
|
self::assertEquals($assertion->id, $friendSuggest->id);
|
||||||
|
self::assertEquals($assertion->uid, $friendSuggest->uid);
|
||||||
|
self::assertEquals($assertion->cid, $friendSuggest->cid);
|
||||||
|
self::assertEquals($assertion->name, $friendSuggest->name);
|
||||||
|
self::assertEquals($assertion->url, $friendSuggest->url);
|
||||||
|
self::assertEquals($assertion->request, $friendSuggest->request);
|
||||||
|
self::assertEquals($assertion->photo, $friendSuggest->photo);
|
||||||
|
self::assertEquals($assertion->note, $friendSuggest->note);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateNew()
|
||||||
|
{
|
||||||
|
$factory = new FriendSuggest(new VoidLogger());
|
||||||
|
|
||||||
|
$this->assertFriendSuggest(
|
||||||
|
$factory->createNew(12, 13),
|
||||||
|
new Entity\FriendSuggest(12, 13, '', '', '', '', '',
|
||||||
|
new \DateTime('now', new \DateTimeZone('UTC')), null
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider dataCreate
|
||||||
|
*/
|
||||||
|
public function testCreateFromTableRow(array $input, Entity\FriendSuggest $assertion)
|
||||||
|
{
|
||||||
|
$factory = new FriendSuggest(new VoidLogger());
|
||||||
|
|
||||||
|
$this->assertFriendSuggest($factory->createFromTableRow($input), $assertion);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreateEmpty()
|
||||||
|
{
|
||||||
|
$factory = new FriendSuggest(new VoidLogger());
|
||||||
|
|
||||||
|
$this->assertFriendSuggest($factory->createEmpty(66), new Entity\FriendSuggest(0, 0, '', '', '', '', '',
|
||||||
|
new \DateTime('now', new \DateTimeZone('UTC')), 66
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ use Friendica\Profile\ProfileField\Entity\ProfileField;
|
||||||
use Friendica\Profile\ProfileField\Exception\ProfileFieldNotFoundException;
|
use Friendica\Profile\ProfileField\Exception\ProfileFieldNotFoundException;
|
||||||
use Friendica\Profile\ProfileField\Exception\UnexpectedPermissionSetException;
|
use Friendica\Profile\ProfileField\Exception\UnexpectedPermissionSetException;
|
||||||
use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
|
use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
|
||||||
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
||||||
use Friendica\Test\MockedTest;
|
use Friendica\Test\MockedTest;
|
||||||
use Friendica\Util\ACLFormatter;
|
use Friendica\Util\ACLFormatter;
|
||||||
|
@ -16,8 +16,8 @@ use Mockery\MockInterface;
|
||||||
|
|
||||||
class ProfileFieldTest extends MockedTest
|
class ProfileFieldTest extends MockedTest
|
||||||
{
|
{
|
||||||
/** @var MockInterface|PermissionSetDepository */
|
/** @var MockInterface|PermissionSetRepository */
|
||||||
protected $permissionSetDepository;
|
protected $permissionSetRepository;
|
||||||
/** @var ProfileFieldFactory */
|
/** @var ProfileFieldFactory */
|
||||||
protected $profileFieldFactory;
|
protected $profileFieldFactory;
|
||||||
/** @var MockInterface|PermissionSetFactory */
|
/** @var MockInterface|PermissionSetFactory */
|
||||||
|
@ -27,7 +27,7 @@ class ProfileFieldTest extends MockedTest
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->permissionSetDepository = \Mockery::mock(PermissionSetDepository::class);
|
$this->permissionSetRepository = \Mockery::mock(PermissionSetRepository::class);
|
||||||
$this->permissionSetFactory = new PermissionSetFactory(new VoidLogger(), new ACLFormatter());
|
$this->permissionSetFactory = new PermissionSetFactory(new VoidLogger(), new ACLFormatter());
|
||||||
$this->profileFieldFactory = new ProfileFieldFactory(new VoidLogger(), $this->permissionSetFactory);
|
$this->profileFieldFactory = new ProfileFieldFactory(new VoidLogger(), $this->permissionSetFactory);
|
||||||
}
|
}
|
||||||
|
@ -180,7 +180,7 @@ class ProfileFieldTest extends MockedTest
|
||||||
|
|
||||||
$permissionSet = $this->permissionSetFactory->createFromTableRow(['uid' => $uid, 'id' => $psid]);
|
$permissionSet = $this->permissionSetFactory->createFromTableRow(['uid' => $uid, 'id' => $psid]);
|
||||||
|
|
||||||
$this->permissionSetDepository->shouldReceive('selectOneById')->with($psid, $uid)->andReturns($permissionSet);
|
$this->permissionSetRepository->shouldReceive('selectOneById')->with($psid, $uid)->andReturns($permissionSet);
|
||||||
|
|
||||||
self::assertEquals($psid, $entity->permissionSet->id);
|
self::assertEquals($psid, $entity->permissionSet->id);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Test\src\Profile\ProfileField\Depository;
|
namespace Friendica\Test\src\Profile\ProfileField\Repository;
|
||||||
|
|
||||||
use Friendica\Profile\ProfileField\Collection\ProfileFields;
|
use Friendica\Profile\ProfileField\Collection\ProfileFields;
|
||||||
use Friendica\Profile\ProfileField\Depository\ProfileField as ProfileFieldDepository;
|
use Friendica\Profile\ProfileField\Repository\ProfileField as ProfileFieldRepository;
|
||||||
use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
|
use Friendica\Profile\ProfileField\Exception\ProfileFieldPersistenceException;
|
||||||
use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
|
use Friendica\Profile\ProfileField\Factory\ProfileField as ProfileFieldFactory;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet;
|
||||||
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
|
||||||
use Friendica\Test\FixtureTest;
|
use Friendica\Test\FixtureTest;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
|
||||||
class ProfileFieldTest extends FixtureTest
|
class ProfileFieldTest extends FixtureTest
|
||||||
{
|
{
|
||||||
/** @var ProfileFieldDepository */
|
/** @var ProfileFieldRepository */
|
||||||
private $depository;
|
private $depository;
|
||||||
/** @var ProfileFieldFactory */
|
/** @var ProfileFieldFactory */
|
||||||
private $factory;
|
private $factory;
|
||||||
/** @var PermissionSetFactory */
|
/** @var PermissionSetFactory */
|
||||||
private $permissionSetFactory;
|
private $permissionSetFactory;
|
||||||
/** @var PermissionSetDepository */
|
/** @var PermissionSetRepository */
|
||||||
private $permissionSetDepository;
|
private $permissionSetRepository;
|
||||||
|
|
||||||
public function setUp(): void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@ class ProfileFieldTest extends FixtureTest
|
||||||
$this->depository = DI::profileField();
|
$this->depository = DI::profileField();
|
||||||
$this->factory = DI::profileFieldFactory();
|
$this->factory = DI::profileFieldFactory();
|
||||||
$this->permissionSetFactory = DI::permissionSetFactory();
|
$this->permissionSetFactory = DI::permissionSetFactory();
|
||||||
$this->permissionSetDepository = DI::permissionSet();
|
$this->permissionSetRepository = DI::permissionSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,7 +53,7 @@ class ProfileFieldTest extends FixtureTest
|
||||||
*/
|
*/
|
||||||
public function testSaveNew()
|
public function testSaveNew()
|
||||||
{
|
{
|
||||||
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
||||||
|
|
||||||
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ class ProfileFieldTest extends FixtureTest
|
||||||
*/
|
*/
|
||||||
public function testUpdateOrder()
|
public function testUpdateOrder()
|
||||||
{
|
{
|
||||||
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
||||||
|
|
||||||
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ class ProfileFieldTest extends FixtureTest
|
||||||
*/
|
*/
|
||||||
public function testUpdate()
|
public function testUpdate()
|
||||||
{
|
{
|
||||||
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetDepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
$profileField = $this->factory->createFromValues(42, 0, 'public', 'value', $this->permissionSetRepository->save($this->permissionSetFactory->createFromString(42, '', '<~>')));
|
||||||
|
|
||||||
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
self::assertEquals($profileField->uid, $profileField->permissionSet->uid);
|
||||||
|
|
||||||
|
@ -121,12 +121,12 @@ class ProfileFieldTest extends FixtureTest
|
||||||
|
|
||||||
self::assertEquals($savedProfileField, $selectedProfileField);
|
self::assertEquals($savedProfileField, $selectedProfileField);
|
||||||
|
|
||||||
$savedProfileField->update('another', 5, $this->permissionSetDepository->selectPublicForUser(42));
|
$savedProfileField->update('another', 5, $this->permissionSetRepository->selectPublicForUser(42));
|
||||||
self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
|
self::assertEquals(PermissionSet::PUBLIC, $savedProfileField->permissionSet->id);
|
||||||
|
|
||||||
$publicProfileField = $this->depository->save($savedProfileField);
|
$publicProfileField = $this->depository->save($savedProfileField);
|
||||||
|
|
||||||
self::assertEquals($this->permissionSetDepository->selectPublicForUser(42), $publicProfileField->permissionSet);
|
self::assertEquals($this->permissionSetRepository->selectPublicForUser(42), $publicProfileField->permissionSet);
|
||||||
self::assertEquals('another', $publicProfileField->value);
|
self::assertEquals('another', $publicProfileField->value);
|
||||||
self::assertEquals(5, $publicProfileField->order);
|
self::assertEquals(5, $publicProfileField->order);
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Friendica\Test\src\Security\PermissionSet\Depository;
|
namespace Friendica\Test\src\Security\PermissionSet\Repository;
|
||||||
|
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet as PermissionSetDepository;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
|
||||||
use Friendica\Security\PermissionSet\Entity\PermissionSet;
|
use Friendica\Security\PermissionSet\Entity\PermissionSet;
|
||||||
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
|
||||||
use Friendica\Test\FixtureTest;
|
use Friendica\Test\FixtureTest;
|
||||||
|
@ -10,8 +10,8 @@ use Friendica\DI;
|
||||||
|
|
||||||
class PermissionSetTest extends FixtureTest
|
class PermissionSetTest extends FixtureTest
|
||||||
{
|
{
|
||||||
/** @var PermissionSetDepository */
|
/** @var PermissionSetRepository */
|
||||||
private $depository;
|
private $repository;
|
||||||
/** @var PermissionSetFactory */
|
/** @var PermissionSetFactory */
|
||||||
private $factory;
|
private $factory;
|
||||||
|
|
||||||
|
@ -19,20 +19,20 @@ class PermissionSetTest extends FixtureTest
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->depository = DI::permissionSet();
|
$this->repository = DI::permissionSet();
|
||||||
$this->factory = DI::permissionSetFactory();
|
$this->factory = DI::permissionSetFactory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSelectOneByIdPublic()
|
public function testSelectOneByIdPublic()
|
||||||
{
|
{
|
||||||
$permissionSet = $this->depository->selectPublicForUser(1);
|
$permissionSet = $this->repository->selectPublicForUser(1);
|
||||||
|
|
||||||
$this->assertInstanceOf(PermissionSet::class, $permissionSet);
|
$this->assertInstanceOf(PermissionSet::class, $permissionSet);
|
||||||
self::assertEmpty($permissionSet->allow_cid);
|
self::assertEmpty($permissionSet->allow_cid);
|
||||||
self::assertEmpty($permissionSet->allow_gid);
|
self::assertEmpty($permissionSet->allow_gid);
|
||||||
self::assertEmpty($permissionSet->deny_cid);
|
self::assertEmpty($permissionSet->deny_cid);
|
||||||
self::assertEmpty($permissionSet->deny_gid);
|
self::assertEmpty($permissionSet->deny_gid);
|
||||||
self::assertEmpty(PermissionSetDepository::PUBLIC, $permissionSet->id);
|
self::assertEmpty(PermissionSetRepository::PUBLIC, $permissionSet->id);
|
||||||
self::assertEquals(1, $permissionSet->uid);
|
self::assertEquals(1, $permissionSet->uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,21 +43,21 @@ class PermissionSetTest extends FixtureTest
|
||||||
{
|
{
|
||||||
$permissionSet = $this->factory->createFromString(42, '', '<~>');
|
$permissionSet = $this->factory->createFromString(42, '', '<~>');
|
||||||
|
|
||||||
$permissionSet = $this->depository->selectOrCreate($permissionSet);
|
$permissionSet = $this->repository->selectOrCreate($permissionSet);
|
||||||
|
|
||||||
self::assertNotNull($permissionSet->id);
|
self::assertNotNull($permissionSet->id);
|
||||||
|
|
||||||
$permissionSetSelected = $this->depository->selectOneById($permissionSet->id, 42);
|
$permissionSetSelected = $this->repository->selectOneById($permissionSet->id, 42);
|
||||||
|
|
||||||
self::assertEquals($permissionSet, $permissionSetSelected);
|
self::assertEquals($permissionSet, $permissionSetSelected);
|
||||||
|
|
||||||
$newPermissionSet = $permissionSet->withAllowedContacts(['1', '2']);
|
$newPermissionSet = $permissionSet->withAllowedContacts(['1', '2']);
|
||||||
$savedPermissionSet = $this->depository->save($newPermissionSet);
|
$savedPermissionSet = $this->repository->save($newPermissionSet);
|
||||||
|
|
||||||
self::assertNotNull($savedPermissionSet->id);
|
self::assertNotNull($savedPermissionSet->id);
|
||||||
self::assertNull($newPermissionSet->id);
|
self::assertNull($newPermissionSet->id);
|
||||||
|
|
||||||
$permissionSetSavedSelected = $this->depository->selectOneById($savedPermissionSet->id, 42);
|
$permissionSetSavedSelected = $this->repository->selectOneById($savedPermissionSet->id, 42);
|
||||||
|
|
||||||
self::assertEquals($savedPermissionSet, $permissionSetSavedSelected);
|
self::assertEquals($savedPermissionSet, $permissionSetSavedSelected);
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@ use Friendica\Model\Photo;
|
||||||
use Friendica\Model\Post;
|
use Friendica\Model\Post;
|
||||||
use Friendica\Model\Profile;
|
use Friendica\Model\Profile;
|
||||||
use Friendica\Model\Storage;
|
use Friendica\Model\Storage;
|
||||||
use Friendica\Security\PermissionSet\Depository\PermissionSet;
|
use Friendica\Security\PermissionSet\Repository\PermissionSet;
|
||||||
use Friendica\Worker\Delivery;
|
use Friendica\Worker\Delivery;
|
||||||
|
|
||||||
// Post-update script of PR 5751
|
// Post-update script of PR 5751
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: 2021.12-dev\n"
|
"Project-Id-Version: 2021.12-dev\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-10-23 17:25+0000\n"
|
"POT-Creation-Date: 2021-10-23 21:51-0400\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -393,7 +393,7 @@ msgstr ""
|
||||||
#: src/Module/Debug/ActivityPubConversion.php:141
|
#: src/Module/Debug/ActivityPubConversion.php:141
|
||||||
#: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
|
#: src/Module/Debug/Babel.php:313 src/Module/Debug/Localtime.php:64
|
||||||
#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53
|
#: src/Module/Debug/Probe.php:56 src/Module/Debug/WebFinger.php:53
|
||||||
#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:129
|
#: src/Module/Delegation.php:147 src/Module/FriendSuggest.php:128
|
||||||
#: src/Module/Install.php:245 src/Module/Install.php:287
|
#: src/Module/Install.php:245 src/Module/Install.php:287
|
||||||
#: src/Module/Install.php:324 src/Module/Invite.php:177
|
#: src/Module/Install.php:324 src/Module/Invite.php:177
|
||||||
#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247
|
#: src/Module/Item/Compose.php:150 src/Module/Profile/Profile.php:247
|
||||||
|
@ -1114,11 +1114,11 @@ msgstr ""
|
||||||
#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:54
|
#: mod/redir.php:55 mod/redir.php:129 src/Module/Contact/Advanced.php:54
|
||||||
#: src/Module/Contact/Advanced.php:105 src/Module/Contact/Contacts.php:36
|
#: src/Module/Contact/Advanced.php:105 src/Module/Contact/Contacts.php:36
|
||||||
#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:54
|
#: src/Module/Contact/Media.php:43 src/Module/FriendSuggest.php:54
|
||||||
#: src/Module/FriendSuggest.php:93 src/Module/Group.php:105
|
#: src/Module/FriendSuggest.php:92 src/Module/Group.php:105
|
||||||
msgid "Contact not found."
|
msgid "Contact not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mod/removeme.php:63 src/Navigation/Notifications/Depository/Notify.php:454
|
#: mod/removeme.php:63 src/Navigation/Notifications/Repository/Notify.php:454
|
||||||
msgid "[Friendica System Notify]"
|
msgid "[Friendica System Notify]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -7903,15 +7903,15 @@ msgstr ""
|
||||||
msgid "Suggested contact not found."
|
msgid "Suggested contact not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/FriendSuggest.php:84
|
#: src/Module/FriendSuggest.php:83
|
||||||
msgid "Friend suggestion sent."
|
msgid "Friend suggestion sent."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/FriendSuggest.php:121
|
#: src/Module/FriendSuggest.php:120
|
||||||
msgid "Suggest Friends"
|
msgid "Suggest Friends"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Module/FriendSuggest.php:124
|
#: src/Module/FriendSuggest.php:123
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Suggest a friend for %s"
|
msgid "Suggest a friend for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -9920,262 +9920,6 @@ msgid ""
|
||||||
"features and resources."
|
"features and resources."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:192
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:675
|
|
||||||
msgid "[Friendica:Notify]"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:256
|
|
||||||
#, php-format
|
|
||||||
msgid "%s New mail received at %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:258
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s sent you a new private message at %2$s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:259
|
|
||||||
msgid "a private message"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:259
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s sent you %2$s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:261
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s to view and/or reply to your private messages."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:292
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s commented on %2$s's %3$s %4$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:297
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s commented on your %2$s %3$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:301
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s commented on their %2$s %3$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:305
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:710
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s Comment to conversation #%2$d by %3$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:307
|
|
||||||
#, php-format
|
|
||||||
msgid "%s commented on an item/conversation you have been following."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:311
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:326
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:345
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:725
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s to view and/or reply to the conversation."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:318
|
|
||||||
#, php-format
|
|
||||||
msgid "%s %s posted to your profile wall"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:320
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s posted to your profile wall at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:321
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s posted to [url=%2$s]your wall[/url]"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:333
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s %2$s poked you"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:335
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s poked you at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:336
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s [url=%2$s]poked you[/url]."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:353
|
|
||||||
#, php-format
|
|
||||||
msgid "%s Introduction received"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:355
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received an introduction from '%1$s' at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:356
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:361
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:407
|
|
||||||
#, php-format
|
|
||||||
msgid "You may visit their profile at %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:363
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s to approve or reject the introduction."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:370
|
|
||||||
#, php-format
|
|
||||||
msgid "%s A new person is sharing with you"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:372
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:373
|
|
||||||
#, php-format
|
|
||||||
msgid "%1$s is sharing with you at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:380
|
|
||||||
#, php-format
|
|
||||||
msgid "%s You have a new follower"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:382
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:383
|
|
||||||
#, php-format
|
|
||||||
msgid "You have a new follower at %2$s : %1$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:396
|
|
||||||
#, php-format
|
|
||||||
msgid "%s Friend suggestion received"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:398
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received a friend suggestion from '%1$s' at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:399
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:405
|
|
||||||
msgid "Name:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:406
|
|
||||||
msgid "Photo:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:409
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s to approve or reject the suggestion."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:417
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:432
|
|
||||||
#, php-format
|
|
||||||
msgid "%s Connection accepted"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:419
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:434
|
|
||||||
#, php-format
|
|
||||||
msgid "'%1$s' has accepted your connection request at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:420
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:435
|
|
||||||
#, php-format
|
|
||||||
msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:425
|
|
||||||
msgid ""
|
|
||||||
"You are now mutual friends and may exchange status updates, photos, and "
|
|
||||||
"email without restriction."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:427
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s if you wish to make any changes to this relationship."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:440
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"'%1$s' has chosen to accept you a fan, which restricts some forms of "
|
|
||||||
"communication - such as private messaging and some profile interactions. If "
|
|
||||||
"this is a celebrity or community page, these settings were applied "
|
|
||||||
"automatically."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:442
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"'%1$s' may choose to extend this into a two-way or more permissive "
|
|
||||||
"relationship in the future."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:444
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s if you wish to make any changes to this relationship."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:454
|
|
||||||
msgid "registration request"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:456
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received a registration request from '%1$s' at %2$s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:457
|
|
||||||
#, php-format
|
|
||||||
msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:462
|
|
||||||
#, php-format
|
|
||||||
msgid ""
|
|
||||||
"Full Name:\t%s\n"
|
|
||||||
"Site Location:\t%s\n"
|
|
||||||
"Login Name:\t%s (%s)"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:468
|
|
||||||
#, php-format
|
|
||||||
msgid "Please visit %s to approve or reject the request."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:704
|
|
||||||
#, php-format
|
|
||||||
msgid "%s %s tagged you"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Depository/Notify.php:707
|
|
||||||
#, php-format
|
|
||||||
msgid "%s %s shared a new post"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: src/Navigation/Notifications/Factory/FormattedNotification.php:89
|
#: src/Navigation/Notifications/Factory/FormattedNotification.php:89
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s liked %s's post"
|
msgid "%s liked %s's post"
|
||||||
|
@ -10334,6 +10078,262 @@ msgstr ""
|
||||||
msgid "%1$s shared a post"
|
msgid "%1$s shared a post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:192
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:675
|
||||||
|
msgid "[Friendica:Notify]"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:256
|
||||||
|
#, php-format
|
||||||
|
msgid "%s New mail received at %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:258
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s sent you a new private message at %2$s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:259
|
||||||
|
msgid "a private message"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:259
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s sent you %2$s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:261
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s to view and/or reply to your private messages."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:292
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s commented on %2$s's %3$s %4$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:297
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s commented on your %2$s %3$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:301
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s commented on their %2$s %3$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:305
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:710
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s Comment to conversation #%2$d by %3$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:307
|
||||||
|
#, php-format
|
||||||
|
msgid "%s commented on an item/conversation you have been following."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:311
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:326
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:345
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:725
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s to view and/or reply to the conversation."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:318
|
||||||
|
#, php-format
|
||||||
|
msgid "%s %s posted to your profile wall"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:320
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s posted to your profile wall at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:321
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s posted to [url=%2$s]your wall[/url]"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:333
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s %2$s poked you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:335
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s poked you at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:336
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s [url=%2$s]poked you[/url]."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:353
|
||||||
|
#, php-format
|
||||||
|
msgid "%s Introduction received"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:355
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received an introduction from '%1$s' at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:356
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received [url=%1$s]an introduction[/url] from %2$s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:361
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:407
|
||||||
|
#, php-format
|
||||||
|
msgid "You may visit their profile at %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:363
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s to approve or reject the introduction."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:370
|
||||||
|
#, php-format
|
||||||
|
msgid "%s A new person is sharing with you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:372
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:373
|
||||||
|
#, php-format
|
||||||
|
msgid "%1$s is sharing with you at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:380
|
||||||
|
#, php-format
|
||||||
|
msgid "%s You have a new follower"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:382
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:383
|
||||||
|
#, php-format
|
||||||
|
msgid "You have a new follower at %2$s : %1$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:396
|
||||||
|
#, php-format
|
||||||
|
msgid "%s Friend suggestion received"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:398
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received a friend suggestion from '%1$s' at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:399
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:405
|
||||||
|
msgid "Name:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:406
|
||||||
|
msgid "Photo:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:409
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s to approve or reject the suggestion."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:417
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:432
|
||||||
|
#, php-format
|
||||||
|
msgid "%s Connection accepted"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:419
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:434
|
||||||
|
#, php-format
|
||||||
|
msgid "'%1$s' has accepted your connection request at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:420
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:435
|
||||||
|
#, php-format
|
||||||
|
msgid "%2$s has accepted your [url=%1$s]connection request[/url]."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:425
|
||||||
|
msgid ""
|
||||||
|
"You are now mutual friends and may exchange status updates, photos, and "
|
||||||
|
"email without restriction."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:427
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s if you wish to make any changes to this relationship."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:440
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"'%1$s' has chosen to accept you a fan, which restricts some forms of "
|
||||||
|
"communication - such as private messaging and some profile interactions. If "
|
||||||
|
"this is a celebrity or community page, these settings were applied "
|
||||||
|
"automatically."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:442
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"'%1$s' may choose to extend this into a two-way or more permissive "
|
||||||
|
"relationship in the future."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:444
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s if you wish to make any changes to this relationship."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:454
|
||||||
|
msgid "registration request"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:456
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received a registration request from '%1$s' at %2$s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:457
|
||||||
|
#, php-format
|
||||||
|
msgid "You've received a [url=%1$s]registration request[/url] from %2$s."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:462
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"Full Name:\t%s\n"
|
||||||
|
"Site Location:\t%s\n"
|
||||||
|
"Login Name:\t%s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:468
|
||||||
|
#, php-format
|
||||||
|
msgid "Please visit %s to approve or reject the request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:704
|
||||||
|
#, php-format
|
||||||
|
msgid "%s %s tagged you"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Navigation/Notifications/Repository/Notify.php:707
|
||||||
|
#, php-format
|
||||||
|
msgid "%s %s shared a new post"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: src/Object/EMail/ItemCCEMail.php:42
|
#: src/Object/EMail/ItemCCEMail.php:42
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -10687,7 +10687,7 @@ msgstr ""
|
||||||
msgid "%1$d %2$s ago"
|
msgid "%1$d %2$s ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Worker/Delivery.php:521
|
#: src/Worker/Delivery.php:525
|
||||||
msgid "(no subject)"
|
msgid "(no subject)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user