Overview

Packages

  • alpha::controller
  • alpha::controller::front
  • alpha::exceptions
  • alpha::model
  • alpha::model::types
  • alpha::tasks
  • alpha::tests
  • alpha::util
  • alpha::util::cache
  • alpha::util::codehighlight
  • alpha::util::convertors
  • alpha::util::feeds
  • alpha::util::filters
  • alpha::util::graphs
  • alpha::util::helpers
  • alpha::util::metrics
  • alpha::view
  • alpha::view::renderers
  • alpha::view::widgets

Classes

  • AlphaController
  • CacheManager
  • Create
  • CreateArticle
  • Detail
  • Edit
  • EditArticle
  • EditDEnum
  • EditTags
  • GenSecureQueryStrings
  • Install
  • ListAll
  • ListBusinessObjects
  • ListDEnums
  • ListSequences
  • Login
  • Logout
  • PreviewArticle
  • Search
  • TagManager
  • ViewArticle
  • ViewArticleFile
  • ViewArticlePDF
  • ViewArticlePrint
  • ViewArticleTitle
  • ViewAttachment
  • ViewExcel
  • ViewFeed
  • ViewImage
  • ViewLog
  • ViewMetrics
  • ViewRecordSelector
  • ViewTestResults

Interfaces

  • AlphaControllerInterface
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: // include the config file
  4: if(!isset($config)) {
  5:     require_once '../util/AlphaConfig.inc';
  6:     $config = AlphaConfig::getInstance();
  7:     
  8:     require_once $config->get('app.root').'alpha/util/AlphaAutoLoader.inc';
  9: }
 10: 
 11: /**
 12:  * 
 13:  * Controller used to list a BO, which must be supplied in GET vars
 14:  * 
 15:  * @package alpha::controller
 16:  * @since 1.0
 17:  * @author John Collins <dev@alphaframework.org>
 18:  * @version $Id: ListAll.php 1548 2012-07-29 17:07:07Z alphadevx $
 19:  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
 20:  * @copyright Copyright (c) 2012, John Collins (founder of Alpha Framework).  
 21:  * All rights reserved.
 22:  * 
 23:  * <pre>
 24:  * Redistribution and use in source and binary forms, with or 
 25:  * without modification, are permitted provided that the 
 26:  * following conditions are met:
 27:  * 
 28:  * * Redistributions of source code must retain the above 
 29:  *   copyright notice, this list of conditions and the 
 30:  *   following disclaimer.
 31:  * * Redistributions in binary form must reproduce the above 
 32:  *   copyright notice, this list of conditions and the 
 33:  *   following disclaimer in the documentation and/or other 
 34:  *   materials provided with the distribution.
 35:  * * Neither the name of the Alpha Framework nor the names 
 36:  *   of its contributors may be used to endorse or promote 
 37:  *   products derived from this software without specific 
 38:  *   prior written permission.
 39:  *   
 40:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
 41:  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 42:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 43:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 44:  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
 45:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 46:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
 47:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 48:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 49:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 50:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 51:  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 52:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 53:  * </pre>
 54:  *  
 55:  */
 56: class ListAll extends AlphaController implements AlphaControllerInterface {
 57:     /**
 58:      * The name of the BO
 59:      * 
 60:      * @var string
 61:      * @since 1.0
 62:      */
 63:     protected $BOname;
 64:     
 65:     /**
 66:      * The new default AlphaView object used for rendering the onjects to list
 67:      * 
 68:      * @var AlphaView
 69:      * @since 1.0
 70:      */
 71:     protected $BOView;
 72:     
 73:     /**
 74:      * The start number for list pageination
 75:      * 
 76:      * @var integer
 77:      * @since 1.0
 78:      */
 79:     protected $startPoint;
 80:     
 81:     /**
 82:      * The count of the BOs of this type in the database
 83:      * 
 84:      * @var integer
 85:      * @since 1.0
 86:      */
 87:     protected $BOCount = 0;
 88:     
 89:     /**
 90:      * The field name to sort the list by (optional, default is OID)
 91:      * 
 92:      * @var string
 93:      * @since 1.0
 94:      */
 95:     protected $sort;
 96:     
 97:     /**
 98:      * The order to sort the list by (optional, should be ASC or DESC, default is ASC)
 99:      * 
100:      * @var string
101:      * @since 1.0
102:      */
103:     protected $order;
104:     
105:     /**
106:      * The name of the BO field to filter the list by (optional)
107:      * 
108:      * @var string
109:      * @since 1.0
110:      */
111:     protected $filterField;
112:     
113:     /**
114:      * The value of the filterField to filter by (optional)
115:      * 
116:      * @var string
117:      * @since 1.0
118:      */
119:     protected $filterValue;
120:     
121:     /**
122:      * Trace logger
123:      * 
124:      * @var Logger
125:      * @since 1.0
126:      */
127:     private static $logger = null;
128:                                 
129:     /**
130:      * Constructor to set up the object
131:      * 
132:      * @param string $visibility
133:      * @since 1.0
134:      */
135:     public function __construct($visibility='Admin') {
136:         self::$logger = new Logger('ListAll');
137:         self::$logger->debug('>>__construct()');
138:         
139:         global $config;
140:                 
141:         // ensure that the super class constructor is called, indicating the rights group
142:         parent::__construct($visibility);
143:         
144:         self::$logger->debug('<<__construct');
145:     }
146: 
147:     /**
148:      * Handle GET requests
149:      * 
150:      * @param array $params
151:      * @since 1.0
152:      */
153:     public function doGET($params) {
154:         self::$logger->debug('>>doGET($params=['.var_export($params, true).'])');
155:         
156:         try{
157:             // load the business object (BO) definition
158:             if (isset($params['bo'])) {
159:                 $BOname = $params['bo'];
160:                 $this->BOname = $BOname;
161:             }elseif(isset($this->BOname)) {
162:                 $BOname = $this->BOname;
163:             }else{
164:                 throw new IllegalArguementException('No BO available to list!');
165:             }
166:             
167:             if (isset($params['order'])) {
168:                 if($params['order'] == 'ASC' || $params['order'] == 'DESC')
169:                     $this->order = $params['order'];
170:                 else
171:                     throw new IllegalArguementException('Order value ['.$params['order'].'] provided is invalid!');
172:             }
173:             
174:             if (isset($params['sort']))
175:                 $this->sort = $params['sort'];
176:                 
177:             AlphaDAO::loadClassDef($BOname);
178:             
179:             /*
180:              *  check and see if a custom create controller exists for this BO, and if it does use it otherwise continue
181:              */
182:             if($this->getCustomControllerName($BOname, 'list') != null)
183:                 $this->loadCustomController($BOname, 'list');
184:                 
185:             $this->BO = new $BOname();
186:             $this->BOView = AlphaView::getInstance($this->BO);
187:                 
188:             echo AlphaView::displayPageHead($this);
189:         }catch(IllegalArguementException $e) {
190:             self::$logger->error($e->getMessage());
191:         }
192:         
193:         $this->displayBodyContent();
194:         
195:         echo AlphaView::displayPageFoot($this);
196:         
197:         self::$logger->debug('<<doGET');
198:     }
199:     
200:     /**
201:      * Handle POST requests
202:      * 
203:      * @param array $params
204:      * @since 1.0
205:      */
206:     public function doPOST($params) {
207:         self::$logger->debug('>>doPOST($params=['.var_export($params, true).'])');
208:         
209:         try{
210:             // check the hidden security fields before accepting the form POST data
211:             if(!$this->checkSecurityFields()) {
212:                 throw new SecurityException('This page cannot accept post data from remote servers!');
213:                 self::$logger->debug('<<doPOST');
214:             }
215:             
216:             // load the business object (BO) definition
217:             if (isset($params['bo'])) {
218:                 $BOname = $params['bo'];
219:                 $this->BOname = $BOname;
220:             }elseif(isset($this->BOname)) {
221:                 $BOname = $this->BOname;
222:             }else{
223:                 throw new IllegalArguementException('No BO available to list!');
224:             }
225:             
226:             if (isset($params['order'])) {
227:                 if($params['order'] == 'ASC' || $params['order'] == 'DESC')
228:                     $this->order = $params['order'];
229:                 else
230:                     throw new IllegalArguementException('Order value ['.$params['order'].'] provided is invalid!');
231:             }
232:             
233:             if (isset($params['sort']))
234:                 $this->sort = $params['sort'];
235:             
236:             AlphaDAO::loadClassDef($BOname);
237:                 
238:             $this->BO = new $BOname();      
239:             $this->BOname = $BOname;        
240:             $this->BOView = AlphaView::getInstance($this->BO);
241:             
242:             echo AlphaView::displayPageHead($this);
243:                 
244:             if (!empty($params['deleteOID'])) {
245:                 if(!AlphaValidator::isInteger($params['deleteOID']))
246:                         throw new IllegalArguementException('Invalid deleteOID ['.$params['deleteOID'].'] provided on the request!');
247:                 
248:                 try {
249:                     $temp = new $BOname();
250:                     $temp->load($params['deleteOID']);
251:                     
252:                     AlphaDAO::begin();
253:                     $temp->delete();
254:                     AlphaDAO::commit();
255: 
256:                     echo AlphaView::displayUpdateMessage($BOname.' '.$params['deleteOID'].' deleted successfully.');
257:                             
258:                     $this->displayBodyContent();
259:                 }catch(AlphaException $e) {
260:                     self::$logger->error($e->getMessage());
261:                     echo AlphaView::displayErrorMessage('Error deleting the BO of OID ['.$params['deleteOID'].'], check the log!');
262:                     AlphaDAO::rollback();
263:                 }
264:                 
265:                 AlphaDAO::disconnect();
266:             }
267:         }catch(SecurityException $e) {
268:             echo AlphaView::displayErrorMessage($e->getMessage());
269:             self::$logger->warn($e->getMessage());
270:         }catch(IllegalArguementException $e) {
271:             echo AlphaView::displayErrorMessage($e->getMessage());
272:             self::$logger->error($e->getMessage());
273:         }
274:         
275:         echo AlphaView::displayPageFoot($this);
276:         
277:         self::$logger->debug('<<doPOST');
278:     }
279:     
280:     /**
281:      * Sets up the title etc. and pagination start point
282:      * 
283:      * @since 1.0
284:      */
285:     public function before_displayPageHead_callback() {
286:         // set up the title and meta details
287:         if(!isset($this->title))
288:             $this->setTitle('Listing all '.$this->BOname);
289:         if(!isset($this->description))
290:             $this->setDescription('Page listing all '.$this->BOname.'.');
291:         if(!isset($this->keywords))
292:             $this->setKeywords('list,all,'.$this->BOname);
293:         // set the start point for the list pagination
294:         if (isset($_GET['start']) ? $this->startPoint = $_GET['start']: $this->startPoint = 1);
295:     }
296:     
297:     /**
298:      * Method to display the page footer with pageination links
299:      * 
300:      * @return string
301:      * @since 1.0
302:      */
303:     public function before_displayPageFoot_callback() {
304:         $html = $this->renderPageLinks();
305:         
306:         $html .= '<br>';
307:         
308:         return $html;
309:     }
310:     
311:     /**
312:      * Method for rendering the pagination links
313:      * 
314:      * @return string
315:      * @since 1.0
316:      */
317:     protected function renderPageLinks() {
318:         global $config;
319:         
320:         $html = '';
321:         
322:         $end = (($this->startPoint-1)+$config->get('app.list.page.amount'));
323:         
324:         if($end > $this->BOCount)
325:             $end = $this->BOCount;
326:         
327:         if($this->BOCount > 0)
328:             $html .= '<p align="center">Displaying '.($this->startPoint).' to '.$end.' of <strong>'.$this->BOCount.'</strong>.&nbsp;&nbsp;';
329:         else
330:             $html .= '<p align="center">The list is empty.&nbsp;&nbsp;';
331:                 
332:         if ($this->startPoint > 1) {
333:             // handle secure URLs
334:             if(isset($_GET['tk']))
335:                 $html .= '<a href="'.FrontController::generateSecureURL('act=ListAll&bo='.$this->BOname.'&start='.($this->startPoint-$config->get('app.list.page.amount'))).'">&lt;&lt;-Previous</a>&nbsp;&nbsp;';
336:             else
337:                 $html .= '<a href="'.$_SERVER["PHP_SELF"].'?bo='.$this->BOname."&start=".($this->startPoint-$config->get('app.list.page.amount')).'">&lt;&lt;-Previous</a>&nbsp;&nbsp;';
338:         }elseif($this->BOCount > $config->get('app.list.page.amount')){
339:             $html .= '&lt;&lt;-Previous&nbsp;&nbsp;';
340:         }
341:         $page = 1;
342:         for ($i = 0; $i < $this->BOCount; $i+=$config->get('app.list.page.amount')) {
343:             if($i != ($this->startPoint-1)) {
344:                 // handle secure URLs
345:                 if(isset($_GET['tk']))
346:                     $html .= '&nbsp;<a href="'.FrontController::generateSecureURL('act=ListAll&bo='.$this->BOname.'&start='.($i+1)).'">'.$page.'</a>&nbsp;';
347:                 else
348:                     $html .= '&nbsp;<a href="'.$_SERVER["PHP_SELF"].'?bo='.$this->BOname."&start=".($i+1).'">'.$page.'</a>&nbsp;';
349:             }elseif($this->BOCount > $config->get('app.list.page.amount')){
350:                 $html .= '&nbsp;'.$page.'&nbsp;';
351:             }
352:             $page++;
353:         }
354:         if ($this->BOCount > $end) {
355:             // handle secure URLs
356:             if(isset($_GET['tk']))
357:                 $html .= '&nbsp;&nbsp;<a href="'.FrontController::generateSecureURL('act=ListAll&bo='.$this->BOname.'&start='.($this->startPoint+$config->get('app.list.page.amount'))).'">Next-&gt;&gt;</a>';
358:             else
359:                 $html .= '&nbsp;&nbsp;<a href="'.$_SERVER["PHP_SELF"].'?bo='.$this->BOname."&start=".($this->startPoint+$config->get('app.list.page.amount')).
360:                     '">Next-&gt;&gt;</a>';
361:         }elseif($this->BOCount > $config->get('app.list.page.amount')){
362:             $html .= '&nbsp;&nbsp;Next-&gt;&gt;';
363:         }
364:         $html .= '</p>';
365:         
366:         return $html;
367:     }
368:     
369:     /**
370:      * Method to display the main body HTML for this page
371:      * 
372:      * @since 1.0
373:      */
374:     protected function displayBodyContent() {
375:         global $config;
376:         
377:         // get all of the BOs and invoke the listView on each one
378:         $temp = new $this->BOname;
379:         
380:         if(isset($this->filterField) && isset($this->filterValue)) {
381:             if(isset($this->sort) && isset($this->order)) {
382:                 $objects = $temp->loadAllByAttribute($this->filterField, $this->filterValue, $this->startPoint-1, $config->get('app.list.page.amount'),
383:                     $this->sort, $this->order);
384:             }else{
385:                 $objects = $temp->loadAllByAttribute($this->filterField, $this->filterValue, $this->startPoint-1, $config->get('app.list.page.amount'));
386:             }
387:                 
388:             $this->BOCount = $temp->getCount(array($this->filterField), array($this->filterValue));
389:         }else{
390:             if(isset($this->sort) && isset($this->order))
391:                 $objects = $temp->loadAll($this->startPoint-1, $config->get('app.list.page.amount'), $this->sort, $this->order);
392:             else
393:                 $objects = $temp->loadAll($this->startPoint-1, $config->get('app.list.page.amount'));
394:                 
395:             $this->BOCount = $temp->getCount();
396:         }
397:         
398:         AlphaDAO::disconnect();
399:         
400:         echo AlphaView::renderDeleteForm();
401:         
402:         foreach($objects as $object) {
403:             $temp = AlphaView::getInstance($object);
404:             $temp->listView();
405:         }
406:     }
407:     
408:     /**
409:      * Use this callback to inject in the admin menu template fragment for admin users of
410:      * the backend only.
411:      * 
412:      * @since 1.2
413:      */
414:     public function after_displayPageHead_callback() {
415:         $menu = '';
416:         
417:         if (isset($_SESSION['currentUser']) && AlphaDAO::isInstalled() && $_SESSION['currentUser']->inGroup('Admin') && strpos($_SERVER['REQUEST_URI'], '/tk/') !== false) {
418:             $menu .= AlphaView::loadTemplateFragment('html', 'adminmenu.phtml', array());
419:         }
420:         
421:         return $menu;
422:     }
423: }
424: 
425: // now build the new controller
426: if(basename($_SERVER['PHP_SELF']) == 'ListAll.php') {
427:     $controller = new ListAll();
428:     
429:     if(!empty($_POST)) {            
430:         $controller->doPOST($_REQUEST);
431:     }else{
432:         $controller->doGET($_GET);
433:     }
434: }
435: 
436: ?>
Alpha Framework ${alpha.version.new} API Documentation API documentation generated by ApiGen 2.8.0