public function processRequest()
 {
     $request = $this->getRequest();
     $pager = new AphrontPagerView();
     $pager->setOffset($request->getInt('page'));
     $macro_table = new PhabricatorFileImageMacro();
     $macros = $macro_table->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize());
     // Get an exact count since the size here is reasonably going to be a few
     // thousand at most in any reasonable case.
     $count = queryfx_one($macro_table->establishConnection('r'), 'SELECT COUNT(*) N FROM %T', $macro_table->getTableName());
     $count = $count['N'];
     $pager->setCount($count);
     $pager->setURI($request->getRequestURI(), 'page');
     $rows = array();
     foreach ($macros as $macro) {
         $src = PhabricatorFileURI::getViewURIForPHID($macro->getFilePHID());
         $rows[] = array(phutil_render_tag('a', array('href' => '/file/macro/edit/' . $macro->getID() . '/'), phutil_escape_html($macro->getName())), phutil_render_tag('a', array('href' => $src, 'target' => '_blank'), phutil_render_tag('img', array('src' => $src))), javelin_render_tag('a', array('href' => '/file/macro/delete/' . $macro->getID() . '/', 'sigil' => 'workflow', 'class' => 'grey small button'), 'Delete'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Name', 'Image', ''));
     $table->setColumnClasses(array('pri', 'wide thumb', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Image Macros');
     $panel->setCreateButton('New Image Macro', '/file/macro/edit/');
     $panel->appendChild($pager);
     return $this->buildStandardPageResponse($panel, array('title' => 'Image Macros', 'tab' => 'macros'));
 }
 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()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $pager = new AphrontPagerView();
     $pager->setOffset($request->getInt('page'));
     $pager->setURI($request->getRequestURI(), 'page');
     $mails = id(new PhabricatorMetaMTAReceivedMail())->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize() + 1);
     $mails = $pager->sliceResults($mails);
     $phids = array_merge(mpull($mails, 'getAuthorPHID'), mpull($mails, 'getRelatedPHID'));
     $phids = array_unique(array_filter($phids));
     $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
     $rows = array();
     foreach ($mails as $mail) {
         $rows[] = array($mail->getID(), phabricator_date($mail->getDateCreated(), $user), phabricator_time($mail->getDateCreated(), $user), $mail->getAuthorPHID() ? $handles[$mail->getAuthorPHID()]->renderLink() : '-', $mail->getRelatedPHID() ? $handles[$mail->getRelatedPHID()]->renderLink() : '-', phutil_escape_html($mail->getMessage()));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('ID', 'Date', 'Time', 'Author', 'Object', 'Message'));
     $table->setColumnClasses(array(null, null, 'right', null, null, 'wide'));
     $panel = new AphrontPanelView();
     $panel->setHeader('Received Mail');
     $panel->setCreateButton('Test Receiver', '/mail/receive/');
     $panel->appendChild($table);
     $panel->appendChild($pager);
     return $this->buildStandardPageResponse($panel, array('title' => 'Received Mail', 'tab' => 'received'));
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $views = array(self::VIEW_ALL => 'All Slowvotes', self::VIEW_CREATED => 'Created', self::VIEW_VOTED => 'Voted In');
     $view = isset($views[$this->view]) ? $this->view : self::VIEW_ALL;
     $side_nav = $this->renderSideNav($views, $view);
     $pager = new AphrontPagerView();
     $pager->setOffset($request->getInt('page'));
     $pager->setURI($request->getRequestURI(), 'page');
     $polls = $this->loadPolls($pager, $view);
     $phids = mpull($polls, 'getAuthorPHID');
     $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
     $rows = array();
     foreach ($polls as $poll) {
         $rows[] = array('V' . $poll->getID(), phutil_render_tag('a', array('href' => '/V' . $poll->getID()), phutil_escape_html($poll->getQuestion())), $handles[$poll->getAuthorPHID()]->renderLink(), phabricator_date($poll->getDateCreated(), $user), phabricator_time($poll->getDateCreated(), $user));
     }
     $table = new AphrontTableView($rows);
     $table->setColumnClasses(array('', 'pri wide', '', '', 'right'));
     $table->setHeaders(array('ID', 'Poll', 'Author', 'Date', 'Time'));
     $panel = new AphrontPanelView();
     $panel->setHeader($this->getTableHeader($view));
     $panel->setCreateButton('Create Slowvote', '/vote/create/');
     $panel->appendChild($table);
     $panel->appendChild($pager);
     $side_nav->appendChild($panel);
     return $this->buildStandardPageResponse($side_nav, array('title' => 'Slowvotes'));
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $pager = new AphrontPagerView();
     $pager->setOffset($request->getInt('page'));
     $pastes = id(new PhabricatorPaste())->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize() + 1);
     $pastes = $pager->sliceResults($pastes);
     $pager->setURI($request->getRequestURI(), 'page');
     $phids = mpull($pastes, 'getAuthorPHID');
     $handles = array();
     if ($phids) {
         $handles = id(new PhabricatorObjectHandleData($phids))->loadHandles();
     }
     $rows = array();
     foreach ($pastes as $paste) {
         $handle = $handles[$paste->getAuthorPHID()];
         $rows[] = array(phutil_escape_html('P' . $paste->getID()), phutil_render_tag('a', array('href' => '/p/' . $handle->getName() . '/'), phutil_escape_html($handle->getName())), phutil_escape_html($paste->getLanguage()), phutil_render_tag('a', array('href' => '/P' . $paste->getID()), phutil_escape_html(nonempty($paste->getTitle(), 'Untitled Masterwork P' . $paste->getID()))), phutil_render_tag('a', array('href' => PhabricatorFileURI::getViewURIForPHID($paste->getFilePHID())), phutil_escape_html($paste->getFilePHID())));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Paste ID', 'Author', 'Language', 'Title', 'File'));
     $table->setColumnClasses(array(null, null, null, 'wide pri', null));
     $panel = new AphrontPanelView();
     $panel->setWidth(AphrontPanelView::WIDTH_FULL);
     $panel->setHeader("Paste");
     $panel->setCreateButton('Paste Something', '/paste/');
     $panel->appendChild($table);
     $panel->appendChild($pager);
     return $this->buildStandardPageResponse($panel, array('title' => 'Paste List', 'tab' => 'list'));
 }
 public function processRequest()
 {
     // Get a page of mails together with pager.
     $request = $this->getRequest();
     $user = $request->getUser();
     $offset = $request->getInt('offset', 0);
     $related_phid = $request->getStr('phid');
     $status = $request->getStr('status');
     $pager = new AphrontPagerView();
     $pager->setOffset($offset);
     $pager->setURI($request->getRequestURI(), 'offset');
     $mail = new PhabricatorMetaMTAMail();
     $conn_r = $mail->establishConnection('r');
     $wheres = array();
     if ($status) {
         $wheres[] = qsprintf($conn_r, 'status = %s', $status);
     }
     if ($related_phid) {
         $wheres[] = qsprintf($conn_r, 'relatedPHID = %s', $related_phid);
     }
     if (count($wheres)) {
         $where_clause = 'WHERE ' . implode($wheres, ' AND ');
     } else {
         $where_clause = 'WHERE 1 = 1';
     }
     $data = queryfx_all($conn_r, 'SELECT * FROM %T
     %Q
     ORDER BY id DESC
     LIMIT %d, %d', $mail->getTableName(), $where_clause, $pager->getOffset(), $pager->getPageSize() + 1);
     $data = $pager->sliceResults($data);
     $mails = $mail->loadAllFromArray($data);
     // Render the details table.
     $rows = array();
     foreach ($mails as $mail) {
         $next_retry = $mail->getNextRetry() - time();
         if ($next_retry <= 0) {
             $next_retry = "None";
         } else {
             $next_retry = phabricator_format_relative_time_detailed($next_retry);
         }
         $rows[] = array(PhabricatorMetaMTAMail::getReadableStatus($mail->getStatus()), $mail->getRetryCount(), $next_retry, phabricator_datetime($mail->getDateCreated(), $user), phabricator_format_relative_time_detailed(time() - $mail->getDateModified()), phutil_escape_html($mail->getSubject()), phutil_render_tag('a', array('class' => 'button small grey', 'href' => '/mail/view/' . $mail->getID() . '/'), 'View'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Status', 'Retry', 'Next', 'Created', 'Updated', 'Subject', ''));
     $table->setColumnClasses(array(null, null, null, null, null, 'wide', 'action'));
     // Render the whole page.
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('MetaMTA Messages');
     if ($user->getIsAdmin()) {
         $panel->setCreateButton('Send New Test Message', '/mail/send/');
     }
     $panel->appendChild($pager);
     return $this->buildStandardPageResponse($panel, array('title' => 'MetaMTA', 'tab' => 'queue'));
 }
 public function processRequest()
 {
     $items = id(new PhabricatorPHID())->loadAllWhere('1 = 1 ORDER BY id DESC limit 100');
     $rows = array();
     foreach ($items as $item) {
         $rows[] = array(phutil_escape_html($item->getPHID()), phutil_escape_html($item->getPHIDType()), phutil_escape_html($item->getOwnerPHID()), phutil_escape_html($item->getParentPHID()));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('PHID', 'Type', 'Owner PHID', 'Parent PHID'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('PHIDs');
     $panel->setCreateButton('Allocate New PHID', '/phid/new/');
     return $this->buildStandardPageResponse(array($panel), array('title' => 'PHIDs', 'tab' => 'phids'));
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $is_admin = $user->getIsAdmin();
     $repos = id(new PhabricatorRepositoryQuery())->setViewer($user)->execute();
     $repos = msort($repos, 'getName');
     $rows = array();
     foreach ($repos as $repo) {
         if ($repo->isTracked()) {
             $diffusion_link = phutil_tag('a', array('href' => '/diffusion/' . $repo->getCallsign() . '/'), 'View in Diffusion');
         } else {
             $diffusion_link = phutil_tag('em', array(), 'Not Tracked');
         }
         $rows[] = array($repo->getCallsign(), $repo->getName(), PhabricatorRepositoryType::getNameForRepositoryType($repo->getVersionControlSystem()), $diffusion_link, phutil_tag('a', array('class' => 'button small grey', 'href' => '/diffusion/' . $repo->getCallsign() . '/edit/'), 'Edit'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Callsign', 'Repository', 'Type', 'Diffusion', ''));
     $table->setColumnClasses(array(null, 'wide', null, null, 'action'));
     $table->setColumnVisibility(array(true, true, true, true, $is_admin));
     $panel = new AphrontPanelView();
     $panel->setHeader('Repositories');
     if ($is_admin) {
         $panel->setCreateButton('Create New Repository', '/diffusion/new/');
     }
     $panel->appendChild($table);
     $panel->setNoBackground();
     $projects = id(new PhabricatorRepositoryArcanistProject())->loadAll();
     $rows = array();
     foreach ($projects as $project) {
         $repo = idx($repos, $project->getRepositoryID());
         if ($repo) {
             $repo_name = $repo->getName();
         } else {
             $repo_name = '-';
         }
         $rows[] = array($project->getName(), $repo_name, phutil_tag('a', array('href' => '/repository/project/edit/' . $project->getID() . '/', 'class' => 'button grey small'), 'Edit'), javelin_tag('a', array('href' => '/repository/project/delete/' . $project->getID() . '/', 'class' => 'button grey small', 'sigil' => 'workflow'), 'Delete'));
     }
     $project_table = new AphrontTableView($rows);
     $project_table->setHeaders(array('Project ID', 'Repository', '', ''));
     $project_table->setColumnClasses(array('', 'wide', 'action', 'action'));
     $project_table->setColumnVisibility(array(true, true, $is_admin, $is_admin));
     $project_panel = new AphrontPanelView();
     $project_panel->setHeader('Arcanist Projects');
     $project_panel->appendChild($project_table);
     $project_panel->setNoBackground();
     return $this->buildStandardPageResponse(array($panel, $project_panel), array('title' => 'Repository List'));
 }
 private function renderUploadPanel()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     require_celerity_resource('files-css');
     $upload_id = celerity_generate_unique_node_id();
     $panel_id = celerity_generate_unique_node_id();
     $upload_panel = new AphrontPanelView();
     $upload_panel->setHeader('Upload Files');
     $upload_panel->setCreateButton('Basic Uploader', '/file/upload/');
     $upload_panel->setWidth(AphrontPanelView::WIDTH_FULL);
     $upload_panel->setID($panel_id);
     $upload_panel->appendChild(phutil_render_tag('div', array('id' => $upload_id, 'style' => 'display: none;', 'class' => 'files-drag-and-drop'), ''));
     Javelin::initBehavior('files-drag-and-drop', array('uri' => '/file/dropupload/', 'browseURI' => '/file/?author=' . $user->getUsername(), 'control' => $upload_id, 'target' => $panel_id, 'activatedClass' => 'aphront-panel-view-drag-and-drop'));
     return $upload_panel;
 }
 public function processRequest()
 {
     $lists = id(new PhabricatorMetaMTAMailingList())->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT 100');
     $rows = array();
     foreach ($lists as $list) {
         $rows[] = array(phutil_escape_html($list->getPHID()), phutil_escape_html($list->getEmail()), phutil_escape_html($list->getName()), phutil_render_tag('a', array('class' => 'button grey small', 'href' => '/mail/lists/edit/' . $list->getID() . '/'), 'Edit'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('PHID', 'Email', 'Name', ''));
     $table->setColumnClasses(array(null, null, 'wide', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Mailing Lists');
     $panel->setCreateButton('Add New List', '/mail/lists/edit/');
     return $this->buildStandardPageResponse($panel, array('title' => 'Mailing Lists', 'tab' => 'lists'));
 }
 public function processRequest()
 {
     $categories = id(new PhabricatorDirectoryCategory())->loadAll();
     $categories = msort($categories, 'getSequence');
     $rows = array();
     foreach ($categories as $category) {
         $rows[] = array($category->getID(), phutil_render_tag('a', array('href' => '/directory/category/edit/' . $category->getID() . '/'), phutil_escape_html($category->getName())), javelin_render_tag('a', array('href' => '/directory/category/delete/' . $category->getID() . '/', 'class' => 'button grey small', 'sigil' => 'workflow'), 'Delete'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('ID', 'Name', ''));
     $table->setColumnClasses(array(null, 'wide', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Directory Categories');
     $panel->setCreateButton('New Category', '/directory/category/edit/');
     return $this->buildStandardPageResponse($panel, array('title' => 'Directory Category List', 'tab' => 'categories'));
 }
 public function processRequest()
 {
     $projects = id(new PhabricatorProject())->loadAllWhere('1 = 1 ORDER BY id DESC limit 100');
     $project_phids = mpull($projects, 'getPHID');
     $profiles = array();
     if ($projects) {
         $profiles = id(new PhabricatorProjectProfile())->loadAllWhere('projectPHID in (%Ls)', $project_phids);
         $profiles = mpull($profiles, null, 'getProjectPHID');
     }
     $affil_groups = array();
     if ($projects) {
         $affil_groups = PhabricatorProjectAffiliation::loadAllForProjectPHIDs($project_phids);
     }
     $author_phids = mpull($projects, 'getAuthorPHID');
     $handles = id(new PhabricatorObjectHandleData($author_phids))->loadHandles();
     $query = id(new ManiphestTaskQuery())->withProjects($project_phids)->withAnyProject(true)->withStatus(ManiphestTaskQuery::STATUS_OPEN)->setLimit(PHP_INT_MAX);
     $tasks = $query->execute();
     $groups = array();
     foreach ($tasks as $task) {
         foreach ($task->getProjectPHIDs() as $phid) {
             $groups[$phid][] = $task;
         }
     }
     $rows = array();
     foreach ($projects as $project) {
         $phid = $project->getPHID();
         $profile = $profiles[$phid];
         $affiliations = $affil_groups[$phid];
         $group = idx($groups, $phid, array());
         $task_count = count($group);
         $population = count($affiliations);
         $status = PhabricatorProjectStatus::getNameForStatus($project->getStatus());
         $blurb = $profile->getBlurb();
         $blurb = phutil_utf8_shorten($blurb, $columns = 100);
         $rows[] = array(phutil_escape_html($project->getName()), phutil_escape_html($blurb), $handles[$project->getAuthorPHID()]->renderLink(), phutil_escape_html($population), phutil_escape_html($status), phutil_render_tag('a', array('href' => '/maniphest/view/all/?projects=' . $phid), phutil_escape_html($task_count)), phutil_render_tag('a', array('class' => 'small grey button', 'href' => '/project/view/' . $project->getID() . '/'), 'View Project Profile'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Project', 'Description', 'Mastermind', 'Population', 'Status', 'Open Tasks', ''));
     $table->setColumnClasses(array('pri', 'wide', '', 'right', '', 'right', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Project');
     $panel->setCreateButton('Create New Project', '/project/create/');
     return $this->buildStandardPageResponse($panel, array('title' => 'Projects'));
 }
 private function buildItemList()
 {
     $items = id(new PhabricatorDirectoryItem())->loadAll();
     $items = msort($items, 'getSortKey');
     $categories = id(new PhabricatorDirectoryCategory())->loadAll();
     $category_names = mpull($categories, 'getName', 'getID');
     $rows = array();
     foreach ($items as $item) {
         $rows[] = array($item->getID(), phutil_escape_html(idx($category_names, $item->getCategoryID())), phutil_render_tag('a', array('href' => '/directory/item/edit/' . $item->getID() . '/'), phutil_escape_html($item->getName())), javelin_render_tag('a', array('href' => '/directory/item/delete/' . $item->getID() . '/', 'class' => 'button grey small', 'sigil' => 'workflow'), 'Delete'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('ID', 'Category', 'Name', ''));
     $table->setColumnClasses(array(null, null, 'wide', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Directory Items');
     $panel->setCreateButton('New Item', '/directory/item/edit/');
     return $panel;
 }
 public function render()
 {
     $rows = array();
     foreach ($this->rules as $rule) {
         $owner = $this->handles[$rule->getAuthorPHID()]->renderLink();
         $name = phutil_render_tag('a', array('href' => '/herald/rule/' . $rule->getID() . '/'), phutil_escape_html($rule->getName()));
         $delete = javelin_render_tag('a', array('href' => '/herald/delete/' . $rule->getID() . '/', 'sigil' => 'workflow', 'class' => 'button small grey'), 'Delete');
         $rows[] = array($this->map[$rule->getContentType()], $owner, $name, $delete);
     }
     $rules_for = phutil_escape_html($this->map[$this->view]);
     $table = new AphrontTableView($rows);
     $table->setNoDataString("No matching subscription rules for {$rules_for}.");
     $table->setHeaders(array('Type', 'Owner', 'Rule Name', ''));
     $table->setColumnClasses(array('', '', 'wide wrap pri', 'action'));
     $panel = new AphrontPanelView();
     $panel->setHeader("Herald Rules for {$rules_for}");
     if ($this->allowCreation) {
         $panel->setCreateButton('Create New Herald Rule', '/herald/new/' . $this->view . '/');
     }
     $panel->appendChild($table);
     return $panel;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $author = null;
     $author_username = $request->getStr('author');
     if ($author_username) {
         $author = id(new PhabricatorUser())->loadOneWhere('userName = %s', $author_username);
         if (!$author) {
             return id(new Aphront404Response());
         }
     }
     $pager = new AphrontPagerView();
     $pager->setOffset($request->getInt('page'));
     if ($author) {
         $files = id(new PhabricatorFile())->loadAllWhere('authorPHID = %s ORDER BY id DESC LIMIT %d, %d', $author->getPHID(), $pager->getOffset(), $pager->getPageSize() + 1);
     } else {
         $files = id(new PhabricatorFile())->loadAllWhere('1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize() + 1);
     }
     $files = $pager->sliceResults($files);
     $pager->setURI($request->getRequestURI(), 'page');
     $rows = array();
     foreach ($files as $file) {
         if ($file->isViewableInBrowser()) {
             $view_button = phutil_render_tag('a', array('class' => 'small button grey', 'href' => '/file/view/' . $file->getPHID() . '/'), 'View');
         } else {
             $view_button = null;
         }
         $rows[] = array(phutil_escape_html($file->getPHID()), phutil_escape_html($file->getName()), phutil_escape_html($file->getByteSize()), phutil_render_tag('a', array('class' => 'small button grey', 'href' => '/file/info/' . $file->getPHID() . '/'), 'Info'), $view_button, phutil_render_tag('a', array('class' => 'small button grey', 'href' => '/file/download/' . $file->getPHID() . '/'), 'Download'));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('PHID', 'Name', 'Size', '', '', ''));
     $table->setColumnClasses(array(null, 'wide', null, 'action', 'action', 'action'));
     $panel = new AphrontPanelView();
     $panel->appendChild($table);
     $panel->setHeader('Files');
     $panel->setCreateButton('Upload File', '/file/upload/');
     $panel->appendChild($pager);
     return $this->buildStandardPageResponse($panel, array('title' => 'Files', 'tab' => 'files'));
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $map = HeraldContentTypeConfig::getContentTypeMap();
     if (empty($map[$this->view])) {
         reset($map);
         $this->view = key($map);
     }
     $rules = id(new HeraldRule())->loadAllWhere('contentType = %s AND authorPHID = %s', $this->view, $user->getPHID());
     $need_phids = mpull($rules, 'getAuthorPHID');
     $handles = id(new PhabricatorObjectHandleData($need_phids))->loadHandles();
     $type = 'differential';
     $rows = array();
     foreach ($rules as $rule) {
         $owner = $handles[$rule->getAuthorPHID()]->renderLink();
         $name = phutil_render_tag('a', array('href' => '/herald/rule/' . $rule->getID() . '/'), phutil_escape_html($rule->getName()));
         $delete = 'delete';
         $delete = javelin_render_tag('a', array('href' => '/herald/delete/' . $rule->getID() . '/', 'sigil' => 'workflow', 'class' => 'button small grey'), 'Delete');
         $rows[] = array($map[$rule->getContentType()], $owner, $name, $delete);
     }
     $rules_for = phutil_escape_html($map[$this->view]);
     $table = new AphrontTableView($rows);
     $table->setNoDataString("No matching subscription rules for {$rules_for}.");
     $table->setHeaders(array('Type', 'Owner', 'Rule Name', ''));
     $table->setColumnClasses(array('', '', 'wide wrap pri', 'action'));
     $panel = new AphrontPanelView();
     $panel->setHeader("Herald Rules for {$rules_for}");
     $panel->setCreateButton('Create New Herald Rule', '/herald/new/' . $this->view . '/');
     $panel->appendChild($table);
     $sidenav = new AphrontSideNavView();
     $sidenav->appendChild($panel);
     foreach ($map as $key => $value) {
         $sidenav->addNavItem(phutil_render_tag('a', array('href' => '/herald/view/' . $key . '/', 'class' => $key == $this->view ? 'aphront-side-nav-selected' : null), phutil_escape_html($value)));
     }
     return $this->buildStandardPageResponse($sidenav, array('title' => 'Herald', 'tab' => 'rules'));
 }
 private function renderUploadPanel()
 {
     $request = $this->getRequest();
     $user = $request->getUser();
     $limit_text = PhabricatorFileUploadView::renderUploadLimit();
     if ($this->useBasicUploader()) {
         $upload_panel = new PhabricatorFileUploadView();
         $upload_panel->setUser($user);
     } else {
         require_celerity_resource('files-css');
         $upload_id = celerity_generate_unique_node_id();
         $panel_id = celerity_generate_unique_node_id();
         $upload_panel = new AphrontPanelView();
         $upload_panel->setHeader('Upload Files');
         $upload_panel->setCaption($limit_text);
         $upload_panel->setCreateButton('Basic Uploader', $request->getRequestURI()->setQueryParam('basic_uploader', true));
         $upload_panel->setWidth(AphrontPanelView::WIDTH_FULL);
         $upload_panel->setID($panel_id);
         $upload_panel->appendChild(phutil_render_tag('div', array('id' => $upload_id, 'style' => 'display: none;', 'class' => 'files-drag-and-drop'), ''));
         Javelin::initBehavior('files-drag-and-drop', array('uri' => '/file/dropupload/', 'browseURI' => '/file/filter/my/', 'control' => $upload_id, 'target' => $panel_id, 'activatedClass' => 'aphront-panel-view-drag-and-drop'));
     }
     return $upload_panel;
 }
 public function processRequest()
 {
     $request = $this->getRequest();
     $nav = new AphrontSideNavFilterView();
     $nav->setBaseURI(new PhutilURI('/project/filter/'))->addLabel('User')->addFilter('active', 'Active')->addFilter('owned', 'Owned')->addSpacer()->addLabel('All')->addFilter('all', 'All Projects');
     $this->filter = $nav->selectFilter($this->filter, 'active');
     $pager = new AphrontPagerView();
     $pager->setPageSize(250);
     $pager->setURI($request->getRequestURI(), 'page');
     $pager->setOffset($request->getInt('page'));
     $query = new PhabricatorProjectQuery();
     $query->setOffset($pager->getOffset());
     $query->setLimit($pager->getPageSize() + 1);
     $view_phid = $request->getUser()->getPHID();
     switch ($this->filter) {
         case 'active':
             $table_header = 'Active Projects';
             $query->setMembers(array($view_phid));
             break;
         case 'owned':
             $table_header = 'Owned Projects';
             $query->setOwners(array($view_phid));
             break;
         case 'all':
             $table_header = 'All Projects';
             break;
     }
     $projects = $query->execute();
     $projects = $pager->sliceResults($projects);
     $project_phids = mpull($projects, 'getPHID');
     $profiles = array();
     if ($projects) {
         $profiles = id(new PhabricatorProjectProfile())->loadAllWhere('projectPHID in (%Ls)', $project_phids);
         $profiles = mpull($profiles, null, 'getProjectPHID');
     }
     $affil_groups = array();
     if ($projects) {
         $affil_groups = PhabricatorProjectAffiliation::loadAllForProjectPHIDs($project_phids);
     }
     $tasks = array();
     $groups = array();
     if ($project_phids) {
         $query = id(new ManiphestTaskQuery())->withProjects($project_phids)->withAnyProject(true)->withStatus(ManiphestTaskQuery::STATUS_OPEN)->setLimit(PHP_INT_MAX);
         $tasks = $query->execute();
         foreach ($tasks as $task) {
             foreach ($task->getProjectPHIDs() as $phid) {
                 $groups[$phid][] = $task;
             }
         }
     }
     $rows = array();
     foreach ($projects as $project) {
         $phid = $project->getPHID();
         $profile = $profiles[$phid];
         $affiliations = $affil_groups[$phid];
         $group = idx($groups, $phid, array());
         $task_count = count($group);
         $population = count($affiliations);
         $blurb = $profile->getBlurb();
         $blurb = phutil_utf8_shorten($blurb, 64);
         $rows[] = array(phutil_render_tag('a', array('href' => '/project/view/' . $project->getID() . '/'), phutil_escape_html($project->getName())), phutil_escape_html($blurb), phutil_escape_html($population), phutil_render_tag('a', array('href' => '/maniphest/view/all/?projects=' . $phid), phutil_escape_html($task_count)));
     }
     $table = new AphrontTableView($rows);
     $table->setHeaders(array('Project', 'Description', 'Population', 'Open Tasks'));
     $table->setColumnClasses(array('pri', 'wide', '', ''));
     $panel = new AphrontPanelView();
     $panel->setHeader($table_header);
     $panel->setCreateButton('Create New Project', '/project/create/');
     $panel->appendChild($table);
     $panel->appendChild($pager);
     $nav->appendChild($panel);
     return $this->buildStandardPageResponse($nav, array('title' => 'Projects'));
 }