public function configure() { $this->widgetSchema->setFormFormatterName('bootstrap'); $this->widgetSchema->setNameFormat('translation[%s]'); $petition_text = $this->getObject(); $petition = $petition_text->getPetition(); unset($this['created_at'], $this['updated_at'], $this['petition_id'], $this['object_version'], $this['email_targets'], $this['widget_id']); $this->setWidget('title', new sfWidgetFormInput(array(), array('size' => 90, 'class' => 'large'))); $this->setWidget('target', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 3, 'class' => 'markdown'))); $this->getWidgetSchema()->setHelp('target', 'Keep this short, this area is not scrollable.'); $this->getValidator('target')->setOption('required', false)->setOption('trim', true); $this->setWidget('background', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->setWidget('landing_url', new sfWidgetFormInput(array('label' => 'Email Validation Landingpage - auto forwarding to external page'), array('size' => 90, 'class' => 'add_popover large', 'data-content' => 'Enter URL of external landing page, including \'http://\'. Leave empty for standard landing page'))); $this->setValidator('landing_url', new ValidatorUrl(array('required' => false, 'trim' => true))); if (!$petition->isEmailKind()) { $this->setWidget('intro', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->setWidget('body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30, 'class' => 'markdown'))); $this->setWidget('footer', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->getValidator('intro')->setOption('required', false); $this->getValidator('body')->setOption('required', true); $this->getValidator('footer')->setOption('required', false); unset($this['email_subject'], $this['email_body']); } else { $this->setWidget('email_subject', new sfWidgetFormInput(array(), array('size' => 90, 'class' => 'large'))); $this->setWidget('email_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30, 'class' => 'large elastic highlight'))); $this->getValidator('email_subject')->setOption('required', true); $this->getValidator('email_body')->setOption('required', true); unset($this['intro'], $this['body'], $this['footer']); if ($petition->isGeoKind()) { $subst_fields = $petition->getGeoSubstFields(); $keywords = array(); foreach ($subst_fields as $keyword => $subst_field) { if ($subst_field['id'] != MailingList::FIX_GENDER) { $keywords[] = '<b>' . $keyword . '</b> (' . $subst_field['name'] . ')'; } } if ($this->getObject()->getPetition()->getKind() == Petition::KIND_PLEDGE) { $keywords[] = '<b>#PLEDGE-URL#</b> (Link for the candidate)'; $this->setValidator('email_body', new sfValidatorRegex(array('required' => true, 'pattern' => '/#PLEDGE-URL#/'), array('invalid' => 'Missing the following keywords: #PLEDGE-URL#'))); } foreach (PetitionSigningTable::$KEYWORDS as $keyword) { $keywords[] = $keyword; } $keywords[] = PetitionTable::KEYWORD_PERSONAL_SALUTATION; } else { $keywords = PetitionSigningTable::$KEYWORDS; } $this->getWidgetSchema()->setHelp('email_body', 'You can use the following keywords: ' . implode(', ', $keywords) . '.'); } $this->setWidget('email_validation_subject', new sfWidgetFormInput(array(), array('size' => 90, 'class' => 'large'))); $this->setWidget('email_validation_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 8, 'class' => 'large elastic highlight'))); $this->setValidator('email_validation_body', new ValidatorKeywords(array('required' => true, 'keywords' => array('#VALIDATION-URL#')))); $this->getWidgetSchema()->setHelp('email_validation_body', '#VALIDATION-URL#, #REFERER-URL#, #READMORE-URL#, #TITLE#, #TARGET#, #BACKGROUND#, #INTRO#,' . ' #FOOTER#, #EMAIL-SUBJECT#, #EMAIL-BODY#, #BODY# ' . implode(', ', PetitionSigningTable::$KEYWORDS)); $this->setWidget('email_tellyour_subject', new sfWidgetFormInput(array(), array('size' => 90, 'class' => 'large'))); $this->setWidget('email_tellyour_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 8, 'class' => 'large elastic highlight'))); $this->getWidgetSchema()->setHelp('email_tellyour_body', '#REFERER-URL#, #READMORE-URL#, #TITLE#, #TARGET#, #BACKGROUND#, #INTRO#, #FOOTER#, #EMAIL-SUBJECT#, #EMAIL-BODY#, #BODY#'); $this->setValidator('email_tellyour_body', new sfValidatorString(array('max_length' => 1800))); $this->getWidgetSchema()->setLabel('email_tellyour_subject', 'E-mail "tell your friends" subject'); $this->getWidgetSchema()->setLabel('email_tellyour_body', 'E-mail "tell your friends" body (the final e-mail will be cut after approx. 2000 characters)'); $possible_statuses = array_keys(PetitionText::$STATUS_SHOW); $this->state_count = count($possible_statuses); $possible_statuses_show = PetitionText::calcStatusShow($possible_statuses); $this->setWidget('status', new sfWidgetFormChoice(array('choices' => $possible_statuses_show))); $this->setValidator('status', new sfValidatorChoice(array('choices' => $possible_statuses, 'required' => true))); if ($petition_text->getLanguageId() === null) { $this->setWidget('language_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Language'), 'add_empty' => false, 'query' => Doctrine_Core::getTable('Language')->createQuery('l')->where('l.id NOT IN (SELECT pt.language_id FROM PetitionText pt WHERE pt.petition_id = ?)', $petition_text->getPetitionId())), array('class' => 'ajax_change', 'data-action' => sfContext::getInstance()->getRouting()->generate('translation_default', array('id' => $petition->getCampaign()->getId()))))); $this->setValidator('language_id', new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Language'), 'query' => Doctrine_Core::getTable('Language')->createQuery('l')->where('l.id NOT IN (SELECT pt.language_id FROM PetitionText pt WHERE pt.petition_id = ?)', $petition_text->getPetitionId())))); } else { unset($this['language_id']); } $this->setWidget('privacy_policy_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30, 'class' => 'markdown highlight'))); $this->getWidgetSchema()->setHelp('privacy_policy_body', '#DATA-OFFICER-NAME#, #DATA-OFFICER-ORGA#, #DATA-OFFICER-EMAIL#, #DATA-OFFICER-WEBSITE#, #DATA-OFFICER-PHONE#, #DATA-OFFICER-MOBILE#, #DATA-OFFICER-STREET#, #DATA-OFFICER-POST-CODE#, #DATA-OFFICER-CITY#, #DATA-OFFICER-COUNTRY#, #DATA-OFFICER-ADDRESS#'); if (!$petition_text->isNew()) { $this->setWidget('updated_at', new sfWidgetFormInputHidden()); $this->setValidator('updated_at', new ValidatorUnchanged(array('fix' => $petition_text->getUpdatedAt()))); $this->setWidget('widget_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('DefaultWidget'), 'add_empty' => true, 'label' => 'Widget for Homepage', 'method' => 'getIdentString', 'query' => Doctrine_Core::getTable('Widget')->createQuery('w')->where('w.petition_text_id = ?', $petition_text->getId())->andWhere('w.status = ?', Widget::STATUS_ACTIVE)))); $this->setValidator('widget_id', new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('DefaultWidget'), 'required' => false, 'query' => Doctrine_Core::getTable('Widget')->createQuery('w')->where('w.petition_text_id = ?', $petition_text->getId())->andWhere('w.status = ?', Widget::STATUS_ACTIVE)))); } // static defaults $defaults = self::$defaults_petition; if ($petition->isEmailKind()) { $defaults = array_merge($defaults, self::$defaults_email); } foreach ($defaults as $def_key => $def_value) { if (isset($this[$def_key])) { $this->setDefault($def_key, $def_value); } } if ($petition->getKind() == Petition::KIND_PLEDGE) { $this->setWidget('pledge_title', new sfWidgetFormInput(array('label' => 'Title'), array('size' => 90, 'class' => 'large'))); $this->setWidget('intro', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->getWidgetSchema()->setLabel('intro', 'Introduction'); $this->getWidgetSchema()->moveField('intro', sfWidgetFormSchema::AFTER, 'pledge_title'); $this->setValidator('intro', new sfValidatorString(array('required' => false))); unset($this['pledge_comment']); // $this->setWidget('pledge_comment', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class'=>'markdown'))); $this->setWidget('pledge_explantory_annotation', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->getWidgetSchema()->setLabel('pledge_explantory_annotation', 'Explantory annotation and contact information'); $this->setWidget('pledge_thank_you', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5, 'class' => 'markdown'))); $this->getWidgetSchema()->setLabel('pledge_thank_you', '"Thank you" dialog'); $pledge_items = $petition->getPledgeItems(); foreach ($pledge_items as $pledge_item) { /* @var $pledge_item PledgeItem */ if ($petition_text->isNew()) { $pledge_text = new PledgeText(); $pledge_text->setPetitionText($petition_text); $pledge_text->setPledgeItem($pledge_item); } else { $pledge_text = PledgeTextTable::getInstance()->findOneByItemAndText($pledge_item, $petition_text); if (!$pledge_text) { $pledge_text = new PledgeText(); $pledge_text->setPetitionText($petition_text); $pledge_text->setPledgeItem($pledge_item); } } $this->embedForm('pledge_' . $pledge_item->getId(), new PledgeTextForm($pledge_text), '%content%'); $this->getWidgetSchema()->setLabel('pledge_' . $pledge_item->getId(), $pledge_item->getName() . ' (' . $pledge_item->getStatusName() . ')'); } } else { unset($this['pledge_title'], $this['pledge_comment'], $this['pledge_explantory_annotation'], $this['pledge_thank_you']); } // copy defaults from existing text $copy = $this->getOption('copy', null); if ($copy) { foreach (array('title', 'target', 'background', 'intro', 'body', 'footer', 'privacy_policy_body', 'email_validation_subject', 'email_validation_body', 'email_tellyour_subject', 'email_tellyour_body', 'email_subject', 'email_body', 'landing_url', 'pledge_title', 'pledge_comment', 'pledge_explantory_annotation', 'pledge_thank_you') as $field) { if (isset($this[$field]) && $this[$field]) { $this->setDefault($field, $copy[$field]); } } } }
public function configure() { $this->widgetSchema->setFormFormatterName('policat'); unset($this['created_at'], $this['updated_at'], $this['petition_id'], $this['object_version'], $this['email_targets'], $this['widget_id']); $petition_text = $this->getObject(); $petition = $petition_text->getPetition(); $this->setWidget('title', new sfWidgetFormInput(array(), array('size' => 90))); $this->setWidget('target', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 3))); $this->setWidget('background', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5))); if (!$petition->isEmailKind()) { $this->setWidget('intro', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5))); $this->setWidget('body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30))); $this->setWidget('footer', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 5))); $this->getValidator('intro')->setOption('required', false); $this->getValidator('body')->setOption('required', true); $this->getValidator('footer')->setOption('required', false); unset($this['email_subject'], $this['email_body']); } else { $this->setWidget('email_subject', new sfWidgetFormInput(array(), array('size' => 90))); $this->setWidget('email_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30))); $this->getValidator('email_subject')->setOption('required', true); $this->getValidator('email_body')->setOption('required', true); unset($this['intro'], $this['body'], $this['footer']); if ($petition->isGeoKind()) { $subst_fields = $petition->getGeoSubstFields(); $keywords = array(); foreach ($subst_fields as $keyword => $subst_field) { if ($subst_field['id'] != MailingList::FIX_GENDER) { $keywords[] = '<b>' . $keyword . '</b> (' . $subst_field['name'] . ')'; } } foreach (PetitionSigningTable::$KEYWORDS as $keyword) { $keywords[] = $keyword; } } else { $keywords = PetitionSigningTable::$KEYWORDS; } $this->getWidgetSchema()->setHelp('email_body', 'You can use the following keywords: ' . implode(', ', $keywords) . '.'); } $this->setWidget('email_validation_subject', new sfWidgetFormInput(array(), array('size' => 90))); $this->setWidget('email_validation_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 8))); $this->setWidget('email_tellyour_subject', new sfWidgetFormInput(array(), array('size' => 90))); $this->setWidget('email_tellyour_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 8))); $possible_statuses = array_keys(PetitionText::$STATUS_SHOW); $this->state_count = count($possible_statuses); $possible_statuses_show = PetitionText::calcStatusShow($possible_statuses); $this->setWidget('status', new sfWidgetFormChoice(array('choices' => $possible_statuses_show))); $this->setValidator('status', new sfValidatorChoice(array('choices' => $possible_statuses, 'required' => true))); if ($petition_text->getLanguageId() === null) { $this->setWidget('language_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('Language'), 'add_empty' => false, 'query' => Doctrine_Core::getTable('Language')->createQuery('l')->where('l.id NOT IN (SELECT pt.language_id FROM PetitionText pt WHERE pt.petition_id = ?)', $petition_text->getPetitionId())))); $this->setValidator('language_id', new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('Language'), 'query' => Doctrine_Core::getTable('Language')->createQuery('l')->where('l.id NOT IN (SELECT pt.language_id FROM PetitionText pt WHERE pt.petition_id = ?)', $petition_text->getPetitionId())))); } else { unset($this['language_id']); } $this->setWidget('privacy_policy_body', new sfWidgetFormTextarea(array(), array('cols' => 90, 'rows' => 30))); if (!$petition_text->isNew()) { $this->setWidget('updated_at', new sfWidgetFormInputHidden()); $this->setValidator('updated_at', new ValidatorUnchanged(array('fix' => $petition_text->getUpdatedAt()))); $this->setWidget('widget_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('DefaultWidget'), 'add_empty' => true, 'method' => 'getIdentString', 'query' => Doctrine_Core::getTable('Widget')->createQuery('w')->where('w.petition_text_id = ?', $petition_text->getId())->andWhere('w.status = ?', Widget::STATUS_ACTIVE)))); $this->setValidator('widget_id', new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('DefaultWidget'), 'required' => false, 'query' => Doctrine_Core::getTable('Widget')->createQuery('w')->where('w.petition_text_id = ?', $petition_text->getId())->andWhere('w.status = ?', Widget::STATUS_ACTIVE)))); } // static defaults $defaults = self::$defaults_petition; if ($petition->isEmailKind()) { $defaults = array_merge($defaults, self::$defaults_email); } foreach ($defaults as $def_key => $def_value) { if (isset($this[$def_key])) { $this->setDefault($def_key, $def_value); } } // copy defaults from existing text $copy = $this->getOption('copy'); if (isset($copy)) { foreach (array('title', 'target', 'background', 'intro', 'body', 'footer', 'email_validation_subject', 'email_validation_body', 'email_tellyour_subject', 'email_tellyour_body', 'email_subject', 'email_body') as $field) { $this->setDefault($field, $copy[$field]); } } }