Developer guide     >     Developing Extensions     >     Examples

Content Block list

This is an example implementation of a simple Content Block List. 
 
  1. <?php
  2.     namespace com\yg;
  3.  
  4.     class ExampleCBListSmall extends \CblockListviewExtension {
  5.  
  6.         public $info = array(
  7.             "NAME" => "Example cbListView",
  8.             "DEVELOPERNAME" => "yeager GmbH",
  9.             "VERSION" => "1.0",
  10.             "DESCRIPTION" => "Example cbListView Extension (small)",
  11.             "URL" => "http://www.yeager.cm/",
  12.             "TYPE" => EXTENSION_CBLOCKLISTVIEW
  13.         );
  14.  
  15.         public function install () {
  16.             if (parent::install() ) {
  17.                 return parent::setInstalled();
  18.             } else {
  19.                 return false;
  20.             }
  21.         }
  22.  
  23.         public function uninstall () {
  24.             if (parent::uninstall() ) {
  25.                 return parent::setUnInstalled();
  26.             } else {
  27.                 return false;
  28.             }
  29.         }
  30.  
  31.         public function getListColumns() {
  32.             // Declare listcolumns
  33.             return array(
  34.             'COLUMNS' => array(
  35.                 array(
  36.                     'TITLE' => 'Name',              // Title
  37.                     'RESIZEABLE' => true,           // 'true' if the column should be resizable
  38.                     'WIDTH' => 150,                 // Initial width of the column
  39.                     'MINWIDTH' => 150,              // Minimum width of the column
  40.                     'SORT' => true,                 // 'true' when the list should be initially sorted by this column
  41.                     'SORTFUNC' => 'sort_NAME'       // Function which is used when the list is sorted by this column (member function of this class)
  42.                 ),
  43.                 array(
  44.                     'TITLE' => 'Entrymasks',           
  45.                     'RESIZEABLE' => true,              
  46.                     'WIDTH' => 200,                    
  47.                     'MINWIDTH' => 200,                     
  48.                     'SORTFUNC' => 'sort_ENTRYMASKS'    
  49.                 ),
  50.                 array(
  51.                     'TITLE' => 'User',
  52.                     'RESIZEABLE' => true,
  53.                     'WIDTH' => 100,
  54.                     'MINWIDTH' => 30,
  55.                     'SORTFUNC' => 'sort_USER'
  56.                 )
  57.             ),
  58.             'ORDERBY' => 'NAME');
  59.         }
  60.  
  61.         public function getCblockListCount($id = 0) {
  62.             // Returns the number of found objects (over all pages)
  63.             $limit = array("FOLDER" => $id);
  64.             return sCblockMgr()->filterEntrymasks(false, $this->getFilter(), $limit, true);
  65.         }
  66.  
  67.         public function getCblockList($id = 0, $maxlevel = 0, $roleid = 0, $filterArray) {
  68.  
  69.             if ($filterArray[0]['CBID']) {
  70.                 // If a CBID filter is set (this is set when a single line is requested from the frontend
  71.                 $limit = array('CBID' => $filterArray[0]['CBID']);
  72.                 $coList = sCblockMgr()->filterEntrymasks(false, $this->getFilter(), $limit, false);
  73.             } else {
  74.                 // Normal mode, return full list (all children of the specified folder)
  75.                 $limit = array('FOLDER' => $id);
  76.                 $coList = sCblockMgr()->filterEntrymasks(false, $this->getFilter(), $limit, false);
  77.  
  78.                 // Chop array for pagedirectory
  79.                 $pageDirFrom = $filterArray[0]['VALUE'];
  80.                 $pageDirCount = $filterArray[0]['VALUE2'];
  81.                 if ($pageDirFrom && $pageDirCount) {
  82.                     $coList = array_slice( $coList, $pageDirFrom, $pageDirCount);
  83.                 }
  84.  
  85.                 // Sort array for pagedirectory
  86.                 $pageDirOrderBy = $filterArray[1]['VALUE'];
  87.                 $pageDirOrderDir = $filterArray[1]['VALUE2'];
  88.                 if ($pageDirOrderBy && $pageDirOrderDir) {
  89.                     $listColumns = $this->getListColumns();
  90.                     usort($coList, array('com\yg\ExampleCBListSmall', $listColumns['COLUMNS'][$pageDirOrderBy]['SORTFUNC']));
  91.                     if ($pageDirOrderDir == -1) {
  92.                         $coList = array_reverse($coList);
  93.                     }
  94.                 }
  95.             }
  96.  
  97.             // Get additional data for each formfield (and strip folders)
  98.             $finalCoList = array();
  99.             foreach($coList as $coListItem) {
  100.                 $lcb = sCblockMgr()->getCBlock($coListItem['CBID']);
  101.                 $cbInfo = $lcb->get();
  102.  
  103.                 // Get userinfos from the user who latest modified this object
  104.                 $userObj = sUserMgr()->getUser($cbInfo["CHANGEDBY"]);
  105.                 if ($userObj) {
  106.                     $userInfo = $userObj->get();
  107.                     $userProps = $userObj->properties->get();
  108.                     $userInfo['PROPS'] = $userProps;               
  109.                 }
  110.  
  111.                 if ($coListItem['FOLDER'] == 0) {
  112.                     // Get controls
  113.                     $coListItem['ENTRYMASKS'] = $lcb->getEntrymasks();
  114.  
  115.                     // Get additional control info
  116.                     $col1Data = array();
  117.                     $col2Data = array();
  118.                     $col3Data = array();
  119.  
  120.                     $col1Data[] = array(
  121.                         'VALUE01' => $cbInfo['NAME'],
  122.                         'FORMFIELD' => 1
  123.                     );
  124.  
  125.                     // Add an additional custom column which contains the current user information
  126.                     $col3Data = array(
  127.                         array(
  128.                             'USER_NAME' => trim($userInfo['PROPS']['FIRSTNAME'].' '.$userInfo['PROPS']['LASTNAME']),
  129.                             'USER_ID' => $userInfo['ID'],
  130.                             'FORMFIELD' => 100
  131.                         )
  132.                     );
  133.  
  134.                     $col2field = '('.count($coListItem['ENTRYMASKS']).') ';
  135.                     for ($c = 0; $c < count($coListItem['ENTRYMASKS']); $c++) {
  136.                        
  137.                         if ($c != 0) $col2field .= ", ";
  138.                         $col2field .= $coListItem['ENTRYMASKS'][$c]['CODE'];
  139.  
  140.                     }
  141.  
  142.                     $col2Data[] = array(
  143.                         'VALUE01' => $col2field,
  144.                         'FORMFIELD' => 1
  145.                     );
  146.  
  147.                     $result[0] = $col1Data;
  148.                     $result[1] = $col2Data;
  149.                     $result[2] = $col3Data;
  150.  
  151.                     // Map everything into an array (represents one line)
  152.                     $data = array(
  153.                         'CBID'          => $coListItem['CBID'],
  154.                         'CBVERSION'     => $coListItem['CBVERSION'],
  155.                         'NAME'          => $coListItem['NAME'],
  156.                         'HASCHANGED'    => $coListItem['HASCHANGED'],
  157.                         'FIELDS'        => $result,
  158.                         'RREAD'         => $coListItem['RREAD'],
  159.                         'RWRITE'        => $coListItem['RWRITE'],
  160.                         'RDELETE'       => $coListItem['RDELETE'],
  161.                         'RSUB'          => $coListItem['RSUB'],
  162.                         'RSTAGE'        => $coListItem['RSTAGE'],
  163.                         'RMODERATE'     => $coListItem['RMODERATE'],
  164.                         'RCOMMENT'      => $coListItem['RCOMMENT'],
  165.                     );
  166.  
  167.                     array_push($finalCoList, $data);
  168.                 }
  169.             }
  170.  
  171.             // Return the whole list
  172.             return $finalCoList;
  173.         }
  174.  
  175.         private function getFilter() {
  176.             // Return the filter used for 'filterEntrymasks' (used in several places)
  177.             return array(
  178.                 array(
  179.                     //'ENTRYMASKIDENTIFIER' => 'COLISTTEST' // list only contentblocks including an entry mask of type COLISTTEST
  180.                 )
  181.             );
  182.         }
  183.  
  184.         // Callback functions used the sort the different types of columns
  185.         private function sort_NAME($a, $b) {
  186.             return strcmp($a['NAME'], $b['NAME']);
  187.         }
  188.  
  189.         private function sort_ENTRYMASKS($a, $b) {
  190.             return strcmp(count($a['ENTRYMASKS']), count($b['ENTRYMASKS']));
  191.         }
  192.  
  193.         private function sort_USER($a, $b) {
  194.             return strcmp($a['CHANGEDBY'], $b['CHANGEDBY']);
  195.         }
  196.  
  197.     }
  198.  
  199. ?>