protected function compile()
 {
     $this->Template->formId = $this->strFormId;
     $arrFieldDcas = array('email' => array('label' => &$GLOBALS['TL_LANG']['tl_module']['email'], 'inputType' => 'text', 'eval' => array('rgxp' => 'email', 'mandatory' => true)), 'submit' => array('inputType' => 'submit', 'label' => &$GLOBALS['TL_LANG']['MSC']['cancel']));
     $arrWidgets = array();
     foreach ($arrFieldDcas as $strName => $arrData) {
         if ($strClass = $GLOBALS['TL_FFL'][$arrData['inputType']]) {
             $arrWidgets[] = new $strClass(\Widget::getAttributesFromDca($arrData, $strName));
         }
     }
     if (\Input::post('FORM_SUBMIT') == $this->strFormId) {
         // validate
         foreach ($arrWidgets as $objWidget) {
             $objWidget->validate();
             if ($objWidget->hasErrors()) {
                 $this->blnDoNotSubmit = true;
             }
         }
         if (!$this->blnDoNotSubmit) {
             // cancel subscription
             $strEmail = \Input::post('email');
             $arrArchives = deserialize($this->iso_cancellationArchives, true);
             $blnNoSuccess = false;
             foreach ($arrArchives as $intArchive) {
                 if (($objSubscription = Subscription::findBy(array('email=?', 'pid=?'), array($strEmail, $intArchive))) === null) {
                     if (count($arrArchives) == 1) {
                         $this->Template->error = sprintf($GLOBALS['TL_LANG']['MSC']['iso_subscriptionDoesNotExist'], $strEmail, SubscriptionArchive::findByPk($intArchive)->title);
                         $blnNoSuccess = true;
                     }
                     break;
                 }
                 $objSubscription->delete();
             }
             if (!$blnNoSuccess) {
                 // success message
                 if (count($arrArchives) > 1) {
                     $this->Template->success = $GLOBALS['TL_LANG']['MSC']['iso_subscriptionsCancelledSuccessfully'];
                 } else {
                     $this->Template->success = sprintf($GLOBALS['TL_LANG']['MSC']['iso_subscriptionCancelledSuccessfully'], $strEmail, SubscriptionArchive::findByPk($arrArchives[0])->title);
                 }
                 // redirect
                 if ($this->jumpTo && ($objPageRedirect = \PageModel::findByPk($this->jumpTo)) !== null) {
                     \Controller::redirect(\Controller::generateFrontendUrl($objPageRedirect->row()));
                 }
             }
         }
     }
     // parse (validated) widgets
     $this->Template->fields = implode('', array_map(function ($objWidget) {
         return $objWidget->parse();
     }, $arrWidgets));
 }
 public static function checkForExistingSubscription(Order $objOrder, $objModule)
 {
     $strEmail = $objOrder->getBillingAddress()->email;
     $arrItems = $objOrder->getItems();
     foreach ($arrItems as $item) {
         switch ($objModule->iso_direct_checkout_product_mode) {
             case 'product_type':
                 $objFieldpalette = FieldPaletteModel::findBy('iso_direct_checkout_product_type', Standard::findAvailableByIdOrAlias($item->product_id)->type);
                 break;
             default:
                 $objFieldpalette = FieldPaletteModel::findBy('iso_direct_checkout_product', $item->product_id);
                 break;
         }
         if ((!$objFieldpalette->iso_addSubscriptionCheckbox || \Input::post('subscribeToProduct_' . $item->product_id)) && $objFieldpalette->iso_addSubscription && $objFieldpalette->iso_subscriptionArchive && ($objSubscriptionArchive = SubscriptionArchive::findByPk($objFieldpalette->iso_subscriptionArchive)) !== null) {
             if (Subscription::findBy(array('email=?', 'pid=?', 'disable!=?'), array($strEmail, $objSubscriptionArchive->id, 1)) !== null) {
                 $_SESSION['ISO_ERROR'][] = sprintf($GLOBALS['TL_LANG']['MSC']['iso_subscriptionAlreadyExists'], $strEmail, $item->name);
                 return false;
             }
         }
     }
     return true;
 }
/**
 * Backend modules
 */
HeimrichHannot\HastePlus\Arrays::insertInArrayByName($GLOBALS['BE_MOD']['isotope'], 'iso_rules', array('iso_subscriptions' => array('tables' => array('tl_iso_subscription_archive', 'tl_iso_subscription'), 'icon' => 'system/modules/isotope_subscriptions/assets/img/icon.png', 'export_xls' => \HeimrichHannot\Exporter\ModuleExporter::getBackendModule())));
/**
 * Frontend modules
 */
$GLOBALS['FE_MOD']['isotope_subscriptions'] = array('iso_activation' => 'Isotope\\Module\\Activation', 'iso_cancellation' => 'Isotope\\Module\\Cancellation');
/**
 * Hooks
 */
$GLOBALS['ISO_HOOKS']['preCheckout']['setCheckoutModuleIdSubscriptions'] = array('Isotope\\IsotopeSubscriptions', 'setCheckoutModuleIdSubscriptions');
$GLOBALS['ISO_HOOKS']['preCheckout']['checkForExistingSubscription'] = array('Isotope\\IsotopeSubscriptions', 'checkForExistingSubscription');
$GLOBALS['ISO_HOOKS']['postCheckout']['addSubscriptions'] = array('Isotope\\IsotopeSubscriptions', 'addSubscriptions');
/**
 * Notification center notification types
 */
$arrNotifications =& $GLOBALS['NOTIFICATION_CENTER']['NOTIFICATION_TYPE']['isotope'];
$arrNotifications['iso_subscription_activation'] = $arrNotifications['iso_order_status_change'];
$arrNotifications['iso_subscription_activation']['email_text'][] = 'link';
/**
 * Models
 */
$GLOBALS['TL_MODELS'][\Isotope\Model\Subscription::getTable()] = 'Isotope\\Model\\Subscription';
$GLOBALS['TL_MODELS'][\Isotope\Model\SubscriptionArchive::getTable()] = 'Isotope\\Model\\SubscriptionArchive';
/**
 * Add permissions
 */
$GLOBALS['TL_PERMISSIONS'][] = 'subscriptions';
$GLOBALS['TL_PERMISSIONS'][] = 'subscriptionp';