ElementAction.class.php

gehe zur Dokumentation dieser Datei
00001 <?php
00002 // ---------------------------------------------------------------------------
00003 // $Id$
00004 // ---------------------------------------------------------------------------
00005 // OpenRat Content Management System
00006 // Copyright (C) 2002-2004 Jan Dankert, cms@jandankert.de
00007 //
00008 // This program is free software; you can redistribute it and/or
00009 // modify it under the terms of the GNU General Public License
00010 // as published by the Free Software Foundation; version 2.
00011 //
00012 // This program is distributed in the hope that it will be useful,
00013 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 // GNU General Public License for more details.
00016 //
00017 // You should have received a copy of the GNU General Public License
00018 // along with this program; if not, write to the Free Software
00019 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00020 //
00021 // ---------------------------------------------------------------------------
00022 
00029 class ElementAction extends Action
00030 {
00031      var $element;
00032 
00036      function ElementAction()
00037      {
00038           if   ( $this->getRequestId() == 0 )
00039                die('no element-id available');
00040 
00041           $this->element = new Element( $this->getRequestId() );
00042           $this->element->load();
00043 
00044           $this->setTemplateVar( 'elementid' ,$this->element->elementid   );
00045      }
00046 
00047 
00048 
00052      function savename()
00053      {
00054           $this->element->name = $this->getRequestVar('name'       ,'abc');
00055           $this->element->desc = $this->getRequestVar('description','all');
00056 
00057           $this->element->save();
00058           $this->element->load();
00059           
00060           $this->addNotice('element',$this->template->name,'SAVED',OR_NOTICE_OK);
00061      }
00062 
00063 
00064 
00068      function remove()
00069      {
00070           $this->setTemplateVar( 'name' ,$this->element->name );
00071      }
00072      
00073      
00077      function delete()
00078      {
00079           if ( $this->hasRequestVar('deletevalues') )
00080           {
00081                $this->element->deleteValues();
00082                $this->addNotice('element',$this->template->name,'DELETED',OR_NOTICE_OK);
00083           }
00084           elseif ( $this->hasRequestVar('delete') )
00085           {
00086                $this->element->delete();
00087                $this->addNotice('element',$this->template->name,'DELETED',OR_NOTICE_OK);
00088           }
00089           else
00090           {
00091                $this->addNotice('element',$this->template->name,'CANCELED',OR_NOTICE_WARN);
00092           }
00093      }
00094 
00095 
00096 
00100      function savetype()
00101      {
00102           if   ( !$this->userIsAdmin() && $this->getRequestVar('type') == 'code' )
00103           {
00104                // Code-Elemente fuer Nicht-Administratoren nicht benutzbar
00105                $this->addNotice('element',$this->template->name,'CANCELED',OR_NOTICE_ERROR);
00106           }
00107           else
00108           {
00109                // Neuen Typ setzen und speichern
00110                $this->element->setType( $this->getRequestVar('type') );
00111                $this->addNotice('element',$this->template->name,'SAVED',OR_NOTICE_OK);
00112           }
00113      }
00114 
00115 
00119      function name()
00120      {
00121 
00122           // Name und Beschreibung
00123           $this->setTemplateVar('name'       ,$this->element->name);
00124 
00125           $this->setTemplateVar('description',$this->element->desc);
00126      }
00127      
00128      
00129      
00130      function type()
00131      {
00132           // Die verschiedenen Element-Typen
00133           $types = array();
00134 
00135           foreach( $this->element->getAvailableTypes() as $t )
00136                $types[ $t ] = 'EL_'.$t;
00137 
00138           // Code-Element nur fuer Administratoren (da voller Systemzugriff!)        
00139           if   ( !$this->userIsAdmin() )
00140                unset( $types['code'] );
00141           
00142           // Liste aller Elementtypen
00143           $this->setTemplateVar('types',$types);
00144           
00145           // Aktueller Typ
00146           $this->setTemplateVar('type',$this->element->type);
00147      }
00148      
00149      
00154      function properties()
00155      {
00156           global $conf;
00157           
00158           // Abhaengig vom aktuellen Element-Typ die Eigenschaften anzeigen
00159           $properties = $this->element->getRelatedProperties();
00160 
00161           foreach( $this->element->getRelatedProperties() as $propertyName )
00162           {
00163                switch( $propertyName )
00164                {
00165                     case 'withIcon':
00166                          $this->setTemplateVar('with_icon'    ,$this->element->withIcon    );
00167                          break;
00168 
00169                     case 'allLanguages':
00170                          $this->setTemplateVar('all_languages',$this->element->allLanguages);
00171                          break;
00172 
00173                     case 'writable':
00174                          $this->setTemplateVar('writable'     ,$this->element->writable    );
00175                          break;
00176 
00177                     case 'subtype':
00178 
00179                          $convertToLang = false;
00180                          switch( $this->element->type )
00181                          {
00182                               case 'info':
00183                                    $subtypes = Array('db_id',
00184                                                     'db_name',
00185                                                     'project_id',
00186                                                     'project_name',
00187                                                     'language_id',
00188                                                     'language_iso',
00189                                                     'language_name',
00190                                                     'page_id',
00191                                                     'page_name',
00192                                                     'page_desc',
00193                                                     'page_fullfilename',
00194                                                     'page_filename',
00195                                                     'page_extension',
00196                                                     'edit_url',
00197                                                     'edit_fullurl',
00198                                                     'lastch_user_username',
00199                                                     'lastch_user_fullname',
00200                                                     'lastch_user_mail',
00201                                                     'lastch_user_desc',
00202                                                     'lastch_user_tel',
00203                                                     'create_user_username',
00204                                                     'create_user_fullname',
00205                                                     'create_user_mail',
00206                                                     'create_user_desc',
00207                                                     'create_user_tel',
00208                                                     'act_user_username',
00209                                                     'act_user_fullname',
00210                                                     'act_user_mail',
00211                                                     'act_user_desc',
00212                                                     'act_user_tel' );
00213                                    $convertToLang = true;
00214                                    break;
00215 
00216                               case 'infodate':
00217                                    $subtypes = Array('date_published',
00218                                                     'date_saved',
00219                                                     'date_created' );
00220                                    $convertToLang = true;
00221                                    break;
00222 
00223                               case 'link':
00224                                    $subtypes = Array('file,page,link',
00225                                                      'file',
00226                                                      'page',
00227                                                      'link' );
00228                                    $convertToLang = true;
00229                                    break;
00230 
00231                               case 'linkinfo':
00232                                    $subtypes = Array('width',
00233                                                      'height',
00234                                                      'id',
00235                                                      'name',
00236                                                      'description',
00237                                                      'mime-type',
00238                                                     'lastch_user_username',
00239                                                     'lastch_user_fullname',
00240                                                     'lastch_user_mail',
00241                                                     'lastch_user_desc',
00242                                                     'lastch_user_tel',
00243                                                     'create_user_username',
00244                                                     'create_user_fullname',
00245                                                     'create_user_mail',
00246                                                     'create_user_desc',
00247                                                     'create_user_tel',
00248                                                      'filename',
00249                                                      'full_filename' );
00250                                    $convertToLang = true;
00251                                    break;
00252 
00253                               case 'insert':
00254                                    $subtypes = Array('inline',
00255                                                      'ssi'     );
00256                                    $convertToLang = true;
00257                                    break;
00258 
00259                               case 'dynamic':
00260                                    
00261                                    $files = Array();
00262                                    $handle = opendir ('./dynamicClasses');
00263                                    while ( $file = readdir($handle) )
00264                                    {
00265                                         $file = substr($file,0,strlen($file)-10);
00266                                         if   ( $file != '' )
00267                                              $files[$file] = $file;
00268                                    }
00269                                    closedir($handle);
00270 
00271                                    $subtypes = $files;
00272                                    break;
00273 
00274                               default:
00275                                    $subtypes = array();
00276                                    break;
00277                          }
00278 
00279                          if   ( $convertToLang )
00280                          {
00281                               foreach( $subtypes as $t=>$v )
00282                               {
00283                                    unset($subtypes[$t]);
00284                                    $subtypes[$v] = lang('EL_'.$this->element->type.'_'.$v);
00285                               }
00286                          }
00287                          
00288                          // Variable $subtype muss existieren, um Anzeige des Feldes zu erzwingen.
00289                          if (!isset($this->element->subtype))
00290                               $this->element->subtype='';
00291      
00292                          $this->setTemplateVar('subtypes',$subtypes              );
00293                          $this->setTemplateVar('subtype' ,$this->element->subtype);
00294      
00295                          break;
00296      
00297      
00298                     case 'dateformat':
00299 
00300                          $ini_date_format = $conf['date-formats'];
00301                          $dateformat = array();
00302 
00303                          $this->setTemplateVar('dateformat','');
00304 
00305                          foreach($ini_date_format as $idx=>$d)
00306                          {
00307                               $dateformat[$idx] = date($d);
00308                               if   ( $d == $this->element->dateformat )
00309                                    $this->setTemplateVar('dateformat',$idx);
00310                          }
00311      
00312                          $this->setTemplateVar('dateformats',$dateformat);
00313                          
00314                          break;
00315                
00316                
00317                     // Eigenschaften Text und Text-Absatz
00318                     case 'defaultText':
00319                     
00320                          switch( $this->element->type )
00321                          {
00322                               case 'longtext':
00323                                    $this->setTemplateVar('default_longtext',$this->element->defaultText );
00324                                    break;
00325 
00326                               case 'select':
00327                               case 'text':
00328                                    $this->setTemplateVar('default_text'    ,$this->element->defaultText );
00329                                    break;
00330                          }
00331                          break;
00332                     
00333                     
00334                     case 'htmlwiki':
00335                          if   ( !$this->element->wiki && !$this->element->html )
00336                               $format = 'none';
00337                          elseif    ( $this->element->wiki && !$this->element->html )
00338                               $format = 'wiki';
00339                          elseif    ( !$this->element->wiki && $this->element->html )
00340                               $format = 'html';
00341                          elseif    ( $this->element->wiki && $this->element->html )
00342                               $format = 'wiki,html';
00343                               
00344                          $this->setTemplateVar('format', $format );
00345                          $formatlist = array('none'=>'raw','html'=>'html','wiki'=>'wiki','wiki,html'=>'wikihtml');
00346 
00347                          foreach( $formatlist as $t=>$v )
00348                               $formatlist[$t] = lang('EL_PROP_'.$v);
00349                          
00350                          $this->setTemplateVar('formatlist', $formatlist );
00351                          //Html::debug($this->templateVars);
00352                          break;
00353                     
00354                     case 'linktype':
00355                          $this->setTemplateVar('linktype', $this->element->wiki );
00356                          $this->setTemplateVar('linktypelist', array('page','file','link') );
00357                          //Html::debug($this->templateVars);
00358                          break;
00359                     
00360                     case 'prefix':
00361                          $t = new Template( $this->element->templateid );
00362 
00363                          $elements = array();
00364                          foreach( $t->getElements() as $element )
00365                          {
00366                               if   ( $element->type == 'link' )
00367                                    $elements[$element->name] = $element->name;
00368                          }
00369                          unset($t);
00370                          
00371                          $this->setTemplateVar('linkelements',$elements );
00372 
00373                          list($linkElementName,$targetElementName) = explode('%',$this->element->name.'%');
00374                          $this->setTemplateVar('linkelement',$linkElementName );
00375                          
00376                          break;
00377 
00378                     case 'name':
00379                     
00380                          $names = array();
00381                                                   
00382                          foreach( Template::getAll() as $tid=>$name )
00383                          {
00384                               $t = new Template( $tid );
00385                               $t->load();
00386                               
00387                               foreach( $t->getElements() as $element )
00388                               {
00389                                    if   ( !in_array($element->type,array('copy','linkinfo','link')) )
00390                                         $names[$element->name] = $t->name.' - '.$element->name.' ('.lang('EL_'.$element->type).')';
00391                               }
00392                               unset($t);
00393                          }
00394                          
00395                          
00396                          $this->setTemplateVar('names',$names );
00397 
00398                          list($linkElementName,$targetElementName) = explode('%',$this->element->name.'%');
00399                          $this->setTemplateVar('name',$targetElementName );
00400                          break;
00401 
00402                     // Eigenschaften PHP-Code
00403                     case 'code':
00404 
00405                          switch( $this->element->type )
00406                          {
00407 
00408                               case 'select':
00409                                    $this->setTemplateVar('select_items',$this->element->code );
00410                                    break;
00411 
00412                               case 'dynamic':
00413 
00414                                    $className = $this->element->subtype;
00415                                    $fileName  = OR_DYNAMICCLASSES_DIR.'/'.$className.'.class.'.PHP_EXT;
00416 
00417                                    if   ( is_file( $fileName ) )
00418                                    {
00419                                         require( $fileName );
00420 
00421                                         if   ( class_exists($className) )
00422                                         {
00423                                              $dynEl = new $className;
00424 
00425                                              $desc = array();
00426                                              
00427                                              $description = $dynEl->description;
00428                                              $paramList   = array();
00429 
00430                                              $old = $this->element->getDynamicParameters();
00431                                              $parameters = '';
00432 
00433                                              foreach( get_object_vars($dynEl) as $paramName=>$paramDesc )
00434                                              {
00435                                                   if   ( in_array($paramName,array('objectid','output','parameters','description')) )
00436                                                        continue;
00437  
00438                                                   if   ( isset( $dynEl->$paramName ) )
00439                                                   {
00440                                                        $paramList[$paramName] = $dynEl->$paramName;
00441 
00442                                                        $parameters .= $paramName.':';
00443                                                        if   ( !empty($old[$paramName]) )
00444                                                             $parameters .= $old[$paramName];
00445                                                        $parameters .= "\n";
00446                                                   }
00447                                              }
00448                                              
00449                                              $this->setTemplateVar('dynamic_class_description',$dynEl->description );
00450                                              $this->setTemplateVar('dynamic_class_parameters' ,$paramList          );
00451                                              $this->setTemplateVar('parameters'               ,$parameters         );
00452                                         }
00453                                    }
00454                                    
00455                                    break;
00456 
00457                               case 'code':
00458                                    $this->setTemplateVar('code',$this->element->code);
00459                                    break;
00460                          }
00461                          break;
00462                
00463                
00464                     case 'decimals':
00465                          $this->setTemplateVar('decimals'     ,$this->element->decimals    );
00466                          break;
00467                
00468                     case 'decPoint':
00469                          $this->setTemplateVar('dec_point'    ,$this->element->decPoint    );
00470                          break;
00471                
00472                     case 'thousandSep':
00473                          $this->setTemplateVar('thousand_sep' ,$this->element->thousandSep );
00474                          break;
00475                
00476                
00477                     // Eigenschaften Link
00478                     case 'defaultObjectId':
00479 
00480                          $objects = array();
00481      
00482                          // Ermitteln aller verfuegbaren Objekt-IDs
00483                          foreach( Folder::getAllObjectIds() as $id )
00484                          {
00485                               $o = new Object( $id );
00486                               $o->load();
00487                               
00488                               switch( $this->element->type )
00489                               {
00490                                    case 'list':
00491                                         if   ( !$o->isFolder )
00492                                              continue 2;
00493                                         break;
00494 
00495                                    case 'link':
00496                                         if   ( !$o->isPage && !$o->isFile && !$o->isLink )
00497                                              continue 2;
00498                                         break;
00499                                    
00500                                    default:
00501                                         continue 2;
00502                               }
00503 
00504                               $objects[ $id ]  = lang( 'GLOBAL_'.$o->getType() ).': ';
00505                               
00506                               if   ( !$o->isRoot )
00507                               {
00508                                    $f = new Folder( $o->parentid );
00509                                    $f->load();
00510                                    $objects[ $id ] .= implode( FILE_SEP,$f->parentObjectNames(false,true) ); 
00511                               }
00512                               
00513                               $objects[ $id ] .= FILE_SEP.$o->name;
00514                          }
00515                
00516                          asort( $objects ); // Sortieren
00517      
00518                          $this->setTemplateVar('objects',$objects);        
00519      
00520                          $this->setTemplateVar('default_objectid',$this->element->defaultObjectId);
00521      
00522                          break;
00523 
00524 
00525                     case 'folderObjectId':
00526 
00527                          $folders = array();
00528      
00529                          // Ermitteln aller verf?gbaren Objekt-IDs
00530                          foreach( Folder::getAllFolders() as $id )
00531                          {
00532                               $o = new Object( $id );
00533                               $o->load();
00534                               
00535                               $folders[ $id ] = '';
00536                               if   ( !$o->isRoot )
00537                               {
00538                                    $f = new Folder( $o->parentid );
00539                                    $f->load();
00540                                    $folders[ $id ] = implode( ' &raquo; ',$f->parentObjectNames(true,true) );
00541                                    $folders[ $id ] .= ' &raquo; ';
00542                               } 
00543                               $folders[ $id ] .= $o->name;
00544                          }
00545                
00546                          asort( $folders ); // Sortieren
00547      
00548                          $this->setTemplateVar('folders',$folders);        
00549      
00550                          $this->setTemplateVar('folderobjectid'  ,$this->element->folderObjectId  );
00551      
00552                          break;
00553 
00554                     default:
00555                          $this->message('ERROR','not an element property: '.$propertyName );
00556                }
00557           }
00558      }
00559 
00560 
00561      
00565      function saveproperties()
00566      {
00567           global $conf;
00568           $ini_date_format = $conf['date-formats'];
00569      
00570           if   ( $this->hasRequestVar('dateformat'))
00571                $this->element->dateformat  = $ini_date_format[$this->getRequestVar('dateformat')];
00572           $this->element->subtype         = $this->getRequestVar('subtype');
00573           
00574           if   ( $this->hasRequestVar('default_longtext'))
00575                $this->element->defaultText     = $this->getRequestVar('default_longtext');
00576           else
00577                $this->element->defaultText     = $this->getRequestVar('default_text');
00578           $this->element->wiki            = in_array('wiki',explode(',',$this->getRequestVar('format')));
00579           $this->element->html            = in_array('html',explode(',',$this->getRequestVar('format')));
00580           $this->element->withIcon        = $this->getRequestVar('with_icon') != '';
00581           $this->element->allLanguages    = $this->getRequestVar('all_languages') != '';
00582           $this->element->writable        = $this->getRequestVar('writable') != '';
00583           $this->element->decimals        = $this->getRequestVar('decimals');
00584           $this->element->decPoint        = $this->getRequestVar('dec_point');
00585           $this->element->thousandSep     = $this->getRequestVar('thousand_sep');
00586           $this->element->folderObjectId  = $this->getRequestVar('folderobjectid'  );
00587           $this->element->defaultObjectId = $this->getRequestVar('default_objectid');
00588           if   ( $this->hasRequestVar('select_items'))
00589                $this->element->code         = $this->getRequestVar('select_items');
00590           else
00591                $this->element->code         = $this->getRequestVar('code'            );
00592 
00593           if   ( $this->hasRequestVar('name') )
00594                $this->element->name = $this->getRequestVar('name');
00595 
00596           if   ( $this->hasRequestVar('linkelement') )
00597                $this->element->setPrefix( $this->getRequestVar('linkelement') );
00598           
00599           if   ( $this->hasRequestVar('parameters'))
00600                $this->element->code = $this->getRequestVar('parameters');
00601           
00602 //        Html::debug($this->element);
00603           $this->element->save();
00604           $this->addNotice('element',$this->element->name,'SAVED');
00605           
00606      }
00607 }
00608 
00609 ?>

Erzeugt am Thu May 14 00:55:48 2009 für OpenRat von  doxygen 1.5.8