Web editor/browser for image macros
Summary: Restores the old "pokedex" feature and allows easy definition of new macros. Only good can come of this! Critical feature!! Test Plan: nyancat Reviewed By: tuomaspelkonen Reviewers: aran, bh, tomo, jungejason, tuomaspelkonen CC: aran, tuomaspelkonen Differential Revision: 220
This commit is contained in:
		@@ -160,11 +160,13 @@ foreach ($package_spec as $name => $package) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ksort($runtime_map);
 | 
				
			||||||
$runtime_map = var_export($runtime_map, true);
 | 
					$runtime_map = var_export($runtime_map, true);
 | 
				
			||||||
$runtime_map = preg_replace('/\s+$/m', '', $runtime_map);
 | 
					$runtime_map = preg_replace('/\s+$/m', '', $runtime_map);
 | 
				
			||||||
$runtime_map = preg_replace('/array \(/', 'array(', $runtime_map);
 | 
					$runtime_map = preg_replace('/array \(/', 'array(', $runtime_map);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ksort($package_map['packages']);
 | 
				
			||||||
 | 
					ksort($package_map['reverse']);
 | 
				
			||||||
$package_map = var_export($package_map, true);
 | 
					$package_map = var_export($package_map, true);
 | 
				
			||||||
$pacakge_map = preg_replace('/\s+$/m', '', $package_map);
 | 
					$pacakge_map = preg_replace('/\s+$/m', '', $package_map);
 | 
				
			||||||
$package_map = preg_replace('/array \(/', 'array(', $package_map);
 | 
					$package_map = preg_replace('/array \(/', 'array(', $package_map);
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -307,6 +307,9 @@ phutil_register_library_map(array(
 | 
				
			|||||||
    'PhabricatorFileDAO' => 'applications/files/storage/base',
 | 
					    'PhabricatorFileDAO' => 'applications/files/storage/base',
 | 
				
			||||||
    'PhabricatorFileImageMacro' => 'applications/files/storage/imagemacro',
 | 
					    'PhabricatorFileImageMacro' => 'applications/files/storage/imagemacro',
 | 
				
			||||||
    'PhabricatorFileListController' => 'applications/files/controller/list',
 | 
					    'PhabricatorFileListController' => 'applications/files/controller/list',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroDeleteController' => 'applications/files/controller/macrodelete',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroEditController' => 'applications/files/controller/macroedit',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroListController' => 'applications/files/controller/macrolist',
 | 
				
			||||||
    'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
 | 
					    'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
 | 
				
			||||||
    'PhabricatorFileURI' => 'applications/files/uri',
 | 
					    'PhabricatorFileURI' => 'applications/files/uri',
 | 
				
			||||||
    'PhabricatorFileUploadController' => 'applications/files/controller/upload',
 | 
					    'PhabricatorFileUploadController' => 'applications/files/controller/upload',
 | 
				
			||||||
@@ -712,6 +715,9 @@ phutil_register_library_map(array(
 | 
				
			|||||||
    'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
 | 
					    'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
 | 
				
			||||||
    'PhabricatorFileImageMacro' => 'PhabricatorFileDAO',
 | 
					    'PhabricatorFileImageMacro' => 'PhabricatorFileDAO',
 | 
				
			||||||
    'PhabricatorFileListController' => 'PhabricatorFileController',
 | 
					    'PhabricatorFileListController' => 'PhabricatorFileController',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroDeleteController' => 'PhabricatorFileController',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroEditController' => 'PhabricatorFileController',
 | 
				
			||||||
 | 
					    'PhabricatorFileMacroListController' => 'PhabricatorFileController',
 | 
				
			||||||
    'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
 | 
					    'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
 | 
				
			||||||
    'PhabricatorFileUploadController' => 'PhabricatorFileController',
 | 
					    'PhabricatorFileUploadController' => 'PhabricatorFileController',
 | 
				
			||||||
    'PhabricatorFileViewController' => 'PhabricatorFileController',
 | 
					    'PhabricatorFileViewController' => 'PhabricatorFileController',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,6 +55,11 @@ class AphrontDefaultApplicationConfiguration
 | 
				
			|||||||
        '(?P<view>info)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
					        '(?P<view>info)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
				
			||||||
        '(?P<view>view)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
					        '(?P<view>view)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
				
			||||||
        '(?P<view>download)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
					        '(?P<view>download)/(?P<phid>[^/]+)/' => 'PhabricatorFileViewController',
 | 
				
			||||||
 | 
					        'macro/' => array(
 | 
				
			||||||
 | 
					          '$' => 'PhabricatorFileMacroListController',
 | 
				
			||||||
 | 
					          'edit/(?:(?P<id>\d+)/)?$' => 'PhabricatorFileMacroEditController',
 | 
				
			||||||
 | 
					          'delete/(?P<id>\d+)/$' => 'PhabricatorFileMacroDeleteController',
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      '/phid/' => array(
 | 
					      '/phid/' => array(
 | 
				
			||||||
        '$' => 'PhabricatorPHIDLookupController',
 | 
					        '$' => 'PhabricatorPHIDLookupController',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,18 @@ abstract class PhabricatorFileController extends PhabricatorController {
 | 
				
			|||||||
    $page->setBaseURI('/file/');
 | 
					    $page->setBaseURI('/file/');
 | 
				
			||||||
    $page->setTitle(idx($data, 'title'));
 | 
					    $page->setTitle(idx($data, 'title'));
 | 
				
			||||||
    $page->setGlyph("\xE2\x87\xAA");
 | 
					    $page->setGlyph("\xE2\x87\xAA");
 | 
				
			||||||
 | 
					    $page->setTabs(
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        'files' => array(
 | 
				
			||||||
 | 
					          'name' => 'Files',
 | 
				
			||||||
 | 
					          'href' => '/file/',
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        'macros' => array(
 | 
				
			||||||
 | 
					          'name' => 'Image Macros',
 | 
				
			||||||
 | 
					          'href' => '/file/macro/',
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      idx($data, 'tab'));
 | 
				
			||||||
    $page->appendChild($view);
 | 
					    $page->appendChild($view);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $response = new AphrontWebpageResponse();
 | 
					    $response = new AphrontWebpageResponse();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2011 Facebook, Inc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PhabricatorFileMacroDeleteController extends PhabricatorFileController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private $id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public function willProcessRequest(array $data) {
 | 
				
			||||||
 | 
					    $this->id = $data['id'];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public function processRequest() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $macro = id(new PhabricatorFileImageMacro())->load($this->id);
 | 
				
			||||||
 | 
					    if (!$macro) {
 | 
				
			||||||
 | 
					      return new Aphront404Response();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $request = $this->getRequest();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($request->isDialogFormPost()) {
 | 
				
			||||||
 | 
					      $macro->delete();
 | 
				
			||||||
 | 
					      return id(new AphrontRedirectResponse())->setURI('/file/macro/');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $dialog = new AphrontDialogView();
 | 
				
			||||||
 | 
					    $dialog
 | 
				
			||||||
 | 
					      ->setUser($request->getUser())
 | 
				
			||||||
 | 
					      ->setTitle('Really delete macro?')
 | 
				
			||||||
 | 
					      ->appendChild(
 | 
				
			||||||
 | 
					        '<p>Really delete the much-beloved image macro "'.
 | 
				
			||||||
 | 
					        phutil_escape_html($macro->getName()).'"? It will be sorely missed.'.
 | 
				
			||||||
 | 
					        '</p>')
 | 
				
			||||||
 | 
					      ->setSubmitURI('/file/macro/delete/'.$this->id.'/')
 | 
				
			||||||
 | 
					      ->addSubmitButton('Delete')
 | 
				
			||||||
 | 
					      ->addCancelButton('/file/macro/');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return id(new AphrontDialogResponse())->setDialog($dialog);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										20
									
								
								src/applications/files/controller/macrodelete/__init__.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/applications/files/controller/macrodelete/__init__.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This file is automatically generated. Lint this module to rebuild it.
 | 
				
			||||||
 | 
					 * @generated
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'aphront/response/404');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'aphront/response/dialog');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'aphront/response/redirect');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/controller/base');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/storage/imagemacro');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/dialog');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phutil', 'markup');
 | 
				
			||||||
 | 
					phutil_require_module('phutil', 'utils');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_source('PhabricatorFileMacroDeleteController.php');
 | 
				
			||||||
@@ -0,0 +1,124 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2011 Facebook, Inc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PhabricatorFileMacroEditController extends PhabricatorFileController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private $id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public function willProcessRequest(array $data) {
 | 
				
			||||||
 | 
					    $this->id = idx($data, 'id');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public function processRequest() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($this->id) {
 | 
				
			||||||
 | 
					      $macro = id(new PhabricatorFileImageMacro())->load($this->id);
 | 
				
			||||||
 | 
					      if (!$macro) {
 | 
				
			||||||
 | 
					        return new Aphront404Response();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      $macro = new PhabricatorFileImageMacro();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $errors = array();
 | 
				
			||||||
 | 
					    $e_name = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $request = $this->getRequest();
 | 
				
			||||||
 | 
					    if ($request->isFormPost()) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      $macro->setName($request->getStr('name'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!strlen($macro->getName())) {
 | 
				
			||||||
 | 
					        $errors[] = 'Macro name is required.';
 | 
				
			||||||
 | 
					        $e_name = 'Required';
 | 
				
			||||||
 | 
					      } else if (!preg_match('/^[a-z0-9_-]{3,}$/', $macro->getName())) {
 | 
				
			||||||
 | 
					        $errors[] = 'Macro must be at least three characters long and contain '.
 | 
				
			||||||
 | 
					                    'only lowercase letters, digits, hyphen and underscore.';
 | 
				
			||||||
 | 
					        $e_name = 'Invalid';
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        $e_name = null;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (!$errors) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $file = PhabricatorFile::newFromPHPUpload(
 | 
				
			||||||
 | 
					          idx($_FILES, 'file'),
 | 
				
			||||||
 | 
					          array(
 | 
				
			||||||
 | 
					            'name' => $request->getStr('name'),
 | 
				
			||||||
 | 
					          ));
 | 
				
			||||||
 | 
					        $macro->setFilePHID($file->getPHID());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					          $macro->save();
 | 
				
			||||||
 | 
					          return id(new AphrontRedirectResponse())->setURI('/file/macro/');
 | 
				
			||||||
 | 
					        } catch (AphrontQueryDuplicateKeyException $ex) {
 | 
				
			||||||
 | 
					          $errors[] = 'Macro name is not unique!';
 | 
				
			||||||
 | 
					          $e_name = 'Duplicate';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($errors) {
 | 
				
			||||||
 | 
					      $error_view = new AphrontErrorView();
 | 
				
			||||||
 | 
					      $error_view->setTitle('Form Errors');
 | 
				
			||||||
 | 
					      $error_view->setErrors($errors);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      $error_view = null;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $form = new AphrontFormView();
 | 
				
			||||||
 | 
					    $form->setAction('/file/macro/edit/');
 | 
				
			||||||
 | 
					    $form->setUser($request->getUser());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $form
 | 
				
			||||||
 | 
					      ->setEncType('multipart/form-data')
 | 
				
			||||||
 | 
					      ->appendChild(
 | 
				
			||||||
 | 
					        id(new AphrontFormTextControl())
 | 
				
			||||||
 | 
					          ->setLabel('Name')
 | 
				
			||||||
 | 
					          ->setName('name')
 | 
				
			||||||
 | 
					          ->setValue($macro->getName())
 | 
				
			||||||
 | 
					          ->setCaption('This word or phrase will be replaced with the image.')
 | 
				
			||||||
 | 
					          ->setError($e_name))
 | 
				
			||||||
 | 
					      ->appendChild(
 | 
				
			||||||
 | 
					        id(new AphrontFormFileControl())
 | 
				
			||||||
 | 
					          ->setLabel('File')
 | 
				
			||||||
 | 
					          ->setName('file')
 | 
				
			||||||
 | 
					          ->setError(true))
 | 
				
			||||||
 | 
					      ->appendChild(
 | 
				
			||||||
 | 
					        id(new AphrontFormSubmitControl())
 | 
				
			||||||
 | 
					          ->setValue('Save Image Macro')
 | 
				
			||||||
 | 
					          ->addCancelButton('/file/macro/'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $panel = new AphrontPanelView();
 | 
				
			||||||
 | 
					    if ($macro->getID()) {
 | 
				
			||||||
 | 
					      $panel->setHeader('Edit Image Macro');
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      $panel->setHeader('Create Image Macro');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $panel->appendChild($form);
 | 
				
			||||||
 | 
					    $panel->setWidth(AphrontPanelView::WIDTH_FORM);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return $this->buildStandardPageResponse(
 | 
				
			||||||
 | 
					      array($error_view, $panel),
 | 
				
			||||||
 | 
					      array(
 | 
				
			||||||
 | 
					        'title' => 'Edit Image Macro',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										24
									
								
								src/applications/files/controller/macroedit/__init__.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/applications/files/controller/macroedit/__init__.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This file is automatically generated. Lint this module to rebuild it.
 | 
				
			||||||
 | 
					 * @generated
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'aphront/response/404');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'aphront/response/redirect');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/controller/base');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/storage/file');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/storage/imagemacro');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/form/base');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/form/control/file');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/form/control/submit');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/form/control/text');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/form/error');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/layout/panel');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phutil', 'utils');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_source('PhabricatorFileMacroEditController.php');
 | 
				
			||||||
@@ -0,0 +1,89 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2011 Facebook, Inc.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *   http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PhabricatorFileMacroListController extends PhabricatorFileController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public function processRequest() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $request = $this->getRequest();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $pager = new AphrontPagerView();
 | 
				
			||||||
 | 
					    $pager->setOffset($request->getInt('page'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $macros = id(new PhabricatorFileImageMacro())->loadAllWhere(
 | 
				
			||||||
 | 
					      '1 = 1 ORDER BY id DESC LIMIT %d, %d',
 | 
				
			||||||
 | 
					      $pager->getOffset(),
 | 
				
			||||||
 | 
					      $pager->getPageSize() + 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $macros = $pager->sliceResults($macros);
 | 
				
			||||||
 | 
					    $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(
 | 
				
			||||||
 | 
					          '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',
 | 
				
			||||||
 | 
					      ));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										21
									
								
								src/applications/files/controller/macrolist/__init__.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/applications/files/controller/macrolist/__init__.php
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This file is automatically generated. Lint this module to rebuild it.
 | 
				
			||||||
 | 
					 * @generated
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/controller/base');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/storage/imagemacro');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'applications/files/uri');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'infrastructure/javelin/markup');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/control/pager');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/control/table');
 | 
				
			||||||
 | 
					phutil_require_module('phabricator', 'view/layout/panel');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_module('phutil', 'markup');
 | 
				
			||||||
 | 
					phutil_require_module('phutil', 'utils');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					phutil_require_source('PhabricatorFileMacroListController.php');
 | 
				
			||||||
@@ -86,3 +86,8 @@
 | 
				
			|||||||
  color:      #888888;
 | 
					  color:      #888888;
 | 
				
			||||||
  font-style: italic;
 | 
					  font-style: italic;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.aphront-table-view td.thumb img {
 | 
				
			||||||
 | 
					  max-width: 64px;
 | 
				
			||||||
 | 
					  max-height: 64px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user