From 14713b0ec7ed93ca45578da069ad4e19a7d8addf Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 28 May 2016 19:48:22 -0400 Subject: Rename all models --- app/Model/ActionModel.php | 190 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 app/Model/ActionModel.php (limited to 'app/Model/ActionModel.php') diff --git a/app/Model/ActionModel.php b/app/Model/ActionModel.php new file mode 100644 index 00000000..53393ed5 --- /dev/null +++ b/app/Model/ActionModel.php @@ -0,0 +1,190 @@ +projectPermissionModel->getActiveProjectIds($user_id); + $actions = array(); + + if (! empty($project_ids)) { + $actions = $this->db->table(self::TABLE)->in('project_id', $project_ids)->findAll(); + $params = $this->actionParameterModel->getAllByActions(array_column($actions, 'id')); + $this->attachParamsToActions($actions, $params); + } + + return $actions; + } + + /** + * Return actions and parameters for a given project + * + * @access public + * @param integer $project_id + * @return array + */ + public function getAllByProject($project_id) + { + $actions = $this->db->table(self::TABLE)->eq('project_id', $project_id)->findAll(); + $params = $this->actionParameterModel->getAllByActions(array_column($actions, 'id')); + return $this->attachParamsToActions($actions, $params); + } + + /** + * Return all actions and parameters + * + * @access public + * @return array + */ + public function getAll() + { + $actions = $this->db->table(self::TABLE)->findAll(); + $params = $this->actionParameterModel->getAll(); + return $this->attachParamsToActions($actions, $params); + } + + /** + * Fetch an action + * + * @access public + * @param integer $action_id + * @return array + */ + public function getById($action_id) + { + $action = $this->db->table(self::TABLE)->eq('id', $action_id)->findOne(); + + if (! empty($action)) { + $action['params'] = $this->actionParameterModel->getAllByAction($action_id); + } + + return $action; + } + + /** + * Attach parameters to actions + * + * @access private + * @param array &$actions + * @param array &$params + * @return array + */ + private function attachParamsToActions(array &$actions, array &$params) + { + foreach ($actions as &$action) { + $action['params'] = isset($params[$action['id']]) ? $params[$action['id']] : array(); + } + + return $actions; + } + + /** + * Remove an action + * + * @access public + * @param integer $action_id + * @return bool + */ + public function remove($action_id) + { + return $this->db->table(self::TABLE)->eq('id', $action_id)->remove(); + } + + /** + * Create an action + * + * @access public + * @param array $values Required parameters to save an action + * @return boolean|integer + */ + public function create(array $values) + { + $this->db->startTransaction(); + + $action = array( + 'project_id' => $values['project_id'], + 'event_name' => $values['event_name'], + 'action_name' => $values['action_name'], + ); + + if (! $this->db->table(self::TABLE)->insert($action)) { + $this->db->cancelTransaction(); + return false; + } + + $action_id = $this->db->getLastId(); + + if (! $this->actionParameterModel->create($action_id, $values)) { + $this->db->cancelTransaction(); + return false; + } + + $this->db->closeTransaction(); + + return $action_id; + } + + /** + * Copy actions from a project to another one (skip actions that cannot resolve parameters) + * + * @author Antonio Rabelo + * @param integer $src_project_id Source project id + * @param integer $dst_project_id Destination project id + * @return boolean + */ + public function duplicate($src_project_id, $dst_project_id) + { + $actions = $this->actionModel->getAllByProject($src_project_id); + + foreach ($actions as $action) { + $this->db->startTransaction(); + + $values = array( + 'project_id' => $dst_project_id, + 'event_name' => $action['event_name'], + 'action_name' => $action['action_name'], + ); + + if (! $this->db->table(self::TABLE)->insert($values)) { + $this->db->cancelTransaction(); + continue; + } + + $action_id = $this->db->getLastId(); + + if (! $this->actionParameterModel->duplicateParameters($dst_project_id, $action_id, $action['params'])) { + $this->logger->error('Action::duplicate => skip action '.$action['action_name'].' '.$action['id']); + $this->db->cancelTransaction(); + continue; + } + + $this->db->closeTransaction(); + } + + return true; + } +} -- cgit v1.2.3