/**
  * Gets the classes whose objects the user can execute certain action
  *
  * @param $action object - The action that the user should be allowed to do
  * @param $user User - The user that holds de permissions
  * @return Array - an array of class objects
  */
 function &findByPermission($action, $user)
 {
     $classQuery = new Query("Class");
     // Navigate relationships
     $folderClassQuery =& $classQuery->queryRelationedClass("FolderClass");
     $permissionQuery =& $folderClassQuery->queryRelationedClass("Permission");
     $actionQuery =& $permissionQuery->queryRelationedClass("Action", Relationship::ManyToOneType());
     $roleQuery =& $permissionQuery->queryRelationedClass("Role", Relationship::ManyToOneType());
     $roleUserQuery =& $roleQuery->queryRelationedClass("RoleUser");
     $userQuery =& $roleUserQuery->queryRelationedClass("User", Relationship::ManyToOneType());
     // Criterias
     $criteriaGroup = new CriteriaGroup();
     $actionCriteria = new Criteria($actionQuery, "action", $action->getAction());
     $userCriteria = new Criteria($userQuery, "ID", $user->getId());
     $criteriaGroup->addCriterion($actionCriteria);
     $criteriaGroup->addCriterion($userCriteria);
     $classQuery->setCriterion($criteriaGroup);
     // sorting
     $order = new Order($classQuery, "title", "ASC");
     $classQuery->addOrder($order);
     // Execute the query
     $recordset =& $classQuery->execute();
     $array = $this->mapAll($recordset);
     return $array;
 }
示例#2
0
 /**
  * Gets the folders for a user to do certain action.
  *
  * @param $action Action - that the user intends to do
  * @param $user User - the user that tries to get his folders.
  * @return Array - vector of folder objects
  */
 function &findByPermission($action, $user)
 {
     $folderQuery = $this->newQueryObject();
     $folderClassQuery =& $folderQuery->queryRelationedClass("FolderClass");
     $permissionQuery =& $folderClassQuery->queryRelationedClass("Permission");
     $actionQuery =& $permissionQuery->queryRelationedClass("Action", Relationship::ManyToOneType());
     $roleQuery =& $permissionQuery->queryRelationedClass("Role", Relationship::ManyToOneType());
     $roleUserQuery =& $roleQuery->queryRelationedClass("RoleUser");
     $criteriaGroup = new CriteriaGroup();
     $actionCriteria = new Criteria($actionQuery, "action", $action->getAction());
     $criteriaGroup->addCriterion($actionCriteria);
     $userCriteria = new Criteria($roleUserQuery, "userID", $user->getId());
     $criteriaGroup->addCriterion($userCriteria);
     // Set the criterion
     $folderQuery->setCriterion($criteriaGroup);
     // Execute
     return $this->mapAll($folderQuery->execute());
 }
 public function eagerFetching(DbFetcher $oQuery, ObjectMapper $oParentMapper, $sPrefix, $aParams = array(), $aLocalParams = array())
 {
     if (isset($this->aParams['ToModuleAlias'])) {
         Core::import('Modules.' . $this->aParams['ToModuleAlias']);
     }
     $oMapper = Manager::getInstance()->getMapper($this->aParams['ToMapperAlias']);
     //echo '<pre>', print_r($oMapper, true), '</pre>'; die();
     $aContainer = $oMapper->getContainer();
     if ($oMapper) {
         $oParentFields = $oParentMapper->getFields();
         $oQuery->addJoinTable($aContainer['TableName'], $sPrefix . '_' . $this->getAlias(), DbFetcher::JOIN_LEFT, $sPrefix . '.' . $oParentFields->get($this->getField())->getField() . ' = ' . $sPrefix . '_' . $this->getAlias() . '.id');
         $oFields = $oMapper->getFields();
         foreach ($oFields as $alias => $field) {
             if ($field->getType() != 'Object' && $field->getField()) {
                 $oQuery->addSelectField($sPrefix . '_' . $this->getAlias() . '.' . $field->getField(), $sPrefix . '_' . $this->getAlias() . '_' . $field->getField());
             }
         }
         // Условия выборки
         if (isset($aLocalParams['Criteria']) && is_object($aLocalParams['Criteria'])) {
             $oQuery->addCriteria(call_user_func(array($aLocalParams['Criteria'], 'renderWhere')));
         }
         if (isset($aLocalParams['Criteria']) && is_array($aLocalParams['Criteria']) && count($aLocalParams['Criteria']) > 0) {
             $oCriteria = new CriteriaGroup(Criteria::TYPE_AND);
             foreach ($aLocalParams['Criteria'] as $k => $itm) {
                 if (is_object($itm)) {
                     $oCriteria->addElement($itm);
                 } else {
                     if (is_array($itm)) {
                         $oCriteria->addElement(new CriteriaElement($k, $itm['Type'], $itm['Value']));
                     } else {
                         $oCriteria->addElement(new CriteriaElement($k, '=', $itm));
                     }
                 }
             }
             $oQuery->addCriteria($oMapper->parseFindCriteria($oCriteria->renderWhere(), $sPrefix . '_' . $this->getAlias()));
         }
         if (isset($aLocalParams['Criteria']) && is_string($aLocalParams['Criteria'])) {
             $oQuery->addCriteria($oMapper->parseFindCriteria($aLocalParams['Criteria'], $sPrefix . '_' . $this->getAlias()));
         }
         // Сортировка
         if (isset($aLocalParams['Order']) && is_array($aLocalParams['Order']) && count($aLocalParams['Order']) > 0) {
             foreach ($aLocalParams['Order'] as $k => $itm) {
                 $oQuery->addOrder($oMapper->parseFindField($k, $sPrefix . '_' . $this->getAlias()), $itm);
             }
         }
         if (isset($aLocalParams['With']) && is_array($aLocalParams['With']) && count($aLocalParams['With'])) {
             // TODO: Вложенные JOINы
         }
     }
     return $oQuery;
 }
 /**
  * Searches objects by text parameters
  * @param $classId Id of the class
  * @param $text Text to lookup in the objects
  * @param $fullTextSearch if true, the text is searched in all text fields and every coincidence is returned. 
  *				If false, it is only looked up in the title.
  */
 function findByText($classId, $text, $fullTextSearch, $folderId = -1)
 {
     $objectQuery = new Query("Object");
     $criteriaGroup = new CriteriaGroup(CriteriaGroup::getAndSeparator());
     // Lookup by class...
     $criteria = new Criteria($objectQuery, "classID", $classId);
     $criteriaGroup->addCriterion($criteria);
     if ($folderId != -1 && $folderId != null) {
         // Lookup by folder...
         $objectFolderQuery =& $objectQuery->queryRelationedClass("ObjectFolder");
         $folderCriteria = new Criteria($objectFolderQuery, "folderID", $folderId);
         $criteriaGroup->addCriterion($folderCriteria);
     }
     // ... and criterias sent
     if ($fullTextSearch) {
         // by fullTextIndex
         $criteria = new Criteria($objectQuery, "fullTextIndex", $text, Criteria::likeType());
         $criteriaGroup->addCriterion($criteria);
     } else {
         // Issue a query to ObjectAttribute entity
         $objectAttributeQuery =& $objectQuery->queryRelationedClass("ObjectAttribute");
         // Get the class
         $baseClassMapper = new BaseClassMapper();
         $class = $baseClassMapper->get($classId);
         /* @var $class BaseClass */
         // Get the fields that compose the title
         $titleClassAttributesArray = $class->getTitleClassAttributes();
         // We need to query all title fields using the given value with OR (anyone can match)
         $criteriaGroupTitle = new CriteriaGroup(CriteriaGroup::getOrSeparator());
         foreach ($titleClassAttributesArray as $titleClassAttribute) {
             // Must belong to the given class and LIKE the given title
             $criteriaGroupItem = new CriteriaGroup();
             /* @var $titleClassAttribute ClassAttribute */
             $criteriaGroupItem->addCriterion($criteria);
             $criteria = new Criteria($objectAttributeQuery, "classAttributeId", $titleClassAttribute->getId());
             $criteriaGroupItem->addCriterion($criteria);
             $criteria = new Criteria($objectAttributeQuery, "value", $text, Criteria::likeType());
             $criteriaGroupItem->addCriterion($criteria);
             $criteriaGroupTitle->addCriterion($criteriaGroupItem);
         }
         // Set the title criteria
         $criteriaGroup->addCriterion($criteriaGroupTitle);
     }
     $objectQuery->setCriterion($criteriaGroup);
     // Execute the query and map the results
     $objectMapper = new ObjectMapper();
     $rv = $objectMapper->mapAll($objectQuery->execute());
     return $rv;
 }
示例#5
0
$criteria = new Criteria($classQuery, "className", "news");
$query->setCriterion($criteria);
echo "Resulting query: " . $query->getQueryString() . "<br/>";
assert("SELECT DISTINCT ##Object.* FROM ##Object LEFT OUTER JOIN ##Class ON ##Object.ID = ##Class.ObjectID WHERE ##Class.className = 'news'" == $query->getQueryString());
echo "Query with CriteriaGroup instead of only one Criteria<br/>";
$query = new Query("object");
$criteriaGroup = new CriteriaGroup(CriteriaGroup::getAndSeparator());
$criteria = new Criteria($query, "hits", "10", Criteria::lessEqualThanType());
$criteriaGroup->addCriterion($criteria);
$criteria = new Criteria($query, "hits", "1", Criteria::moreEqualThanType());
$criteriaGroup->addCriterion($criteria);
$query->setCriterion($criteriaGroup);
echo "Resulting query: " . $query->getQueryString() . "<br/>";
echo "Query with multiples Criteria Groups and an order<br/>";
$query = new Query("object");
$criteriaGroupRoot = new CriteriaGroup(CriteriaGroup::getAndSeparator());
$criteriaGroupOne = new CriteriaGroup(CriteriaGroup::getAndSeparator());
$criteria = new Criteria($query, "created", "2005-04-15", Criteria::lessThanType());
$criteriaGroupOne->addCriterion($criteria);
$criteriaGroupTwo = new CriteriaGroup(CriteriaGroup::getOrSeparator());
$criteria = new Criteria($query, "updatedBy", "1");
$criteriaGroupTwo->addCriterion($criteria);
$criteria = new Criteria($query, "updatedBy", "2");
$criteriaGroupTwo->addCriterion($criteria);
$criteriaGroupRoot->addCriterion($criteriaGroupOne);
$criteriaGroupRoot->addCriterion($criteriaGroupTwo);
$query->setCriterion($criteriaGroupRoot);
$order = new Order($query, "hits", Order::OrderTypeAsc());
$query->addOrder($order);
echo "Resulting query: " . $query->getQueryString() . "<br/>";
$rs = $query->execute();
示例#6
0
 public function deleteByParams($aParams = array())
 {
     $aContainer = $this->getContainer();
     $sClassName = $this->sModelAlias;
     $oQuery = new DbUpdater(DbUpdater::TYPE_DELETE, $this->tableName(), $sClassName, $this->getDbConnectionAlias());
     // Условия выборки
     if (isset($aParams['Criteria']) && is_object($aParams['Criteria'])) {
         $oQuery->addCriteria($aParams['Criteria']->renderWhere());
     }
     if (isset($aParams['Criteria']) && is_array($aParams['Criteria']) && count($aParams['Criteria']) > 0) {
         $oCriteria = new CriteriaGroup('AND');
         foreach ($aParams['Criteria'] as $k => $itm) {
             if (is_object($itm)) {
                 $oCriteria->addElement($itm);
             } else {
                 if (is_array($itm)) {
                     $oCriteria->addElement(new CriteriaElement($k, $itm['Type'], $itm['Value']));
                 } else {
                     $oCriteria->addElement(new CriteriaElement($k, '=', $itm));
                 }
             }
         }
         $oQuery->addCriteria($this->parseUpdateCriteria($oCriteria->renderWhere()));
     }
     return $oQuery->delete();
 }
 public function eagerFetching(DbFetcher $oQuery, ObjectMapper $oParentMapper, $sPrefix, $aParams = array(), $aLocalParams = array())
 {
     $oMapper = Manager::getInstance()->getMapper($this->aParams['ToMapperAlias']);
     if ($oMapper) {
         $oQuery->addJoinTable($this->aParams['TableName'], $this->getAlias(), DbFetcher::JOIN_LEFT, $sPrefix . '.id' . ' = ' . $this->getAlias() . '.' . $this->aParams['Field2']);
         // Условия выборки
         if (isset($aLocalParams['Criteria']) && is_object($aLocalParams['Criteria'])) {
             $oQuery->addCriteria(call_user_func(array($aLocalParams['Criteria'], 'renderWhere')));
         }
         if (isset($aLocalParams['Criteria']) && is_array($aLocalParams['Criteria']) && count($aLocalParams['Criteria']) > 0) {
             $oCriteria = new CriteriaGroup(Criteria::TYPE_AND);
             foreach ($aLocalParams['Criteria'] as $k => $itm) {
                 if (is_object($itm)) {
                     $oCriteria->addElement($itm);
                 } else {
                     if (is_array($itm)) {
                         $oCriteria->addElement(new CriteriaElement($k, $itm['Type'], $itm['Value']));
                     } else {
                         $oCriteria->addElement(new CriteriaElement($k, '=', $itm));
                     }
                 }
             }
             $oQuery->addCriteria($oMapper->parseFindCriteria($oCriteria->renderWhere(), $sPrefix . '_' . $this->getAlias()));
         }
         if (isset($aLocalParams['Criteria']) && is_string($aLocalParams['Criteria'])) {
             $oQuery->addCriteria($oMapper->parseFindCriteria($aLocalParams['Criteria'], $sPrefix . '_' . $this->getAlias()));
         }
         // Сортировка
         if (isset($aLocalParams['Order']) && is_array($aLocalParams['Order']) && count($aLocalParams['Order']) > 0) {
             foreach ($aLocalParams['Order'] as $k => $itm) {
                 $oQuery->addOrder($oMapper->parseFindField($k, $sPrefix . '_' . $this->getAlias()), $itm);
             }
         }
         if (isset($aLocalParams['With']) && is_array($aLocalParams['With']) && count($aLocalParams['With'])) {
             // TODO: Вложенные JOINы
         }
     }
     return $oQuery;
 }