コード例 #1
0
ファイル: ObjectImage.php プロジェクト: saiber/www
 public static function deleteByID($className, $id, $foreignKeyName)
 {
     $inst = ActiveRecordModel::getInstanceById($className, $id, ActiveRecordModel::LOAD_DATA);
     $inst->getOwner()->load();
     $inst->deleteImageFiles();
     // check if main image is being deleted
     $owner = $inst->getOwner();
     $owner->load(array(get_class($inst)));
     if ($owner->defaultImage->get()->getID() == $id) {
         // set next image (by position) as the main image
         $f = new ARSelectFilter();
         $cond = new EqualsCond(new ARFieldHandle(get_class($inst), $foreignKeyName), $owner->getID());
         $cond->addAND(new NotEqualsCond(new ARFieldHandle(get_class($inst), 'ID'), $inst->getID()));
         $f->setCondition($cond);
         $f->setOrder(new ARFieldHandle(get_class($inst), 'position'));
         $f->setLimit(1);
         $newDefaultImage = ActiveRecordModel::getRecordSet(get_class($inst), $f);
         if ($newDefaultImage->size() > 0) {
             $owner->defaultImage->set($newDefaultImage->get(0));
             $owner->save();
         }
     }
     ActiveRecordModel::executeUpdate('SET FOREIGN_KEY_CHECKS=0');
     ActiveRecordModel::executeUpdate('UPDATE ' . $className . ' SET ' . $foreignKeyName . '=NULL , protectedFields="|' . $foreignKeyName . '|" WHERE ID=' . $id);
     //return parent::deleteByID($className, $id);
 }
コード例 #2
0
ファイル: ProductRatingType.php プロジェクト: saiber/www
 private function getRatingTypeFilter(Product $product)
 {
     $path = $product->getCategory()->getPathNodeArray(Category::INCLUDE_ROOT_NODE);
     $filter = new ARSelectFilter();
     $filter->setOrder(new ARFieldHandle("Category", "lft"), 'ASC');
     $filter->setOrder(new ARFieldHandle(__CLASS__, "position"), 'ASC');
     $cond = new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $product->getCategory()->getID());
     foreach ($path as $node) {
         $cond->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "categoryID"), $node['ID']));
     }
     $filter->setCondition($cond);
     return $filter;
 }
コード例 #3
0
ファイル: ProductPrice.php プロジェクト: saiber/www
 public static function getInstance(Product $product, Currency $currency)
 {
     $filter = new ARSelectFilter();
     $cond = new EqualsCond(new ARFieldHandle('ProductPrice', 'productID'), $product->getID());
     $cond->addAND(new EqualsCond(new ARFieldHandle('ProductPrice', 'currencyID'), $currency->getID()));
     $filter->setCondition($cond);
     $set = parent::getRecordSet('ProductPrice', $filter);
     if ($set->size() > 0) {
         $instance = $set->get(0);
     } else {
         $instance = self::getNewInstance($product, $currency);
     }
     return $instance;
 }
コード例 #4
0
ファイル: State.php プロジェクト: saiber/livecart
 public static function getStateIDByName($countryCode, $name)
 {
     $f = new ARSelectFilter();
     $f->setCondition(new EqualsCond(new ARFieldHandle('State', 'countryID'), $countryCode));
     $nameCond = new EqualsCond(new ARFieldHandle('State', 'name'), $name);
     $nameCond->addOr(new EqualsCond(new ARFieldHandle('State', 'code'), $name));
     $f->mergeCondition($nameCond);
     $f->setOrder(new ARFieldHandle('State', 'name'));
     $f->setLimit(1);
     $stateArray = ActiveRecordModel::getRecordSetArray('State', $f);
     if ($stateArray) {
         return $stateArray[0]['ID'];
     } else {
         return null;
     }
 }
コード例 #5
0
ファイル: Role.php プロジェクト: saiber/livecart
 public static function addNewRolesNames($roleNames, $deleteOther = false)
 {
     // unset meta- roles
     if ($i = array_search('login', $roleNames)) {
         unset($roleNames[$i]);
     }
     if (!is_array($roleNames) || empty($roleNames)) {
         return;
     }
     $filter = new ARSelectFilter();
     $deleteFilter = new ARDeleteFilter();
     $condition = new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]);
     $deleteCondition = new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleNames[0]);
     foreach ($roleNames as $roleName) {
         $condition->addOR(new EqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName));
         $deleteCondition->addAnd(new NotEqualsCond(new ARFieldHandle(__CLASS__, "name"), $roleName));
     }
     $filter->setCondition($condition);
     $deleteFilter->setCondition($deleteCondition);
     if ($deleteOther) {
         self::deleteRecordSet(__CLASS__, $deleteFilter);
     }
     // Find new roles
     $invertedRoleNames = array_flip($roleNames);
     foreach (self::getRecordSet($filter) as $role) {
         if (isset($invertedRoleNames[$role->name->get()])) {
             unset($invertedRoleNames[$role->name->get()]);
         }
     }
     // Add new roles to database
     foreach ($invertedRoleNames as $role => $value) {
         if (!empty($role)) {
             $newRole = Role::getNewInstance($role);
             $newRole->save();
         }
     }
 }
コード例 #6
0
ファイル: ProductController.php プロジェクト: saiber/www
 private function isRated(Product $product, $isRating = false)
 {
     if (!empty($_COOKIE['rating_' . $product->getID()])) {
         return true;
     }
     if ($isRating) {
         ClassLoader::importNow("application.helper.getDateFromString");
         $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('ProductRating', 'productID'), $product->getID()));
         if (!$this->user->isAnonymous()) {
             $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'userID'), $this->user->getID());
         } else {
             if ($hours = $this->config->get('RATING_SAME_IP_TIME')) {
                 $cond = new EqualsCond(new ARFieldHandle('ProductRating', 'ip'), $this->request->getIPLong());
                 $cond->addAnd(new MoreThanCond(new ARFieldHandle('ProductRating', 'dateCreated'), getDateFromString('-' . $hours . ' hours')));
             }
         }
         if (isset($cond)) {
             $f->mergeCondition($cond);
             return ActiveRecordModel::getRecordCount('ProductRating', $f) > 0;
         }
     }
 }
コード例 #7
0
ファイル: ProductController.php プロジェクト: saiber/www
 public function info()
 {
     ClassLoader::importNow("application.helper.getDateFromString");
     $product = Product::getInstanceById($this->request->get('id'), ActiveRecord::LOAD_DATA, array('DefaultImage' => 'ProductImage', 'Manufacturer', 'Category'));
     $thisMonth = date('m');
     $lastMonth = date('Y-m', strtotime(date('m') . '/15 -1 month'));
     $periods = array('_last_1_h' => "-1 hours | now", '_last_3_h' => "-3 hours | now", '_last_6_h' => "-6 hours | now", '_last_12_h' => "-12 hours | now", '_last_24_h' => "-24 hours | now", '_last_3_d' => "-3 days | now", '_this_week' => "w:Monday | now", '_last_week' => "w:Monday ~ -1 week | w:Monday", '_this_month' => $thisMonth . "/1 | now", '_last_month' => $lastMonth . "-1 | " . $lastMonth . "/1", '_this_year' => "January 1 | now", '_last_year' => "January 1 last year | January 1", '_overall' => "now | now");
     $purchaseStats = array();
     $prevCount = 0;
     foreach ($periods as $key => $period) {
         list($from, $to) = explode(' | ', $period);
         $cond = new EqualsCond(new ARFieldHandle('OrderedItem', 'productID'), $product->getID());
         if ('now' != $from) {
             $cond->addAND(new EqualsOrMoreCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($from)));
         }
         if ('now' != $to) {
             $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), getDateFromString($to)));
         }
         $f = new ARSelectFilter($cond);
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), true));
         $f->removeFieldList();
         $f->addField('SUM(OrderedItem.count)');
         $query = new ARSelectQueryBuilder();
         $query->setFilter($f);
         $query->includeTable('OrderedItem');
         $query->joinTable('CustomerOrder', 'OrderedItem', 'ID', 'customerOrderID');
         if (($count = array_shift(array_shift(ActiveRecordModel::getDataBySql($query->getPreparedStatement(ActiveRecord::getDBConnection()))))) && ($count > $prevCount || '_overall' == $key)) {
             $purchaseStats[$key] = $count;
         }
         if ($count > $prevCount) {
             $prevCount = $count;
         }
     }
     $response = new ActionResponse();
     $response->set('together', $product->getProductsPurchasedTogether(10));
     $response->set('product', $product->toArray());
     $response->set('purchaseStats', $purchaseStats);
     return $response;
 }
コード例 #8
0
 private static function getCategoryCondition(Category $category)
 {
     $own = new EqualsCond(new ARFieldHandle(__CLASS__, 'categoryID'), $category->getID());
     $parent = new EqualsOrLessCond(new ARFieldHandle('Category', 'lft'), $category->lft->get());
     $parent->addAND(new EqualsOrMoreCond(new ARFieldHandle('Category', 'rgt'), $category->rgt->get()));
     $parent->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isSubcategories'), true));
     $own->addOR($parent);
     return $own;
 }
コード例 #9
0
ファイル: Category.php プロジェクト: saiber/www
 /**
  * Crates a select filter for specification fields related to category
  *
  * @param bool $includeParentFields
  * @return ARSelectFilter
  * @todo Order by categories (top-level category fields go first)
  */
 private function getSpecificationFilter($includeParentFields)
 {
     $filter = new ARSelectFilter();
     $filter->setOrder(new ARFieldHandle("SpecFieldGroup", "position"), 'ASC');
     $filter->setOrder(new ARFieldHandle("SpecField", "position"), 'ASC');
     $cond = new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $this->getID());
     if ($includeParentFields) {
         foreach (self::getPathNodeArray(Category::INCLUDE_ROOT_NODE) as $node) {
             $cond->addOR(new EqualsCond(new ARFieldHandle("SpecField", "categoryID"), $node['ID']));
         }
     }
     $filter->setCondition($cond);
     return $filter;
 }
コード例 #10
0
 private function getTypeCondition($type)
 {
     switch ($type) {
         case self::TYPE_ALL:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             break;
         case self::TYPE_CURRENT:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW));
             $cond->addAND($cond2);
             break;
         case self::TYPE_NEW:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond->addAND($cond2);
             break;
         case self::TYPE_PROCESSING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_AWAITING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_SHIPPED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_SHIPPED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_RETURNED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_RETURNED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CANCELLED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), true);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CARTS:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 0);
             break;
         case self::TYPE_RECURRING:
             $cond = new AndChainCondition(array(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1), new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1), new OrChainCondition(array(new MoreThanCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0), new IsNullCond(new ARFieldHandle('CustomerOrder', 'isRecurring'))))));
             break;
         case self::TYPE_RECURRING_ALL:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_EXPIRED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAnd(new EqualsOrLessCond(new ARFieldHandle('CustomerOrder', 'rebillsLeft'), 0));
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_CANCELLED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isCancelled'), 1));
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), 1));
             $cond->addAND(new IsNullCond(new ARFieldHandle('CustomerOrder', 'parentID')));
             break;
         case self::TYPE_RECURRING_WITH_PARENT:
             $parentID = $this->getRequest()->get('parentID');
             if (!$parentID) {
                 $parentID = -1;
             }
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', 'isRecurring'), 1);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', 'parentID'), $parentID));
             break;
         default:
             return;
     }
     $filters = $this->request->get('filters');
     if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED, self::TYPE_RECURRING_CANCELLED))) {
         $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0));
     }
     // $f  = new ARSelectFilter();
     // $f->setCondition($cond);
     // pp($f->createString());
     return $cond;
 }
コード例 #11
0
ファイル: UserGroup.php プロジェクト: saiber/livecart
 private function updateRoles()
 {
     @unlink($this->getRoleCacheFile());
     if (count($this->canceledRoles) > 0) {
         // Delete canceled associations
         $deleteFilter = new ARDeleteFilter();
         $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID());
         $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->canceledRoles)->getID());
         foreach ($this->canceledRoles as $key => $role) {
             if ($role->isExistingRecord()) {
                 $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID()));
             } else {
                 unset($this->canceledRoles[$key]);
             }
         }
         $condition->addAND($roleConditions);
         $deleteFilter->setCondition($condition);
         if (!empty($this->canceledRoles)) {
             AccessControlAssociation::deleteRecordSet('AccessControlAssociation', $deleteFilter);
         }
     }
     if (count($this->appliedRoles) > 0 && is_object(reset($this->appliedRoles))) {
         // adding new associations is a bit trickier
         // First, find all nodes that are already in DB
         // There is no point to apply them
         $appliedRolesFilter = new ARSelectFilter();
         $appliedIDs = array();
         $condition = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "userGroupID"), $this->getID());
         $roleConditions = new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), reset($this->appliedRoles)->getID());
         foreach ($this->appliedRoles as $key => $role) {
             if (is_object($role) && $role->isExistingRecord()) {
                 $roleConditions->addOR(new EqualsCond(new ARFieldHandle('AccessControlAssociation', "roleID"), $role->getID()));
             } else {
                 unset($this->appliedRoles[$key]);
             }
         }
         $condition->addAND($roleConditions);
         $appliedRolesFilter->setCondition($condition);
         // Unset already applied nodes
         foreach (AccessControlAssociation::getRecordSetByUserGroup($this, $appliedRolesFilter, self::LOAD_REFERENCES) as $assoc) {
             unset($this->appliedRoles[$assoc->role->get()->getID()]);
         }
         // Apply roles
         foreach ($this->appliedRoles as $role) {
             $assoc = AccessControlAssociation::getNewInstance($this, $role);
             $assoc->save();
         }
     }
 }
コード例 #12
0
 private function getTypeCondition($type)
 {
     switch ($type) {
         case self::TYPE_ALL:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             break;
         case self::TYPE_CURRENT:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING));
             $cond2->addOR(new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW));
             $cond->addAND($cond2);
             break;
         case self::TYPE_NEW:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1);
             $cond2 = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_NEW);
             // @todo fix NEW status = NULL bug
             $cond2->addOR(new IsNullCond(new ARFieldHandle('CustomerOrder', "status")));
             $cond->addAND($cond2);
             break;
         case self::TYPE_PROCESSING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_PROCESSING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_AWAITING:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_AWAITING);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_SHIPPED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_SHIPPED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_RETURNED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "status"), CustomerOrder::STATUS_RETURNED);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CANCELLED:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), true);
             $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 1));
             break;
         case self::TYPE_CARTS:
             $cond = new EqualsCond(new ARFieldHandle('CustomerOrder', "isFinalized"), 0);
             break;
         default:
             return;
     }
     $filters = $this->request->get('filters');
     if (!in_array($type, array(self::TYPE_CANCELLED, self::TYPE_ALL, self::TYPE_SHIPPED, self::TYPE_RETURNED))) {
         $cond->addAND(new EqualsCond(new ARFieldHandle('CustomerOrder', "isCancelled"), 0));
     }
     return $cond;
 }
コード例 #13
0
ファイル: ActiveRecord.php プロジェクト: saiber/www
 protected final function loadData($loadReferencedRecords, ARSelectQueryBuilder $query)
 {
     $className = get_class($this);
     $PKCond = null;
     foreach ($this->schema->getPrimaryKeyList() as $name => $PK) {
         if ($PK instanceof ARForeignKey) {
             $PKValue = $this->data[$name]->get()->getID();
         } else {
             $PKValue = $this->data[$name]->get();
         }
         if ($PKCond == null) {
             $PKCond = new EqualsCond(new ARFieldHandle($className, $name), $PKValue);
         } else {
             $PKCond->addAND(new EqualsCond(new ARFieldHandle($className, $name), $PKValue));
         }
     }
     $query->getFilter()->mergeCondition($PKCond);
     $rowDataArray = self::fetchDataFromDB($query);
     if (empty($rowDataArray)) {
         throw new ARNotFoundException($className, $this->getID());
     }
     if (count($rowDataArray) > 1) {
         throw new ARException("Unexpected behavior: got more than one record from a database while loading single instance data");
     }
     $parsedRowData = self::prepareDataArray($className, $this->schema, $rowDataArray[0], $loadReferencedRecords);
     $this->createDataAccessVariables($parsedRowData['recordData'], $this->getID());
     if (!empty($parsedRowData['miscData'])) {
         $this->miscRecordDataHandler($parsedRowData['miscData']);
     }
 }
コード例 #14
0
ファイル: ActiveTreeNode.php プロジェクト: saiber/www
 private function getSibling($count = 0, $direction = self::DIRECTION_RIGHT, $loadReferencedRecords = false)
 {
     if (!$this->isLoaded()) {
         $this->load();
     }
     $className = get_class($this);
     $filter = new ARSelectFilter();
     $cond = new EqualsCond(new ARFieldHandle($className, self::PARENT_NODE_FIELD_NAME), $this->getField(self::PARENT_NODE_FIELD_NAME)->get()->getID());
     $cond->addAND(new OperatorCond(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), $this->getField(self::LEFT_NODE_FIELD_NAME)->get(), self::DIRECTION_RIGHT == $direction ? "<" : ">"));
     $filter->setCondition($cond);
     $filter->setOrder(new ArFieldHandle($className, self::LEFT_NODE_FIELD_NAME), self::DIRECTION_RIGHT == $direction ? ARSelectFilter::ORDER_DESC : ARSelectFilter::ORDER_ASC);
     $filter->setLimit(1, $count);
     $recordSet = ActiveRecord::getRecordSet($className, $filter, $loadReferencedRecords);
     foreach ($recordSet as $record) {
         return $record;
     }
     return null;
 }
コード例 #15
0
ファイル: DiscountCondition.php プロジェクト: saiber/livecart
 public static function getInstanceByCoupon($code)
 {
     $c = new EqualsCond(new ARFieldHandle(__CLASS__, 'couponCode'), $code);
     $c->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isEnabled'), 1));
     $set = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($c));
     if ($set->size()) {
         return $set->get(0);
     }
 }
コード例 #16
0
ファイル: User.php プロジェクト: saiber/www
 /**
  * Gets an instance of user by using login information
  *
  * @param string $email
  * @param string $password
  * @return mixed User instance or null if user is not found
  */
 public static function getInstanceByLogin($email, $password)
 {
     $loginCond = new EqualsCond(new ARFieldHandle('User', 'email'), $email);
     //$loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'password'), md5($password)));
     $loginCond->addAND(new EqualsCond(new ARFieldHandle('User', 'isEnabled'), true));
     $recordSet = ActiveRecordModel::getRecordSet(__CLASS__, new ARSelectFilter($loginCond));
     if (!$recordSet->size()) {
         return null;
     } else {
         $user = $recordSet->get(0);
         return $user->isPasswordValid($password) ? $user : null;
     }
 }
コード例 #17
0
 /**
  * Validates specification field form
  *
  * @param array $values List of values to validate.
  * @param array $config
  * @return array List of all errors
  */
 protected function validate($values = array(), $languageCodes)
 {
     $errors = array();
     if (!isset($values['name']) || $values['name'] == '') {
         $errors['name'] = '_error_name_empty';
     }
     if (!isset($values['handle']) || $values['handle'] == '' || preg_match('/[^\\w\\d_.]/', $values['handle'])) {
         $errors['handle'] = '_error_handle_invalid';
     } else {
         $values['ID'] = !isset($values['ID']) ? -1 : $values['ID'];
         $filter = new ARSelectFilter();
         $handleCond = new EqualsCond(new ARFieldHandle($this->getFieldClass(), 'handle'), $values['handle']);
         $handleCond->addAND(new EqualsCond(new ARFieldHandle($this->getFieldClass(), call_user_func(array($this->getFieldClass(), 'getOwnerIDColumnName'))), $values['categoryID']));
         $handleCond->addAND(new NotEqualsCond(new ARFieldHandle($this->getFieldClass(), 'ID'), $values['ID']));
         $filter->setCondition($handleCond);
         if (count(ActiveRecordModel::getRecordSetArray($this->getFieldClass(), $filter)) > 0) {
             $errors['handle'] = '_error_handle_exists';
         }
     }
     if (!isset($values['handle']) || $values['handle'] == '') {
         $errors['handle'] = '_error_handle_empty';
     }
     if (in_array($values['type'], EavFieldCommon::getSelectorValueTypes()) && isset($values['values']) && is_array($values['values'])) {
         $countValues = count($values['values']);
         $i = 0;
         foreach ($values['values'] as $key => $v) {
             $i++;
             if ($countValues == $i && preg_match('/new/', $key) && empty($v[$languageCodes[0]])) {
                 continue;
             } else {
                 if (!strlen($v[$languageCodes[0]])) {
                     $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_empty';
                 } else {
                     if (EavFieldCommon::getDataTypeFromType($values['type']) == 2 && !is_numeric($v[$languageCodes[0]])) {
                         $errors["values[{$key}][{$languageCodes[0]}]"] = '_error_value_is_not_a_number';
                     }
                 }
             }
         }
     }
     return $errors;
 }