Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
CRAP | |
0.00% |
0 / 56 |
TaskPicker | |
0.00% |
0 / 1 |
|
0.00% |
0 / 4 |
272 | |
0.00% |
0 / 56 |
filter | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 20 |
|||
getTaskIdArray | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
asJSON | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 13 |
|||
createJSONTaskInfo | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 16 |
<?php | |
/** | |
* @link https://www.humhub.org/ | |
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG | |
* @license https://www.humhub.com/licences | |
* | |
*/ | |
namespace humhub\modules\tasks\models\search; | |
use Yii; | |
use yii\helpers\Html; | |
/** | |
* This class can be used to filter results for a task picker search query by calling the static | |
* filter method. | |
* | |
* @since 1.2 | |
* @author buddha | |
*/ | |
class TaskPicker | |
{ | |
/** | |
* Creates a json task array used in the taskpicker js frontend. | |
* The $cfg is used to specify the filter values the following values are available: | |
* | |
* query - (ActiveQuery) The initial query which is used to append additional filters. - default = User Friends if friendship module is enabled else User::find() | |
* | |
* active - (boolean) Specifies if only active task should be included in the result - default = true | |
* | |
* maxResults - (int) The max number of entries returned in the array - default = 10 | |
* | |
* keyword - (string) A keyword which filters task by taskname, firstname, lastname, email and title | |
* | |
* permission - (BasePermission) An additional permission filter | |
* | |
* fillQuery - (ActiveQuery) Can be used to fill the result array if the initial query does not return the maxResults, these results will have a lower priority | |
* | |
* fillUser - (boolean) When set to true and no fillQuery is given the result is filled with User::find() results | |
* | |
* disableFillUser - Specifies if the results of the fillQuery should be disabled in the taskpicker results - default = true | |
* | |
* @param type $cfg filter configuration | |
* @return type json representation used by the taskpicker | |
*/ | |
public static function filter($cfg = null) | |
{ | |
$defaultCfg = [ | |
// 'active' => true, | |
'maxResult' => 10, | |
// 'disableFillUser' => true, | |
'keyword' => null, | |
'permission' => null, | |
'fillQuery' => null, | |
'disabledText' => null, | |
// 'fillUser' => false, | |
'filter' => null | |
]; | |
$cfg = ($cfg == null) ? $defaultCfg : array_merge($defaultCfg, $cfg); | |
//If no initial query is given we use getFriends if friendship module is enabled otherwise all tasks | |
if(!isset($cfg['query'])) { | |
$cfg['query'] = TaskFilter::find(); | |
} | |
//Filter the initial query and disable task without the given permission | |
// $task = TaskFilter::filter($cfg['query'], $cfg['keyword'], $cfg['maxResult'], null, $cfg['active']); | |
$task = TaskFilter::filter($cfg['query'], $cfg['keyword'], $cfg['maxResult'], null); | |
$jsonResult = self::asJSON($task, $cfg['permission'], 2, $cfg['disabledText']); | |
// //Fill the result with additional users if it's allowed and the result count less than maxResult | |
// if(count($task) < $cfg['maxResult'] && (isset($cfg['fillQuery']) || $cfg['fillUser']) ) { | |
// | |
// //Filter out users by means of the fillQuery or default the fillQuery | |
// $fillQuery = (isset($cfg['fillQuery'])) ? $cfg['fillQuery'] : UserFilter::find(); | |
// UserFilter::addKeywordFilter($fillQuery, $cfg['keyword'], ($cfg['maxResult'] - count($user))); | |
// $fillQuery->andFilterWhere(['not in', 'id', self::getUserIdArray($user)]); | |
// $fillUser = $fillQuery->all(); | |
// | |
// //Either the additional users are disabled (by default) or we disable them by permission | |
// $disableCondition = (isset($cfg['permission'])) ? $cfg['permission'] : $cfg['disableFillUser']; | |
// $jsonResult = array_merge($jsonResult, self::asJSON($fillUser, $disableCondition, 1, $cfg['disabledText'])); | |
// } | |
if($cfg['filter'] != null) { | |
array_walk($jsonResult, $cfg['filter']); | |
} | |
return $jsonResult; | |
} | |
/** | |
* Assambles all user Ids of the given $users into an array | |
* | |
* @param array $users array of user models | |
* @return array user id array | |
*/ | |
private static function getTaskIdArray($tasks) | |
{ | |
$result = []; | |
foreach($tasks as $task) { | |
$result[] = $task->id; | |
} | |
return $result; | |
} | |
/** | |
* Creates an json result with user information arrays. A user will be marked | |
* as disabled, if the permission check fails on this user. | |
* | |
* @param type $tasks | |
* @param type $permission | |
* @return type | |
*/ | |
public static function asJSON($tasks, $permission = null, $priority = null, $disabledText = null) | |
{ | |
if (is_array($tasks)) { | |
$result = []; | |
foreach ($tasks as $task) { | |
if ($task != null) { | |
$result[] = self::createJSONTaskInfo($task, $permission, $priority, $disabledText); | |
} | |
} | |
return $result; | |
} else { | |
return self::createJSONTaskInfo($tasks, $permission, $priority, $disabledText); | |
} | |
} | |
/** | |
* Creates a single user-information array for the given $user. A user will be marked | |
* as disabled, if the given $permission check fails on this user. If the second argument | |
* is of type boolean, the it will define the disabled field of the result directly. | |
* | |
* @param type $user | |
* @param \humhub\libs\BasePermission|boolean|null if boolean is given | |
* @return type | |
*/ | |
private static function createJSONTaskInfo($task, $permission = null, $priority = null, $disabledText = null) | |
{ | |
$disabled = false; | |
if($permission != null && $permission instanceof \humhub\libs\BasePermission) { | |
$disabled = !$task->getPermissionManager()->can($permission); | |
} else if($permission != null) { | |
$disabled = $permission; | |
} | |
return [ | |
'id' => $task->id, | |
'disabled' => $disabled, | |
'disabledText' => ($disabled) ? $disabledText : null, | |
'text' => Html::encode($task->title), | |
// 'image' => $task->getProfileImage()->getUrl(), | |
'priority' => ($priority == null) ? 0 : $priority, | |
'link' => $task->getUrl() | |
]; | |
} | |
} |