Exemple #1
0
 /**
  * @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;
 }
Exemple #3
0
    $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);
     }
 }