, Paweł Byszewski */ /** * Akcje grupy produktów. * * @package stGiftGroup * @author Marcin Butlak */ class stGiftGroupActions extends autoStGiftGroupActions { public function executeProductAddGroup() { stAuthUsersListener::checkModificationCredentials($this, $this->getRequest(), $this->getModuleName()); $ids = $this->getRequestParameter('product[selected]', array($this->getRequestParameter('id'))); $related_id = $this->getRequestParameter('forward_parameters[product_group_id]'); $pids = $this->getAffectedProducts($ids, $related_id); $new = array(); foreach ($ids as $id) { if (in_array($id, $pids)) { continue; } $product_group_has_product = new ProductGroupHasProduct(); $product_group_has_product->setProductGroupId($related_id); $product_group_has_product->setProductId($id); $product_group_has_product->save(); $new[] = $id; } if ($new) { $this->updateProducts($new, true); } $this->redirect($this->getRequest()->getReferer()); } public function executeProductRemoveGroup() { stAuthUsersListener::checkModificationCredentials($this, $this->getRequest(), $this->getModuleName()); $ids = $this->getRequestParameter('product[selected]', array($this->getRequestParameter('id'))); $related_id = $this->getRequestParameter('forward_parameters[product_group_id]'); $ids = $this->getAffectedProducts($ids, $related_id); if ($ids) { $con = Propel::getConnection(); $c = new Criteria(); $c->add(ProductGroupHasProductPeer::PRODUCT_GROUP_ID, $related_id); $c->add(ProductGroupHasProductPeer::PRODUCT_ID, $ids, Criteria::IN); BasePeer::doDelete($c, $con); $this->updateProducts($ids, false); } $this->redirect($this->getRequest()->getReferer()); } public function addProductFiltersCriteria($c) { parent::addProductFiltersCriteria($c); if (isset($this->filters['list_image']) && $this->filters['list_image'] !== '') { $c->add(ProductPeer::OPT_IMAGE, null, $this->filters['list_image'] ? Criteria::ISNOTNULL : Criteria::ISNULL); } if (isset($this->filters['list_assigned']) && $this->filters['list_assigned'] !== '') { $c->addJoin(ProductPeer::ID, sprintf("%s AND %s = %d", ProductGroupHasProductPeer::PRODUCT_ID, ProductGroupHasProductPeer::PRODUCT_GROUP_ID, $this->forward_parameters['product_group_id']), Criteria::LEFT_JOIN); if ($this->filters['list_assigned']) { $c->add(ProductGroupHasProductPeer::ID, null, Criteria::ISNOTNULL); } else { $c->add(ProductGroupHasProductPeer::ID, null, Criteria::ISNULL); } } $c->add(ProductPeer::OPT_HAS_OPTIONS, 1, Criteria::LESS_EQUAL); } protected function addFiltersCriteria($c) { $c->add(ProductGroupPeer::FROM_BASKET_VALUE, null, Criteria::ISNOTNULL); parent::addFiltersCriteria($c); } protected function updateProducts($ids, $is_gift) { $con = Propel::getConnection(); if ($is_gift) { $sql = 'UPDATE %1$s SET %2$s = %2$s + 1 WHERE %3$s IN ('.implode(',', $ids).')'; } else { $sql = 'UPDATE %1$s SET %2$s = %2$s - 1 WHERE %3$s IN ('.implode(',', $ids).')'; } $st = $con->prepareStatement(sprintf($sql, ProductPeer::TABLE_NAME, ProductPeer::IS_GIFT, ProductPeer::ID )); $st->executeUpdate(); } protected function getAffectedProducts($ids, $related_id) { $c = new Criteria(); $c->addSelectColumn(ProductGroupHasProductPeer::PRODUCT_ID); $c->add(ProductGroupHasProductPeer::PRODUCT_GROUP_ID, $related_id); $c->add(ProductGroupHasProductPeer::PRODUCT_ID, array_values($ids), Criteria::IN); // throw new Exception('tes32!'); $rs = ProductGroupHasProductPeer::doSelectRs($c); $pids = array(); while($rs->next()) { $row = $rs->getRow(); $pids[] = $row[0]; } return $pids; } }