Advertisement
terorama

mvcnew / utils/decorator.inc.php

Apr 30th, 2013
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.77 KB | None | 0 0
  1. <?php
  2.  
  3. class Decorator implements IDecorator, IInjectable {
  4.  
  5.    private $_view;
  6.    private $_model;
  7.    
  8.    private $headerblock='';
  9.    
  10.    private $infoblock = '';
  11.    private $maincontent = '';
  12.  
  13.    private $editblock = '';
  14.    private $navblock = '';
  15.  
  16.    
  17.    public function __construct($injector) {
  18.    
  19.       $this->_model = $injector->get('IModel');
  20.    }
  21.    //-----------------------------   setup parent view
  22.    public function setup($view) {  
  23.       $this->_view = $view;
  24.    }
  25.    
  26.    //----------------------------   get header block  
  27.    public function getHeader() {  
  28.       return $this->headerblock;
  29.    }
  30.    
  31.    //----------------------------   get content block  
  32.    public function getContent() {  
  33.       return $this->infoblock.$this->maincontent;
  34.    }
  35.    
  36.    //----------------------------   get footer block
  37.    public function getFooter() {
  38.       return $this->editblock. $this->navblock;
  39.    }
  40.    
  41.    //----------------------------   set message
  42.    public function setMessage($msg) {
  43.       $this->infoblock = $msg;
  44.    }
  45.    
  46.  
  47.    //----------------------------   draw buttons for posts
  48.    private function _drawButtons($record_id) {
  49.    
  50.       $s = '<div class="entryeditpanel">';
  51.           $s .= '<div class="editbutton"><a href="'.
  52.              $this->_view->route_edit_form($record_id).'">edit</a></div>';  
  53.              
  54.           $s .= '<div class="deletebutton"><a href="'.
  55.              $this->_view->route_delete_form($record_id).'">delete</a></div>';    
  56.              
  57.           $s .= '</div>';
  58.          
  59.           return $s;
  60.    }
  61.    
  62.    
  63.    //----------------------------   draw page entry
  64.    
  65.    private function _drawPageEntry($item) {
  66.    
  67.      
  68.           $flds = array();
  69.          
  70.            foreach ($item as $key => $val) {
  71.                foreach ($this->_model->fields as $fld) {
  72.                
  73.                   if ($fld['fn']==$key) {
  74.                       if (isset($fld['fl'])) {
  75.                          
  76.                          $flds[] = array ('class'=>$key, 'value'=>$fld['fc']
  77.                             [array_search($val, $fld['fl'])]);
  78.                          }
  79.                       else
  80.                          if ($fld['fc']!='hidden')
  81.                             $flds[] = array ('class'=>$key, 'value'=>$val);
  82.                            
  83.                       break;
  84.                     }
  85.                }
  86.           }
  87.  
  88.           $s ='<div class="entrytitle"><a href="'.
  89.              $this->_view->route_view_single($item[$this->_model->_idfield]).'">'.$flds[0]['value'].'</a></div>';
  90.          
  91.           array_shift($flds);
  92.          
  93.           foreach ($flds as $el) {
  94.              $s .='<div class="'.$el['class'].'">'.$el['value'].'</div>';
  95.            
  96.            }
  97.           $s .= $this->_drawButtons($item[$this->_model->_idfield]);
  98.          
  99.           return $s;
  100.    }
  101.    
  102.    //----------------------------   draw page
  103.    
  104.    private function _drawPage() {
  105.    
  106.       $s = '<div class="page">';  
  107.       $items = $this->_view->v_items;
  108.          
  109.       for ($i=0; $i<count($items); $i++) {
  110.          
  111.              $s .= $this->_drawPageEntry($items[$i]);
  112.           }
  113.           $s .= '</div>';
  114.          
  115.           $this->maincontent = $s;
  116.    }
  117.    
  118.    //----------------------------   draw single item
  119.    public function _drawSingle() {
  120.    
  121.           $flds = array();
  122.          
  123.           foreach ($this->_model->fields as $fld) {
  124.            
  125.              if (isset($fld['fl']))
  126.              
  127.                 $flds[] = array ('class'=>$fld['fn'], 'value'=>$fld['fc']
  128.                             [array_search($this->_view->get($fld['fn']), $fld['fl'])]);
  129.              else      
  130.                 if ($fld['fc']!='hidden')
  131.                    $flds[] = array ('class'=>$fld['fn'],
  132.                              'value'=>$this->_view->get($fld['fn']));
  133.            }
  134.            
  135.           $this->headerblock = $flds[0]['value'];
  136.           $s = '';
  137.           for ($i=1; $i<count($flds); $i++) {        
  138.          
  139.              $s .= '<div class="'.$flds[$i]['class'].'">'.$flds[$i]['value'].'</div>';
  140.           }
  141.           $this->maincontent = $s;
  142.          
  143.    }
  144.    
  145.    //----------------------------   draw form for adding or editing
  146.    
  147.    public function _drawForm($add_or_edit) {
  148.    
  149.       if ($add_or_edit == 'add')
  150.          
  151.              $action = $this->_view->route_insert();
  152.           else
  153.              $action = $this->_view->route_update($this->_view->get($this->_model->_idfield));
  154.                  
  155.       $this->_view->_form->set_action_route($action);        
  156.       $this->_view->_form->setCancelRoute($this->_view->route_view_page($this->_view->v_nav_pageid));  
  157.  
  158.       if ($add_or_edit == 'edit') {      
  159.      
  160.           $flds = array();
  161.          
  162.           foreach ($this->_model->fields as $fld) {
  163.              if (array_key_exists($fld['fn'], $this->_model->_postvars)) {
  164.              
  165.                 $flds[$fld['fn']] = $this->_view->get($fld['fn']);
  166.              }
  167.            }
  168.            $this->_view->_form->set_field_values($flds);
  169.          }
  170.          
  171.          $this->maincontent =  $this->_view->_form->draw();
  172.          
  173.    }
  174.    
  175.    //---------------------------- draw navigation
  176.    private function _drawNavigation() {
  177.    
  178.      
  179.       $s ='<div class="navigation"><ul>';
  180.      
  181.           if ($this->_view->v_nav_numpages>1)
  182.              for ($i=0; $i < $this->_view->v_nav_numpages; $i++) {
  183.              
  184.                  $s .='<li>';
  185.                  
  186.              if ($i== $this->_view->v_nav_pageid) {          
  187.                     $s .= ($i+1);                      
  188.                  } else {                
  189.                     $s .= '<a href="'. $this->_view->route_view_page($i).'">'.($i+1).'</a>';            
  190.                  }
  191.                  
  192.                  $s .= '</li>';
  193.           }
  194.           $s .= '</ul></div>';
  195.          
  196.           $this->navblock = $s;
  197.    }
  198.    
  199.     //----------------------------   draw edit block
  200.    
  201.    public function _drawEditPanel($single=true) {
  202.    
  203.       $s = '<div class="editpanel">';
  204.           $s .= '<div class="addbutton"><a href="'.$this->_view->route_add_form().'">add</a></div>';
  205.          
  206.           if ($single) {
  207.          
  208.              $s .= '<div class="editbutton"><a href="'.
  209.                        $this->_view->route_edit_form($this->_view->get($this->_model->_idfield)).'">edit</a></div>';
  210.                                                                  
  211.              $s .= '<div class="deletebutton"><a href="'.
  212.                       $this->_view->route_delete_form($this->_view->get($this->_model->_idfield)).'">delete</a></div>';
  213.                                                                  
  214.                  $s .= '<div class="backtolistbutton"><a href="'.
  215.                                   $this->_view->route_view_page($this->_view->v_nav_pageid).'">back to list</a></div>';                
  216.           }              
  217.           $s .= '</div>';
  218.          
  219.           $this->editblock = $s;
  220.          
  221.    }
  222.    
  223.    //-----------------------------   draw page and navigation
  224.    public function _drawPageEditNav() {
  225.      
  226.           $this->_drawPage();
  227.           $this->_drawEditPanel(false);
  228.           $this->_drawNavigation();
  229.          
  230.    }
  231. }
  232.  
  233.  
  234.  
  235.  
  236.  
  237. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement