public function executeNew(sfWebRequest $request)
 {
     $petition = PetitionTable::getInstance()->findById($request->getParameter('id'), $this->userIsAdmin());
     /* @var $petition Petition */
     if (!$petition) {
         return $this->notFound();
     }
     if (!$petition->isEditableBy($this->getGuardUser())) {
         return $this->noAccess();
     }
     if ($petition->getKind() != Petition::KIND_PLEDGE) {
         return $this->noAccess();
     }
     $pledge_item = new PledgeItem();
     $pledge_item->setPetition($petition);
     $form = new PledgeItemForm($pledge_item);
     if ($request->isMethod('post')) {
         $form->bind($request->getPostParameter($form->getName()));
         if ($form->isValid()) {
             $form->save();
             $petition->state(Doctrine_Record::STATE_DIRTY);
             // trigger widget update
             $petition->save();
             return $this->ajax()->remove('#pledge_item_form_')->appendPartial('#pledge_items tbody', 'item_row', array('pledge_item' => $pledge_item))->render();
         }
         return $this->ajax()->form($form)->render();
     }
     return $this->ajax()->remove('#pledge_item_form_')->appendPartial('#pledge_items tbody', 'item_form', array('form' => $form, 'pledge_item' => $pledge_item, 'route' => 'pledge_new', 'route_params' => array('id' => $petition->getId())))->select2color('#pledge_item_form_ select.select2-color')->render();
 }
 public function countStatus(PledgeItem $pledge_item, $status, $target_list = null)
 {
     $query = $this->createQuery('p')->where('p.status = ?', $status)->andWhere('pledge_item_id = ?', $pledge_item->getId());
     if ($target_list) {
         /* @var $target_list MailingList */
         $query->leftJoin('p.Contact c')->andWhere('c.mailing_list_id = ?', $target_list->getId());
     }
     return $query->count();
 }
 public function findOneByItemAndText(PledgeItem $item, PetitionText $text)
 {
     return $this->createQuery('pt')->where('pt.pledge_item_id = ?', $item->getId())->andWhere('pt.petition_text_id = ?', $text->getId())->fetchOne();
 }
 public function getPledgeTextByPledgeItem(PledgeItem $pledge_item)
 {
     foreach ($this->getPledgeTexts() as $pledge_text) {
         /* @var $pledge_text PledgeText */
         if ($pledge_text->getPledgeItemId() == $pledge_item->getId()) {
             $text = trim($pledge_text->getText());
             if ($text) {
                 return $text;
             } else {
                 return $pledge_item->getName();
             }
         }
     }
     return $pledge_item->getName();
 }