public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $offset = $request->getInt('offset', 0);
     $pager = new AphrontPagerView();
     $pager->setPageSize(250);
     $pager->setOffset($offset);
     $pager->setURI($request->getRequestURI(), 'offset');
     $list = new PhabricatorMetaMTAMailingList();
     $conn_r = $list->establishConnection('r');
     $data = queryfx_all($conn_r, 'SELECT * FROM %T
     ORDER BY name ASC
     LIMIT %d, %d', $list->getTableName(), $pager->getOffset(), $pager->getPageSize() + 1);
     $data = $pager->sliceResults($data);
     $lists = $list->loadAllFromArray($data);
     $rows = array();
     foreach ($lists as $list) {
         $rows[] = array(phutil_escape_html($list->getName()), phutil_escape_html($list->getEmail()), phutil_render_tag('a', array('class' => 'button grey small', 'href' => $this->getApplicationURI('/edit/' . $list->getID() . '/')), 'Edit'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Name', 'Email', ''));
     $table->setColumnClasses(array(null, 'wide', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Mailing Lists');
     $panel->setCreateButton('Add New List', $this->getApplicationURI('/edit/'));
     $panel->appendChild($pager);
     return $this->buildApplicationPage($panel, array('title' => 'Mailing Lists'));
 }
 public function processRequest()
 {
     if ($this->id) {
         $list = id(new PhabricatorMetaMTAMailingList())->load($this->id);
         if (!$list) {
             return new Aphront404Response();
         }
     } else {
         $list = new PhabricatorMetaMTAMailingList();
     }
     $e_email = true;
     $errors = array();
     $request = $this->getRequest();
     if ($request->isFormPost()) {
         $list->setName($request->getStr('name'));
         $list->setEmail($request->getStr('email'));
         $list->setURI($request->getStr('uri'));
         if (!strlen($list->getEmail())) {
             $e_email = 'Required';
             $errors[] = 'Email is required.';
         }
         if (!$errors) {
             $list->save();
             return id(new AphrontRedirectResponse())->setURI('/mail/lists/');
         }
     }
     $error_view = null;
     if ($errors) {
         $error_view = id(new AphrontErrorView())->setTitle('Form Errors')->setErrors($errors);
     }
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
     if ($list->getID()) {
         $form->setAction('/mail/lists/edit/' . $list->getID() . '/');
     } else {
         $form->setAction('/mail/lists/edit/');
     }
     $form->appendChild(id(new AphrontFormTextControl())->setLabel('Email')->setName('email')->setValue($list->getEmail())->setError($e_email))->appendChild(id(new AphrontFormTextControl())->setLabel('Name')->setName('name')->setValue($list->getName()))->appendChild(id(new AphrontFormTextControl())->setLabel('URI')->setName('uri')->setValue($list->getURI()))->appendChild(id(new AphrontFormStaticControl())->setLabel('ID')->setValue(nonempty($list->getID(), '-')))->appendChild(id(new AphrontFormStaticControl())->setLabel('PHID')->setValue(nonempty($list->getPHID(), '-')))->appendChild(id(new AphrontFormSubmitControl())->setValue('Save')->addCancelButton('/mail/lists/'));
     $panel = new AphrontPanelView();
     if ($list->getID()) {
         $panel->setHeader('Edit Mailing List');
     } else {
         $panel->setHeader('Create New Mailing List');
     }
     $panel->appendChild($form);
     $panel->setWidth(AphrontPanelView::WIDTH_FORM);
     return $this->buildStandardPageResponse(array($error_view, $panel), array('title' => 'Edit Mailing List'));
 }
 public function processRequest()
 {
     if ($this->id) {
         $list = id(new PhabricatorMetaMTAMailingList())->load($this->id);
         if (!$list) {
             return new Aphront404Response();
         }
     } else {
         $list = new PhabricatorMetaMTAMailingList();
     }
     $e_email = true;
     $e_uri = null;
     $e_name = true;
     $errors = array();
     $request = $this->getRequest();
     if ($request->isFormPost()) {
         $list->setName($request->getStr('name'));
         $list->setEmail($request->getStr('email'));
         $list->setURI($request->getStr('uri'));
         $e_email = null;
         $e_name = null;
         if (!strlen($list->getEmail())) {
             $e_email = 'Required';
             $errors[] = 'Email is required.';
         }
         if (!strlen($list->getName())) {
             $e_name = 'Required';
             $errors[] = 'Name is required.';
         } else {
             if (preg_match('/[ ,]/', $list->getName())) {
                 $e_name = 'Invalid';
                 $errors[] = 'Name must not contain spaces or commas.';
             }
         }
         if ($list->getURI()) {
             if (!PhabricatorEnv::isValidWebResource($list->getURI())) {
                 $e_uri = 'Invalid';
                 $errors[] = 'Mailing list URI must point to a valid web page.';
             }
         }
         if (!$errors) {
             try {
                 $list->save();
                 return id(new AphrontRedirectResponse())->setURI('/mail/lists/');
             } catch (AphrontQueryDuplicateKeyException $ex) {
                 $e_email = 'Duplicate';
                 $errors[] = 'Another mailing list already uses that address.';
             }
         }
     }
     $error_view = null;
     if ($errors) {
         $error_view = id(new AphrontErrorView())->setTitle('Form Errors')->setErrors($errors);
     }
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
     if ($list->getID()) {
         $form->setAction('/mail/lists/edit/' . $list->getID() . '/');
     } else {
         $form->setAction('/mail/lists/edit/');
     }
     $form->appendChild(id(new AphrontFormTextControl())->setLabel('Email')->setName('email')->setValue($list->getEmail())->setCaption('Email will be delivered to this address.')->setError($e_email))->appendChild(id(new AphrontFormTextControl())->setLabel('Name')->setName('name')->setError($e_name)->setCaption('Human-readable display and autocomplete name.')->setValue($list->getName()))->appendChild(id(new AphrontFormTextControl())->setLabel('URI')->setName('uri')->setError($e_uri)->setCaption('Optional link to mailing list archives or info.')->setValue($list->getURI()))->appendChild(id(new AphrontFormStaticControl())->setLabel('ID')->setValue(nonempty($list->getID(), '-')))->appendChild(id(new AphrontFormStaticControl())->setLabel('PHID')->setValue(nonempty($list->getPHID(), '-')))->appendChild(id(new AphrontFormSubmitControl())->setValue('Save')->addCancelButton('/mail/lists/'));
     $panel = new AphrontPanelView();
     if ($list->getID()) {
         $panel->setHeader('Edit Mailing List');
     } else {
         $panel->setHeader('Create New Mailing List');
     }
     $panel->appendChild($form);
     $panel->setWidth(AphrontPanelView::WIDTH_FORM);
     return $this->buildStandardPageResponse(array($error_view, $panel), array('title' => 'Edit Mailing List'));
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $viewer = $request->getUser();
     if ($this->id) {
         $page_title = pht('Edit Mailing List');
         $list = id(new PhabricatorMailingListQuery())->setViewer($viewer)->withIDs(array($this->id))->executeOne();
         if (!$list) {
             return new Aphront404Response();
         }
     } else {
         $page_title = pht('Create Mailing List');
         $list = new PhabricatorMetaMTAMailingList();
     }
     $e_email = true;
     $e_uri = null;
     $e_name = true;
     $errors = array();
     $crumbs = $this->buildApplicationCrumbs();
     if ($request->isFormPost()) {
         $list->setName($request->getStr('name'));
         $list->setEmail($request->getStr('email'));
         $list->setURI($request->getStr('uri'));
         $e_email = null;
         $e_name = null;
         if (!strlen($list->getEmail())) {
             $e_email = pht('Required');
             $errors[] = pht('Email is required.');
         }
         if (!strlen($list->getName())) {
             $e_name = pht('Required');
             $errors[] = pht('Name is required.');
         } else {
             if (preg_match('/[ ,]/', $list->getName())) {
                 $e_name = pht('Invalid');
                 $errors[] = pht('Name must not contain spaces or commas.');
             }
         }
         if ($list->getURI()) {
             if (!PhabricatorEnv::isValidWebResource($list->getURI())) {
                 $e_uri = pht('Invalid');
                 $errors[] = pht('Mailing list URI must point to a valid web page.');
             }
         }
         if (!$errors) {
             try {
                 $list->save();
                 return id(new AphrontRedirectResponse())->setURI($this->getApplicationURI());
             } catch (AphrontDuplicateKeyQueryException $ex) {
                 $e_email = pht('Duplicate');
                 $errors[] = pht('Another mailing list already uses that address.');
             }
         }
     }
     $form = new AphrontFormView();
     $form->setUser($request->getUser());
     if ($list->getID()) {
         $form->setAction($this->getApplicationURI('/edit/' . $list->getID() . '/'));
     } else {
         $form->setAction($this->getApplicationURI('/edit/'));
     }
     $form->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Email'))->setName('email')->setValue($list->getEmail())->setCaption(pht('Email will be delivered to this address.'))->setError($e_email))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('Name'))->setName('name')->setError($e_name)->setCaption(pht('Human-readable display and autocomplete name.'))->setValue($list->getName()))->appendChild(id(new AphrontFormTextControl())->setLabel(pht('URI'))->setName('uri')->setError($e_uri)->setCaption(pht('Optional link to mailing list archives or info.'))->setValue($list->getURI()))->appendChild(id(new AphrontFormSubmitControl())->setValue(pht('Save'))->addCancelButton($this->getApplicationURI()));
     if ($list->getID()) {
         $crumbs->addTextCrumb(pht('Edit Mailing List'));
     } else {
         $crumbs->addTextCrumb(pht('Create Mailing List'));
     }
     $form_box = id(new PHUIObjectBoxView())->setHeaderText($page_title)->setFormErrors($errors)->setForm($form);
     return $this->buildApplicationPage(array($crumbs, $form_box), array('title' => $page_title));
 }