示例#1
0
文件: Hook.php 项目: margery/thelia
 /**
  * Performs the work of inserting or updating the row in the database.
  *
  * If the object is new, it inserts it; otherwise an update is performed.
  * All related objects are also updated in this method.
  *
  * @param      ConnectionInterface $con
  * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
  * @throws PropelException
  * @see save()
  */
 protected function doSave(ConnectionInterface $con)
 {
     $affectedRows = 0;
     // initialize var to track total num of affected rows
     if (!$this->alreadyInSave) {
         $this->alreadyInSave = true;
         if ($this->isNew() || $this->isModified()) {
             // persist changes
             if ($this->isNew()) {
                 $this->doInsert($con);
             } else {
                 $this->doUpdate($con);
             }
             $affectedRows += 1;
             $this->resetModified();
         }
         if ($this->modulesScheduledForDeletion !== null) {
             if (!$this->modulesScheduledForDeletion->isEmpty()) {
                 $pks = array();
                 $pk = $this->getPrimaryKey();
                 foreach ($this->modulesScheduledForDeletion->getPrimaryKeys(false) as $remotePk) {
                     $pks[] = array($remotePk, $pk);
                 }
                 IgnoredModuleHookQuery::create()->filterByPrimaryKeys($pks)->delete($con);
                 $this->modulesScheduledForDeletion = null;
             }
             foreach ($this->getModules() as $module) {
                 if ($module->isModified()) {
                     $module->save($con);
                 }
             }
         } elseif ($this->collModules) {
             foreach ($this->collModules as $module) {
                 if ($module->isModified()) {
                     $module->save($con);
                 }
             }
         }
         if ($this->moduleHooksScheduledForDeletion !== null) {
             if (!$this->moduleHooksScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ModuleHookQuery::create()->filterByPrimaryKeys($this->moduleHooksScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->moduleHooksScheduledForDeletion = null;
             }
         }
         if ($this->collModuleHooks !== null) {
             foreach ($this->collModuleHooks as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->ignoredModuleHooksScheduledForDeletion !== null) {
             if (!$this->ignoredModuleHooksScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\IgnoredModuleHookQuery::create()->filterByPrimaryKeys($this->ignoredModuleHooksScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->ignoredModuleHooksScheduledForDeletion = null;
             }
         }
         if ($this->collIgnoredModuleHooks !== null) {
             foreach ($this->collIgnoredModuleHooks as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->hookI18nsScheduledForDeletion !== null) {
             if (!$this->hookI18nsScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\HookI18nQuery::create()->filterByPrimaryKeys($this->hookI18nsScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->hookI18nsScheduledForDeletion = null;
             }
         }
         if ($this->collHookI18ns !== null) {
             foreach ($this->collHookI18ns as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         $this->alreadyInSave = false;
     }
     return $affectedRows;
 }
 /**
  * Create a new hook if the hook definition is valid.
  *
  * @param string               $class  the namespace of the class
  * @param \Thelia\Model\Module $module the module
  * @param string               $id     the service (hook) id
  * @param array                $attributes  the hook attributes
  *
  * @throws \InvalidArgumentException
  */
 protected function registerHook($class, $module, $id, $attributes)
 {
     if (!isset($attributes['event'])) {
         throw new \InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "hook.event_listener" tags.', $id));
     }
     $active = isset($attributes['active']) ? intval($attributes['active']) : 1;
     $attributes['active'] = 1 === $active;
     $attributes['templates'] = isset($attributes['templates']) ? strval($attributes['templates']) : '';
     $attributes['type'] = isset($attributes['type']) ? $this->getHookType($attributes['type']) : TemplateDefinition::FRONT_OFFICE;
     if (null === ($hook = $this->getHook($attributes['event'], $attributes['type']))) {
         return;
     }
     $attributes = $this->getMethodName($attributes);
     // test if method exists
     $validMethod = true;
     if (!$this->isValidHookMethod($class, $attributes['method'], $hook->getBlock())) {
         $validMethod = false;
     }
     // test if hook is already registered in ModuleHook
     $moduleHook = ModuleHookQuery::create()->filterByModuleId($module->getId())->filterByHook($hook)->filterByMethod($attributes['method'])->findOne();
     if (null === $moduleHook) {
         if (!$validMethod) {
             Tlog::getInstance()->addAlert(sprintf("Module [%s] could not be registered hook [%s], method [%s] is not reachable.", $module->getCode(), $attributes['event'], $attributes['method']));
             return;
         }
         // Assign the module to the hook only if it has not been "deleted"
         $ignoreCount = IgnoredModuleHookQuery::create()->filterByHook($hook)->filterByModuleId($module->getId())->count();
         if (0 === $ignoreCount) {
             // hook for module doesn't exist, we add it with default registered values
             $moduleHook = new ModuleHook();
             $moduleHook->setHook($hook)->setModuleId($module->getId())->setClassname($id)->setMethod($attributes['method'])->setActive($active)->setHookActive(true)->setModuleActive(true)->setPosition(ModuleHook::MAX_POSITION);
             if (isset($attributes['templates'])) {
                 $moduleHook->setTemplates($attributes['templates']);
             }
             $moduleHook->save();
         }
     } else {
         if (!$validMethod) {
             Tlog::getInstance()->addAlert(sprintf("Module [%s] could not use hook [%s], method [%s] is not reachable anymore.", $module->getCode(), $attributes['event'], $attributes['method']));
             $moduleHook->setHookActive(false)->save();
         } else {
             //$moduleHook->setTemplates($attributes['templates']);
             // Update hook if id was changed in the definition
             if ($moduleHook->getClassname() != $id) {
                 $moduleHook->setClassname($id);
             }
             $moduleHook->save();
         }
     }
 }
示例#3
0
文件: Module.php 项目: zorn-v/thelia
 /**
  * Performs the work of inserting or updating the row in the database.
  *
  * If the object is new, it inserts it; otherwise an update is performed.
  * All related objects are also updated in this method.
  *
  * @param      ConnectionInterface $con
  * @return int             The number of rows affected by this insert/update and any referring fk objects' save() operations.
  * @throws PropelException
  * @see save()
  */
 protected function doSave(ConnectionInterface $con)
 {
     $affectedRows = 0;
     // initialize var to track total num of affected rows
     if (!$this->alreadyInSave) {
         $this->alreadyInSave = true;
         if ($this->isNew() || $this->isModified()) {
             // persist changes
             if ($this->isNew()) {
                 $this->doInsert($con);
             } else {
                 $this->doUpdate($con);
             }
             $affectedRows += 1;
             $this->resetModified();
         }
         if ($this->couponsScheduledForDeletion !== null) {
             if (!$this->couponsScheduledForDeletion->isEmpty()) {
                 $pks = array();
                 $pk = $this->getPrimaryKey();
                 foreach ($this->couponsScheduledForDeletion->getPrimaryKeys(false) as $remotePk) {
                     $pks[] = array($remotePk, $pk);
                 }
                 CouponModuleQuery::create()->filterByPrimaryKeys($pks)->delete($con);
                 $this->couponsScheduledForDeletion = null;
             }
             foreach ($this->getCoupons() as $coupon) {
                 if ($coupon->isModified()) {
                     $coupon->save($con);
                 }
             }
         } elseif ($this->collCoupons) {
             foreach ($this->collCoupons as $coupon) {
                 if ($coupon->isModified()) {
                     $coupon->save($con);
                 }
             }
         }
         if ($this->orderCouponsScheduledForDeletion !== null) {
             if (!$this->orderCouponsScheduledForDeletion->isEmpty()) {
                 $pks = array();
                 $pk = $this->getPrimaryKey();
                 foreach ($this->orderCouponsScheduledForDeletion->getPrimaryKeys(false) as $remotePk) {
                     $pks[] = array($remotePk, $pk);
                 }
                 OrderCouponModuleQuery::create()->filterByPrimaryKeys($pks)->delete($con);
                 $this->orderCouponsScheduledForDeletion = null;
             }
             foreach ($this->getOrderCoupons() as $orderCoupon) {
                 if ($orderCoupon->isModified()) {
                     $orderCoupon->save($con);
                 }
             }
         } elseif ($this->collOrderCoupons) {
             foreach ($this->collOrderCoupons as $orderCoupon) {
                 if ($orderCoupon->isModified()) {
                     $orderCoupon->save($con);
                 }
             }
         }
         if ($this->hooksScheduledForDeletion !== null) {
             if (!$this->hooksScheduledForDeletion->isEmpty()) {
                 $pks = array();
                 $pk = $this->getPrimaryKey();
                 foreach ($this->hooksScheduledForDeletion->getPrimaryKeys(false) as $remotePk) {
                     $pks[] = array($pk, $remotePk);
                 }
                 IgnoredModuleHookQuery::create()->filterByPrimaryKeys($pks)->delete($con);
                 $this->hooksScheduledForDeletion = null;
             }
             foreach ($this->getHooks() as $hook) {
                 if ($hook->isModified()) {
                     $hook->save($con);
                 }
             }
         } elseif ($this->collHooks) {
             foreach ($this->collHooks as $hook) {
                 if ($hook->isModified()) {
                     $hook->save($con);
                 }
             }
         }
         if ($this->ordersRelatedByPaymentModuleIdScheduledForDeletion !== null) {
             if (!$this->ordersRelatedByPaymentModuleIdScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\OrderQuery::create()->filterByPrimaryKeys($this->ordersRelatedByPaymentModuleIdScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->ordersRelatedByPaymentModuleIdScheduledForDeletion = null;
             }
         }
         if ($this->collOrdersRelatedByPaymentModuleId !== null) {
             foreach ($this->collOrdersRelatedByPaymentModuleId as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->ordersRelatedByDeliveryModuleIdScheduledForDeletion !== null) {
             if (!$this->ordersRelatedByDeliveryModuleIdScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\OrderQuery::create()->filterByPrimaryKeys($this->ordersRelatedByDeliveryModuleIdScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->ordersRelatedByDeliveryModuleIdScheduledForDeletion = null;
             }
         }
         if ($this->collOrdersRelatedByDeliveryModuleId !== null) {
             foreach ($this->collOrdersRelatedByDeliveryModuleId as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->areaDeliveryModulesScheduledForDeletion !== null) {
             if (!$this->areaDeliveryModulesScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\AreaDeliveryModuleQuery::create()->filterByPrimaryKeys($this->areaDeliveryModulesScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->areaDeliveryModulesScheduledForDeletion = null;
             }
         }
         if ($this->collAreaDeliveryModules !== null) {
             foreach ($this->collAreaDeliveryModules as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->profileModulesScheduledForDeletion !== null) {
             if (!$this->profileModulesScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ProfileModuleQuery::create()->filterByPrimaryKeys($this->profileModulesScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->profileModulesScheduledForDeletion = null;
             }
         }
         if ($this->collProfileModules !== null) {
             foreach ($this->collProfileModules as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->moduleImagesScheduledForDeletion !== null) {
             if (!$this->moduleImagesScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ModuleImageQuery::create()->filterByPrimaryKeys($this->moduleImagesScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->moduleImagesScheduledForDeletion = null;
             }
         }
         if ($this->collModuleImages !== null) {
             foreach ($this->collModuleImages as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->couponModulesScheduledForDeletion !== null) {
             if (!$this->couponModulesScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\CouponModuleQuery::create()->filterByPrimaryKeys($this->couponModulesScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->couponModulesScheduledForDeletion = null;
             }
         }
         if ($this->collCouponModules !== null) {
             foreach ($this->collCouponModules as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->orderCouponModulesScheduledForDeletion !== null) {
             if (!$this->orderCouponModulesScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\OrderCouponModuleQuery::create()->filterByPrimaryKeys($this->orderCouponModulesScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->orderCouponModulesScheduledForDeletion = null;
             }
         }
         if ($this->collOrderCouponModules !== null) {
             foreach ($this->collOrderCouponModules as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->moduleHooksScheduledForDeletion !== null) {
             if (!$this->moduleHooksScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ModuleHookQuery::create()->filterByPrimaryKeys($this->moduleHooksScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->moduleHooksScheduledForDeletion = null;
             }
         }
         if ($this->collModuleHooks !== null) {
             foreach ($this->collModuleHooks as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->moduleConfigsScheduledForDeletion !== null) {
             if (!$this->moduleConfigsScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ModuleConfigQuery::create()->filterByPrimaryKeys($this->moduleConfigsScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->moduleConfigsScheduledForDeletion = null;
             }
         }
         if ($this->collModuleConfigs !== null) {
             foreach ($this->collModuleConfigs as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->ignoredModuleHooksScheduledForDeletion !== null) {
             if (!$this->ignoredModuleHooksScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\IgnoredModuleHookQuery::create()->filterByPrimaryKeys($this->ignoredModuleHooksScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->ignoredModuleHooksScheduledForDeletion = null;
             }
         }
         if ($this->collIgnoredModuleHooks !== null) {
             foreach ($this->collIgnoredModuleHooks as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         if ($this->moduleI18nsScheduledForDeletion !== null) {
             if (!$this->moduleI18nsScheduledForDeletion->isEmpty()) {
                 \Thelia\Model\ModuleI18nQuery::create()->filterByPrimaryKeys($this->moduleI18nsScheduledForDeletion->getPrimaryKeys(false))->delete($con);
                 $this->moduleI18nsScheduledForDeletion = null;
             }
         }
         if ($this->collModuleI18ns !== null) {
             foreach ($this->collModuleI18ns as $referrerFK) {
                 if (!$referrerFK->isDeleted() && ($referrerFK->isNew() || $referrerFK->isModified())) {
                     $affectedRows += $referrerFK->save($con);
                 }
             }
         }
         $this->alreadyInSave = false;
     }
     return $affectedRows;
 }
 /**
  * Create a new hook if the hook definition is valid.
  *
  * @param string               $class  the namespace of the class
  * @param \Thelia\Model\Module $module the module
  * @param string               $id     the service (hook) id
  * @param array                $event  the event attributes
  *
  * @throws \InvalidArgumentException
  */
 protected function registerHook($class, $module, $id, $event)
 {
     $active = isset($event['active']) ? intval($event['active']) : 1;
     $active = 1 === $active;
     if (!isset($event['event'])) {
         throw new \InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "hook.event_listener" tags.', $id));
     }
     $type = isset($event['type']) ? $this->getHookType($event['type']) : TemplateDefinition::FRONT_OFFICE;
     $hook = HookQuery::create()->filterByCode($event['event'])->filterByType($type)->findOne();
     if (null === $hook) {
         Tlog::getInstance()->addAlert(sprintf("Hook %s is unknown.", $event['event']));
         return;
     }
     if (!$hook->getActivate()) {
         Tlog::getInstance()->addAlert(sprintf("Hook %s is not activated.", $event['event']));
         return;
     }
     if (!isset($event['method'])) {
         $callback = function ($matches) {
             return strtoupper($matches[0]);
         };
         $event['method'] = 'on' . preg_replace_callback(array('/(?<=\\b)[a-z]/i', '/[^a-z0-9]/i'), $callback, $event['event']);
         $event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']);
     }
     // test if method exists
     if (!$this->isValidHookMethod($class, $event['method'], $hook->getBlock())) {
         return;
     }
     // test if hook is already registered in ModuleHook
     $moduleHook = ModuleHookQuery::create()->filterByModuleId($module)->filterByHook($hook)->filterByMethod($event['method'])->findOne();
     if (null === $moduleHook) {
         // Assign the module to the hook only if it has not been "deleted"
         $ignoreCount = IgnoredModuleHookQuery::create()->filterByHook($hook)->filterByModuleId($module)->count();
         if (0 === $ignoreCount) {
             // hook for module doesn't exist, we add it with default registered values
             $moduleHook = new ModuleHook();
             $moduleHook->setHook($hook)->setModuleId($module)->setClassname($id)->setMethod($event['method'])->setActive($active)->setHookActive(true)->setModuleActive(true)->setPosition(ModuleHook::MAX_POSITION)->save();
         }
     } else {
         // Update hook if id was changed in the definition
         if ($moduleHook->getClassname() != $id) {
             $moduleHook->setClassname($id)->save();
         }
     }
 }
示例#5
0
 public function createModuleHook(ModuleHookCreateEvent $event)
 {
     $moduleHook = new ModuleHookModel();
     // todo: test if classname and method exists
     $moduleHook->setModuleId($event->getModuleId())->setHookId($event->getHookId())->setActive(false)->setClassname($event->getClassname())->setMethod($event->getMethod())->setModuleActive($this->isModuleActive($event->getModuleId()))->setHookActive($this->isHookActive($event->getHookId()))->setPosition($this->getLastPositionInHook($event->getHookId()))->setTemplates($event->getTemplates())->save();
     // Be sure to delete this module hook from the ignored module hook table
     IgnoredModuleHookQuery::create()->filterByHookId($event->getHookId())->filterByModuleId($event->getModuleId())->delete();
     $event->setModuleHook($moduleHook);
 }