|
<?php |
|
|
|
namespace Kanboard\Model; |
|
|
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ActionModel extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
const TABLE = 'actions'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAllByUser($user_id) |
|
{ |
|
$project_ids = $this->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; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAll() |
|
{ |
|
$actions = $this->db->table(self::TABLE)->findAll(); |
|
$params = $this->actionParameterModel->getAll(); |
|
return $this->attachParamsToActions($actions, $params); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getProjectId($action_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $action_id)->findOneColumn('project_id') ?: 0; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private function attachParamsToActions(array &$actions, array &$params) |
|
{ |
|
foreach ($actions as &$action) { |
|
$action['params'] = isset($params[$action['id']]) ? $params[$action['id']] : array(); |
|
} |
|
|
|
return $actions; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function remove($action_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $action_id)->remove(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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; |
|
} |
|
} |
|
|