/** * Retreive all users that belong to the given group. * * @param int $id * @return array Users */ protected function actionGetUsers($params) { //don't check ACL here because this method may be called by anyone. $group = \GO\Base\Model\Group::model()->findByPk($params['id'], false, true); if (empty($group)) { $group = new \GO\Base\Model\Group(); } if (isset($params['add_users']) && !empty($group->id)) { $users = json_decode($params['add_users']); foreach ($users as $usr_id) { if ($group->addUser($usr_id)) { \GO\Base\Model\User::model()->findByPk($usr_id)->checkDefaultModels(); } } } $store = \GO\Base\Data\Store::newInstance(\GO\Base\Model\User::model()); $store->getColumnModel()->formatColumn('name', '$model->name', array(), array('first_name', 'last_name')); $storeParams = $store->getDefaultParams($params)->joinCustomFields(false); $delresponse = array(); //manually check permission here because this method may be accessed by any logged in user. allowWithoutModuleAccess is used above. if ($group->checkPermissionLevel(\GO\Base\Model\Acl::DELETE_PERMISSION)) { // The users in the group "everyone" cannot be deleted if ($group->id != \GO::config()->group_everyone) { $store->processDeleteActions($params, 'GO\\Base\\Model\\UserGroup', array('group_id' => $group->id)); } else { $delresponse['deleteSuccess'] = false; $delresponse['deleteFeedback'] = 'Members of the group everyone cannot be deleted.'; } } $stmt = $group->users($storeParams); $store->setStatement($stmt); $response = $store->getData(); $response = array_merge($response, $delresponse); return $response; }
protected function actionStore($params) { $params = \GO\Base\Db\FindParams::newInstance()->order('vtime')->select('t.*')->join(\GO\Base\Model\ReminderUser::model()->tableName(), \GO\Base\Db\FindCriteria::newInstance()->addModel(\GO\Base\Model\Reminder::model())->addCondition('id', 'ru.reminder_id', '=', 't', true, true), 'ru')->criteria(\GO\Base\Db\FindCriteria::newInstance()->addModel(\GO\Base\Model\ReminderUser::model(), 'ru')->addCondition('user_id', \GO::user()->id, '=', 'ru')->addCondition('time', time(), '<', 'ru')); $store = \GO\Base\Data\Store::newInstance(\GO\Base\Model\Reminder::model()); $store->getColumnModel()->setFormatRecordFunction(array($this, 'formatReminderRecord')); $stmt = \GO\Base\Model\Reminder::model()->find($params); $store->setStatement($stmt); return $store->getData(); }
/** * Load the folders that need to be displayed in the portlet * * @param array $params * @return array $response */ protected function actionPortletFoldersByUser($params) { $findCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', \GO::user()->id); $findParams = \GO\Base\Db\FindParams::newInstance()->debugSql()->criteria($findCriteria); $portletFoldersStatement = \GO\email\Model\PortletFolder::model()->find($findParams); $portletFoldersStore = \GO\Base\Data\Store::newInstance(\GO::getModel($this->model)); $portletFoldersStore->setStatement($portletFoldersStatement); return $portletFoldersStore->getData(); }
protected function actionCombinedStore($params) { $response = array('success' => true, 'total' => 0, 'results' => array()); $cm = new \GO\Base\Data\ColumnModel(); $cm->setColumnsFromModel(\GO::getModel('GO\\Comments\\Model\\Comment')); $store = \GO\Base\Data\Store::newInstance($cm); $storeParams = $store->getDefaultParams($params)->mergeWith($this->getStoreParams($params)); $findParams = \GO\Base\Db\FindParams::newInstance()->select('t.*,type.model_name')->joinModel(array('model' => 'GO\\Base\\Model\\ModelType', 'localTableAlias' => 't', 'localField' => 'model_type_id', 'foreignField' => 'id', 'tableAlias' => 'type')); $findParams->mergeWith($storeParams); $store->setStatement(\GO\Comments\Model\Comment::model()->find($findParams)); return $store->getData(); // // return $response; }
/** * Return all new items for a grid. * So this are the items that are not already selected. * * Parameters: * model_id = The value of one of the keys from the combined primary key of the linkModel that is not given in the linkModelField; * Example: The combined key of the linkModel is: [user_id,tasklist_id]. * The given linkModelField is: [tasklist_id]. * Then the model_id needs to be the other value of the combined key so in this example: The value for [user_id] * * * @param Array $params * @return type */ protected function actionSelectNewStore($params) { $model = \GO::getModel($this->modelName()); $linkModel = \GO::getModel($this->linkModelName()); $store = \GO\Base\Data\Store::newInstance($model); $joinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition($this->getRemoteKey(), $params['model_id'], '=', 'lt')->addCondition($model->primaryKey(), 'lt.' . $this->linkModelField(), '=', 't', true, true); $this->formatColumns($store->getColumnModel()); $findParams = $store->getDefaultParams($params); if ($this->uniqueSelection) { $findParams->join($linkModel->tableName(), $joinCriteria, 'lt', 'LEFT'); $findCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition($this->linkModelField(), null, 'IS', 'lt'); $findParams->criteria($findCriteria); } $availableModels = $model->find($findParams); $store->setStatement($availableModels); return $store->getData(); }
/** * Get the data for the grid that shows all the tasks from the selected tasklists. * * @param Array $params * @return Array The array with the data for the grid. */ protected function actionPortletGrid($params) { $now = \GO\Base\Util\Date::date_add(mktime(0, 0, 0), 1); if (isset($params['completed_task_id'])) { $updateTask = \GO\Tasks\Model\Task::model()->findByPk($params['completed_task_id']); if (isset($params['checked'])) { $updateTask->setCompleted($params['checked'] == "true"); } } // Find out the sort for the grid $sort = !empty($params['sort']) ? $params['sort'] : 'due_time'; $dir = !empty($params['dir']) ? $params['dir'] : 'ASC'; $store = \GO\Base\Data\Store::newInstance(\GO\Tasks\Model\Task::model()); $findCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('start_time', $now, '<')->addCondition('status', \GO\Tasks\Model\Task::STATUS_COMPLETED, '<>', 't'); $joinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', \GO::user()->id, '=', 'pt')->addCondition('tasklist_id', 'pt.tasklist_id', '=', 't', true, true); $tasklistJoinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('tasklist_id', 'tl.id', '=', 't', true, true); $findParams = $store->getDefaultParams($params)->select('t.*, tl.name AS tasklist_name')->criteria($findCriteria)->order(array('tasklist_name', $sort), $dir)->ignoreAcl()->join(\GO\Tasks\Model\PortletTasklist::model()->tableName(), $joinCriteria, 'pt')->join(\GO\Tasks\Model\Tasklist::model()->tableName(), $tasklistJoinCriteria, 'tl'); $stmt = \GO\Tasks\Model\Task::model()->find($findParams); $store->setStatement($stmt); $store->getColumnModel()->formatColumn('tasklist_name', '$model->tasklist_name'); $store->getColumnModel()->formatColumn('late', '$model->isLate();'); $store->getColumnModel()->formatColumn('is_active', '$model->isActive()'); return $store->getData(); }
public function actionAccountTemplatesStore($params) { $findParams = \GO\Base\Db\FindParams::newInstance()->order('name'); $findParams->getCriteria()->addCondition('type', \GO\Addressbook\Model\Template::TYPE_EMAIL); $stmt = \GO\Addressbook\Model\Template::model()->find($findParams); $store = \GO\Base\Data\Store::newInstance(\GO\Addressbook\Model\Template::model()); // $store->getColumnModel()->setFormatRecordFunction(array($this, 'formatEmailSelectionRecord')); $store->setStatement($stmt); $response = $store->getData(); $response['total']++; $response['results'][] = array('id' => -1, 'name' => '-- ' . \GO::t('userDefaultTemplate', 'addressbook') . ' --', 'group' => '', 'text' => '', 'template_id' => '', 'checked' => false); return $response; }
public function actionRecent($params) { $start = !empty($params['start']) ? $params['start'] : 0; $limit = !empty($params['limit']) ? $params['limit'] : 20; $store = \GO\Base\Data\Store::newInstance(\GO\Files\Model\File::model()); $store->getColumnModel()->formatColumn('path', '$model->path', array(), array('first_name', 'last_name')); $store->getColumnModel()->formatColumn('weekday', '$fullDays[date("w", $model->mtime)]." ".\\GO\\Base\\Util\\Date::get_timestamp($model->mtime, false);', array('fullDays' => \GO::t('full_days')), array('first_name', 'last_name')); $store->setStatement(\GO\Files\Model\File::model()->findRecent($start, $limit)); $response = $store->getData(); $store->setStatement(\GO\Files\Model\File::model()->findRecent()); $response['total'] = $store->getTotal(); return $response; }
private function _processTasksDisplay($model, $response) { //$startOfDay = \GO\Base\Util\Date::clear_time(time()); $findParams = \GO\Base\Db\FindParams::newInstance()->order('due_time', 'DESC'); //$findParams->getCriteria()->addCondition('start_time', $startOfDay, '<=')->addCondition('status', \GO\Tasks\Model\Task::STATUS_COMPLETED, '!='); $stmt = \GO\Tasks\Model\Task::model()->findLinks($model, $findParams); $store = \GO\Base\Data\Store::newInstance(\GO\Tasks\Model\Task::model()); $store->setStatement($stmt); $store->getColumnModel()->setFormatRecordFunction(array($this, 'formatTaskLinkRecord'))->formatColumn('late', '$model->due_time<time() ? 1 : 0;')->formatColumn('tasklist_name', '$model->tasklist->name')->formatColumn('link_count', '$model->countLinks()')->formatColumn('link_description', '$model->link_description'); $data = $store->getData(); $response['data']['tasks'] = $data['results']; return $response; }
protected function actionLinks($params) { $model = \GO::getModel($params['model_name'])->findByPk($params['model_id']); $store = Store::newInstance(\GO\Base\Model\SearchCacheRecord::model()); //$model->unlink($model); if (!empty($params['unlinks'])) { $keys = json_decode($params['unlinks'], true); foreach ($keys as $key) { $key = explode(':', $key); $linkedModel = \GO::getModel($key[0])->findByPk($key[1]); $model->unlink($linkedModel); } } // if(!empty($params['delete_keys'])){ // // $keys = json_decode($params['delete_keys'], true); // // foreach($keys as $key){ // $key = explode(':',$key); // // $linkedModel = \GO::getModel($key[0])->findByPk($key[1]); // $linkedModel->delete(); // } // } //we'll do a full text search in getStoreParams // $params['match']=isset($params["query"]) ? $params["query"] : ''; // unset($params["query"]); $storeParams = $store->getDefaultParams($params)->select("t.*,l.description AS link_description"); $storeParams->mergeWith($this->getStoreParams($params)); //if(!empty($params['folder_id'])) $storeParams->getCriteria()->addCondition('folder_id', $params['folder_id'], '=', 'l'); if (isset($params['types'])) { $types = json_decode($params['types'], true); if (count($types)) { $storeParams->getCriteria()->addInCondition('model_type_id', $types); } } $stmt = \GO\Base\Model\SearchCacheRecord::model()->findLinks($model, $storeParams); $store->setStatement($stmt); $cm = $store->getColumnModel(); $cm->formatColumn('iconCls', '"go-model-".str_replace(\'\\\\\',\'_\',$model->model_name)'); $cm->formatColumn('name_and_type', '"(".$model->type.") ".$model->name'); $cm->formatColumn('model_name_and_id', '$model->model_name.":".$model->model_id'); $cm->formatColumn('link_count', '\\GO::getModel($model->model_name)->countLinks($model->model_id)'); $data = $store->getData(); $data['permissionLevel'] = $model->getPermissionLevel(); return $data; }
/** * Get user groups * */ protected function actionGroups($params) { $store = \GO\Base\Data\Store::newInstance(\GO\Base\Model\Group::model()); $store->setDefaultSortOrder('name', 'ASC'); $findParams = $store->getDefaultParams($params); // if(empty($params['manage'])){ // // //permissions are handled differently. Users may use all groups they are member of. // $findParams->ignoreAcl(); // // if(!GO::user()->isAdmin()){ // $findParams->getCriteria() // ->addCondition('admin_only', 1,'!=') // ->addCondition('user_id', GO::user()->id,'=','ug'); // // $findParams->joinModel(array( // 'model'=>"GO\Base\Model\UserGroup", // 'localTableAlias'=>'t', //defaults to "t" // 'foreignField'=>'group_id', //defaults to primary key of the remote model // 'tableAlias'=>'ug', //Optional table alias // )); // } // // } $store->setStatement(\GO\Base\Model\Group::model()->find($findParams)); $store->getColumnModel()->formatColumn('cf', '$model->id.":".$model->name'); //special field used by custom fields. They need an id an value in one.) return $store->getData(); }
protected function actionCompanies($params) { $store = \GO\Base\Data\Store::newInstance(\GO\Addressbook\Model\Company::model()); $store->getColumnModel()->formatColumn('name', '$model->name', array(), array('first_name', 'last_name')); $store->getColumnModel()->formatColumn('addressbook_name', '$model->addressbook->name', array(), 'addressbook_id'); $store->processDeleteActions($params, "GO\\Addressbook\\Model\\AddresslistCompany", array('addresslist_id' => $params['addresslist_id'])); $response = array(); if (!empty($params['add_addressbook_id'])) { $addressbook = \GO\Addressbook\Model\Addressbook::model()->findByPk($params['add_addressbook_id']); $model = \GO\Addressbook\Model\Addresslist::model()->findByPk($params['addresslist_id']); $stmt = $addressbook->companies(); while ($company = $stmt->fetch()) { $model->addManyMany('companies', $company->id); } } elseif (!empty($params['add_keys'])) { $add_keys = json_decode($params['add_keys'], true); $model = !isset($model) ? \GO\Addressbook\Model\Addresslist::model()->findByPk($params['addresslist_id']) : $model; foreach ($add_keys as $add_key) { $model->addManyMany('companies', $add_key); } } elseif (!empty($params['add_search_result'])) { $findParams = \GO::session()->values["company"]['findParams']; $findParams->getCriteria()->recreateTemporaryTables(); $findParams->limit(0)->select('t.id'); $model = \GO\Addressbook\Model\Addresslist::model()->findByPk($params['addresslist_id']); $stmt = \GO\Addressbook\Model\Company::model()->find($findParams); foreach ($stmt as $contact) { $model->addManyMany('companies', $contact->id); } } $stmt = \GO\Addressbook\Model\Addresslist::model()->findByPk($params['addresslist_id'])->companies($store->getDefaultParams($params)); $store->setDefaultSortOrder('name', 'ASC'); $store->setStatement($stmt); return array_merge($response, $store->getData()); }
protected function actionUsernames($params) { // $store = \GO\Base\Data\Store::newInstance(\GO\Email\Model\Account::model()); // $findParams= $store->getDefaultParams($params)->group('username'); $store = \GO\Base\Data\Store::newInstance(\GO\Base\Model\User::model()); $findParams = $store->getDefaultParams($params); $findParams->joinModel(array('model' => 'GO\\Email\\Model\\Account', 'localTableAlias' => 't', 'localField' => 'id', 'foreignField' => 'user_id', 'tableAlias' => 'acc', 'type' => 'INNER')); $findParams->select('acc.username'); $findParams->joinCustomFields(false); $findParams->group(array('acc.username')); $stmt = \GO\Base\Model\User::model()->find($findParams); //$stmt = \GO\Email\Model\Account::model()->find($findParams); $store->setStatement($stmt); return $store->getData(); }
protected function actionList($params) { if (!empty($params['query'])) { return $this->_searchFiles($params); } if ($params['folder_id'] == 'shared') { return $this->_listShares($params); } //get the folder that contains the files and folders to list. //This will check permissions too. $folder = \GO\Files\Model\Folder::model()->findByPk($params['folder_id']); if (!$folder) { $folder = \GO\Files\Model\Folder::model()->findHomeFolder(GO::user()); } if (!$folder) { throw new Exception('No Folder found with id ' . $params['folder_id']); } $user = $folder->quotaUser; $this->_listFolderPermissionLevel = $folder->permissionLevel; $response['permission_level'] = $folder->permissionLevel; //$folder->readonly ? \GO\Base\Model\Acl::READ_PERMISSION : $folder->permissionLevel; if (empty($params['skip_fs_sync']) && empty(GO::config()->files_disable_filesystem_sync)) { $folder->checkFsSync(); } //useful information for the view. $response['path'] = $folder->path; //Show this page in thumbnails or list $folderPreference = \GO\Files\Model\FolderPreference::model()->findByPk(array('user_id' => \GO::user()->id, 'folder_id' => $folder->id)); if ($folderPreference) { $response['thumbs'] = $folderPreference->thumbs; } else { $response['thumbs'] = 0; } $response['parent_id'] = $folder->parent_id; //locked state $response['lock_state'] = !empty($folder->apply_state); $response['cm_state'] = isset($folder->cm_state) && !empty($folder->apply_state) ? $folder->cm_state : ""; $response['may_apply_state'] = \GO\Base\Model\Acl::hasPermission($folder->getPermissionLevel(), \GO\Base\Model\Acl::MANAGE_PERMISSION); // if($response["lock_state"]){ // $state = json_decode($response["cm_state"]); // // if(isset($state->sort)){ // $params['sort']=$state->sort->field; // $params['dir']=$state->sort->direction; // } // } $store = \GO\Base\Data\Store::newInstance(\GO\Files\Model\Folder::model()); //set sort aliases $store->getColumnModel()->formatColumn('type', '', array(), 'name'); $store->getColumnModel()->formatColumn('size', '"-"', array(), 'name'); $store->getColumnModel()->formatColumn('locked_user_id', '"0"'); //handle delete request for both files and folder if (isset($params['delete_keys'])) { $ids = $this->_splitFolderAndFileIds(json_decode($params['delete_keys'], true)); $params['delete_keys'] = json_encode($ids['folders']); $store->processDeleteActions($params, "GO\\Files\\Model\\Folder"); $params['delete_keys'] = json_encode($ids['files']); $store->processDeleteActions($params, "GO\\Files\\Model\\File"); } $store->getColumnModel()->setFormatRecordFunction(array($this, 'formatListRecord')); $findParams = $store->getDefaultParams($params); //sorting on custom fields doesn't work for folders if (isset($params['sort']) && substr($params['sort'], 0, 4) == 'col_') { $findParams->order("name", $params['dir']); } $findParamsArray = $findParams->getParams(); if (!isset($findParamsArray['start'])) { $findParamsArray['start'] = 0; } if (!isset($findParamsArray['limit'])) { $findParamsArray['limit'] = 0; } //$stmt = $folder->folders($findParams); $stmt = $folder->getSubFolders($findParams); $store->setStatement($stmt); $response = array_merge($response, $store->getData()); //add files to the listing if it fits $folderPages = floor($stmt->foundRows / $findParamsArray['limit']); $foldersOnLastPage = $stmt->foundRows - $folderPages * $findParamsArray['limit']; //$isOnLastPageofFolders = $stmt->foundRows < ($findParams['limit'] + $findParams['start']); if (count($response['results'])) { $fileStart = $findParamsArray['start'] - $folderPages * $findParamsArray['limit']; $fileLimit = $findParamsArray['limit'] - $foldersOnLastPage; } else { $fileStart = $findParamsArray['start'] - $stmt->foundRows; $fileLimit = $findParamsArray['limit']; } if ($fileStart >= 0) { $store->resetResults(); $store->getColumnModel()->formatColumn('size', '"-"', array(), 'size'); $store->getColumnModel()->formatColumn('type', '', array(), 'extension'); $store->getColumnModel()->formatColumn('locked', '$model->isLocked()'); $store->getColumnModel()->formatColumn('locked_user_id', '$model->locked_user_id'); $store->getColumnModel()->formatColumn('folder_id', '$model->folder_id'); $findParams = $store->getDefaultParams($params)->limit($fileLimit)->start($fileStart); // Handle the files filter if (!empty($params['files_filter'])) { $extensions = explode(',', $params['files_filter']); $findParams->getCriteria()->addInCondition('extension', $extensions); } $stmt = $folder->files($findParams); $store->setStatement($stmt); $filesResponse = $store->getData(); $response['total'] += $filesResponse['total']; $response['results'] = array_merge($response['results'], $filesResponse['results']); } else { $record = $folder->files(\GO\Base\Db\FindParams::newInstance()->single()->select('count(*) as total')); $response['total'] += $record->total; } if (empty($user)) { $user = \GO::user(); } $response['owner_id'] = $user->id; $response['disk_usage'] = round($user->disk_usage / 1024 / 1024, 2); $response['disk_quota'] = $user->disk_quota; return $response; }
/** * Return the selected items for a grid. * * Parameters: * model_id = The value of one of the keys from the combined primary key of the linkModel that is not given in the linkModelField; * Example: The combined key of the linkModel is: [user_id,tasklist_id]. * The given linkModelField is: [tasklist_id]. * Then the model_id needs to be the other value of the combined key so in this example: The value for [user_id] * * * @param Array $params * @return type */ protected function actionSelectedStore($params) { $response = array(); if (!empty($params['add'])) { if ($this->beforeAdd($params)) { $ids = json_decode($params['add'], true); $linkmodelField = $this->linkModelField(); $remoteKey = $this->getRemoteKey(); $linkModelName = $this->linkModelName(); foreach ($ids as $id) { $linkModel = new $linkModelName(); if (isset($params['addAttributes']) && ($attr = json_decode($params['addAttributes'], true))) { $linkModel->setAttributes($attr); } $linkModel->{$linkmodelField} = $id; $linkModel->{$remoteKey} = $params['model_id']; $linkModel->save(); } } } $model = \GO::getModel($this->modelName()); $linkModel = \GO::getModel($this->linkModelName()); $store = \GO\Base\Data\Store::newInstance($model); $this->formatColumns($store->getColumnModel()); if ($model->aclField()) { $store->getColumnModel()->formatColumn('permission_level', '$model->permissionLevel'); } try { if ($this->beforeDelete($params)) { $store->processDeleteActions($params, $this->linkModelName(), $this->getExtraDeletePks($params)); } else { $response['deleteSuccess'] = true; } } catch (\Exception $e) { $response['deleteSuccess'] = false; $response['deleteFeedback'] = $e->getMessage(); } $joinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition($model->primaryKey(), 'lt.' . $this->linkModelField(), '=', 't', true, true)->addCondition($this->getRemoteKey(), $params['model_id'], '=', 'lt'); $findParams = $store->getDefaultParams($params)->ignoreAcl()->select('t.*,lt.*'); $findParams->join($linkModel->tableName(), $joinCriteria, 'lt', 'INNER'); $selectedModels = $model->find($findParams); $store->setStatement($selectedModels); $response = array_merge($response, $store->getData()); return $response; }
/** * Load the user_calendar_colors * * @param array $params * @return array */ public function actionLoadColors($params) { $store = \GO\Base\Data\Store::newInstance(\GO\Calendar\Model\Calendar::model()); $findParams = $store->getDefaultParams($params)->join(\GO\Calendar\Model\CalendarUserColor::model()->tableName(), \GO\Base\Db\FindCriteria::newInstance()->addCondition('id', 'col.calendar_id', '=', 't', true, true)->addCondition('user_id', \GO::user()->id, '=', 'col'), 'col', 'LEFT')->order(array('t.name'))->select('col.*,name,id'); $findParams->getCriteria()->addCondition('group_id', 1); $stmt = \GO\Calendar\Model\Calendar::model()->find($findParams); $store->setStatement($stmt); $store->getColumnModel()->setFormatRecordFunction(array($this, 'getCalendarColor')); return $store->getData(); }