/** * @param array $where ['equalTo' => ['type', 'single'], 'in' => ['id', [1, 2]], ] * @param null $limit * @param int $offset * @param string $order * @return null|\Zend\Db\ResultSet\ResultSetInterface */ public function getItemsWhere($where = [], $limit = null, $offset = 0, $order = 'id asc') { $select = $this->getSelect()->from($this->getTable()); if ($where) { $whereObj = new \Zend\Db\Sql\Where(); foreach ($where as $key => $params) { if (in_array($key, $this->fields)) { if (is_array($params)) { if ($params) { $whereObj->in($key, $params); } else { // в случае когда передано $service->getItemsWhere(['id => []]); return []; } } else { $whereObj->equalTo($key, $params); } } else { $allowedMethods = ['equalTo', 'notEqualTo', 'lessThan', 'greaterThan', 'lessThanOrEqualTo', 'greaterThanOrEqualTo', 'like', 'notLike', 'expression', 'literal', 'isNull', 'isNotNull', 'in', 'notIn', 'between']; if (!in_array($key, $allowedMethods)) { throw new \Exception("method '" . $key . "' not allowed in where."); } call_user_func_array([$whereObj, $key], $params); } } $select->where($whereObj); } if ($limit !== null) { $select->limit($limit); } if ($offset) { $select->offset($offset); } $select->order($order); return $this->tableGateway->selectWith($select); }
/** * Easily bind role with resources * @return type * Author: Tahmina Khatoon */ public function bindRolesAction() { $request = $this->getRequest(); if ($request->isPost()) { $confirm = ''; $formdata = $request->getPost(); if (!empty($formdata['role_id']) && !empty($formdata['resource_id']) && md5($formdata['role_id'] * $formdata['resource_id']) == $formdata['token']) { $existdata = $this->getRoleResourcesTable()->getRoleResourcesByRoleIdAndResourceId($formdata['role_id'], $formdata['resource_id']); $resourceDetails = $this->getResourcesTable()->getResources($formdata['resource_id']); $resource_name = explode('/', $resourceDetails->name); $group = array('index', 'search'); $formDataAll = array(); if (empty($resource_name[1]) || in_array($resource_name[1], $group)) { $select = new Select(); $where = new \Zend\Db\Sql\Where(); $where->in('name', array($resource_name[0], $resource_name[0] . '/index', $resource_name[0] . '/search')); $select->where($where); $main_resources = $this->getResourcesTable()->fetchAll($select); $total = $main_resources->count(); if ($total > 0) { foreach ($main_resources as $row) { $role_resources = new RoleResources(); $formDataAll[] = array('role_id' => $formdata['role_id'], 'resource_id' => $row->id); } } } else { $formDataAll[] = array('role_id' => $formdata['role_id'], 'resource_id' => $formdata['resource_id']); } if (!empty($formdata['status'])) { foreach ($formDataAll as $data) { $role_resources = new RoleResources(); $role_resources->exchangeArray($data); $confirm = $this->getRoleResourcesTable()->saveRoleResources($role_resources); } } else { foreach ($formDataAll as $data) { $existdata = $this->getRoleResourcesTable()->getRoleResourcesByRoleIdAndResourceId($data['role_id'], $data['resource_id']); if (!empty($existdata)) { $id = $existdata->id; $confirm = $this->getRoleResourcesTable()->deleteRoleResources($id); } } } } $response = new Response(); $response->getHeaders()->addHeaderLine('Content-Type: application/json'); $response->setContent(Json::encode($confirm)); $response->setStatusCode(200); return $response; } else { $select = new Select(); $order_by = $this->params()->fromRoute('order_by') ? $this->params()->fromRoute('order_by') : 'name'; $order = $this->params()->fromRoute('order') ? $this->params()->fromRoute('order') : Select::ORDER_ASCENDING; $select->order($order_by . ' ' . $order); $resources = $this->getResourcesTable()->fetchAll($select); $roles = $this->getRolesTable()->fetchAll(); $primaryResources = $this->formetArray($this->getResourcesTable()->getPrimaryResources(), 'id'); $roleResources = array(); if (!empty($roles)) { foreach ($roles as $role) { $roleResources[$role->id] = $this->formetArray($this->getRoleResourcesTable()->getResourcesBasedOnRole($role->id), 'resource_id'); } } $this->vm->setVariables(array('resources' => $resources, 'roles' => $roles, 'roleResources' => $roleResources, 'primaryResources' => $primaryResources, 'order_by' => $order_by, 'order' => $order, 'pageAction' => 'resources/bind_roles')); } return $this->vm; }
$rows = array_key_exists('rows', $requestPayload) ? $requestPayload['rows'] : false; if (!is_array($rows) || count($rows) <= 0) { throw new Exception(__t('rows_no_specified')); } $TableGateway = new TableGateway($acl, $table, $ZendDb); $primaryKeyFieldName = $TableGateway->primaryKeyFieldName; $rowIds = []; foreach ($rows as $row) { if (!array_key_exists($primaryKeyFieldName, $row)) { throw new Exception(__t('row_without_primary_key_field')); } array_push($rowIds, $row[$primaryKeyFieldName]); } $where = new \Zend\Db\Sql\Where(); if ($app->request()->isDelete()) { $TableGateway->delete($where->in($primaryKeyFieldName, $rowIds)); } else { foreach ($rows as $row) { $TableGateway->updateCollection($row); } } $entries = $TableGateway->getEntries($params); JsonView::render($entries); })->via('POST', 'PATCH', 'PUT', 'DELETE'); $app->get("/{$v}/tables/:table/typeahead/?", function ($table, $query = null) use($ZendDb, $acl, $params, $app) { $Table = new TableGateway($acl, $table, $ZendDb); if (!isset($params['columns'])) { $params['columns'] = ''; } $columns = $params['columns'] ? explode(',', $params['columns']) : []; if (count($columns) > 0) {
/** * Update package assignments * * Sets a new package on existing assignments. Updated assignments have * their status reset to "not notified" and their options (force, schedule, * post cmd) removed. * * @param integer $oldPackageId package to be replaced * @param integer $newPackageId new package * @param bool $deployNonnotified Update assignments with status 'not notified' * @param bool $deploySuccess Update assignments with status 'success' * @param bool $deployNotified Update assignments with status 'notified' * @param bool $deployError Update assignments with status 'error' * @param bool $deployGroups Update assignments for groups * @throws RuntimeException if an error occurs */ public function updateAssignments($oldPackageId, $newPackageId, $deployNonnotified, $deploySuccess, $deployNotified, $deployError, $deployGroups) { if (!($deployNonnotified or $deploySuccess or $deployNotified or $deployError or $deployGroups)) { return; // nothing to do } $clientConfig = $this->_serviceManager->get('Database\\Table\\ClientConfig'); $groupInfo = $this->_serviceManager->get('Database\\Table\\GroupInfo'); $where = new \Zend\Db\Sql\Where(); $where->equalTo('ivalue', $oldPackageId); // Additional filters are only necessary if not all conditions are set if (!($deployNonnotified and $deploySuccess and $deployNotified and $deployError and $deployGroups)) { $groups = $groupInfo->getSql()->select()->columns(array('hardware_id')); $filters = new \Zend\Db\Sql\Where(null, \Zend\Db\Sql\Where::COMBINED_BY_OR); if ($deployNonnotified) { $filters->isNull('tvalue')->and->notIn('hardware_id', $groups); } if ($deploySuccess) { $filters->equalTo('tvalue', \Model\Package\Assignment::SUCCESS); } if ($deployNotified) { $filters->equalTo('tvalue', \Model\Package\Assignment::NOTIFIED); } if ($deployError) { $filters->like('tvalue', \Model\Package\Assignment::ERROR_PREFIX . '%'); } if ($deployGroups) { $filters->in('hardware_id', $groups); } $where->addPredicate($filters); } $now = $this->_serviceManager->get('Library\\Now')->format(\Model\Package\Assignment::DATEFORMAT); try { // Remove DOWNLOAD_* options from updated assignments $subquery = $clientConfig->getSql()->select()->columns(array('hardware_id'))->where(array('name' => 'DOWNLOAD', $where)); $delete = new \Zend\Db\Sql\Where(); $delete->equalTo('ivalue', $oldPackageId)->in('hardware_id', $subquery)->notEqualTo('name', 'DOWNLOAD_SWITCH')->like('name', 'DOWNLOAD_%'); $clientConfig->delete($delete); // Update package ID and reset status $clientConfig->update(array('ivalue' => $newPackageId, 'tvalue' => \Model\Package\Assignment::NOT_NOTIFIED, 'comments' => $now), array('name' => 'DOWNLOAD', $where)); } catch (\Exception $e) { throw new RuntimeException($e->getMessage(), (int) $e->getCode(), $e); } }
/** * Retourne le predicate correspondant a la spé désiré. * @param type $iSpe */ function getPredicateSpe($iSpe = -1) { $predicateSpe = new \Zend\Db\Sql\Where(); switch ($iSpe) { //spé 1 case 0: $predicateSpe->equalTo("ipr.valeur", 0.0); break; //spé 2 //spé 2 case 1: $predicateSpe->equalTo("ipr.valeur", 1.0); break; //spé 3 //spé 3 case 2: $predicateSpe->equalTo("ipr.valeur", 2.0); break; //spé 4 //spé 4 case 3: $predicateSpe->equalTo("ipr.valeur", 3.0); break; default: $predicateSpe->in("ipr.valeur", array(0.0, 1.0, 2.0, 3.0)); break; } return $predicateSpe; }
/** * Update package assignments * * Sets a new package on existing assignments. Updated assignments have * their status reset to "pending" and their options (force, schedule, * post cmd) removed. * * @param integer $oldPackageId package to be replaced * @param integer $newPackageId new package * @param bool $deployPending Update assignments with status 'pending' * @param bool $deployRunning Update assignments with status 'running' * @param bool $deploySuccess Update assignments with status 'success' * @param bool $deployError Update assignments with status 'error' * @param bool $deployGroups Update assignments for groups * @throws RuntimeException if an error occurs */ public function updateAssignments($oldPackageId, $newPackageId, $deployPending, $deployRunning, $deploySuccess, $deployError, $deployGroups) { if (!($deployPending or $deployRunning or $deploySuccess or $deployError or $deployGroups)) { return; // nothing to do } $clientConfig = $this->_serviceManager->get('Database\\Table\\ClientConfig'); $groupInfo = $this->_serviceManager->get('Database\\Table\\GroupInfo'); $where = new \Zend\Db\Sql\Where(); $where->equalTo('ivalue', $oldPackageId); $where->equalTo('name', 'DOWNLOAD'); // Additional filters are only necessary if not all conditions are set if (!($deployPending and $deployRunning and $deploySuccess and $deployError and $deployGroups)) { $groups = $groupInfo->getSql()->select()->columns(array('hardware_id')); $filters = new \Zend\Db\Sql\Where(null, \Zend\Db\Sql\Where::COMBINED_BY_OR); if ($deployPending) { $filters->isNull('tvalue')->and->notIn('hardware_id', $groups); } if ($deployRunning) { $filters->equalTo('tvalue', \Model\Package\Assignment::RUNNING); } if ($deploySuccess) { $filters->equalTo('tvalue', \Model\Package\Assignment::SUCCESS); } if ($deployError) { $filters->like('tvalue', \Model\Package\Assignment::ERROR_PREFIX . '%'); } if ($deployGroups) { $filters->in('hardware_id', $groups); } $where->addPredicate($filters); } $now = $this->_serviceManager->get('Library\\Now')->format(\Model\Package\Assignment::DATEFORMAT); try { // Remove DOWNLOAD_* options from updated assignments $subquery = $clientConfig->getSql()->select()->columns(array('hardware_id'))->where($where); // @codeCoverageIgnoreStart if ($clientConfig->getAdapter()->getPlatform()->getName() == 'MySQL') { // MySQL does not allow subquery on the same table for DELETE // statements. Fetch result as a list instead. $subquery = array_column($clientConfig->selectWith($subquery)->toArray(), 'hardware_id'); } // @codeCoverageIgnoreEnd if ($subquery) { // $subquery is either an SQL statement or a non-empty array. $delete = new \Zend\Db\Sql\Where(); $delete->equalTo('ivalue', $oldPackageId)->notEqualTo('name', 'DOWNLOAD_SWITCH')->in('hardware_id', $subquery)->like('name', 'DOWNLOAD_%'); $clientConfig->delete($delete); } // Update package ID and reset status $clientConfig->update(array('ivalue' => $newPackageId, 'tvalue' => \Model\Package\Assignment::PENDING, 'comments' => $now), $where); } catch (\Exception $e) { throw new RuntimeException($e->getMessage(), (int) $e->getCode(), $e); } }