Value.class.php

gehe zur Dokumentation dieser Datei
00001 <?php
00002 // ---------------------------------------------------------------------------
00003 // $Id$
00004 // ---------------------------------------------------------------------------
00005 // DaCMS Content Management System
00006 // Copyright (C) 2002 Jan Dankert, jandankert@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; either version 2
00011 // of the License, or (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the Free Software
00020 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00021 
00022 
00023 
00032 class Value
00033 {
00038      var $valueid=0;
00039 
00044      var $page;
00045      
00050      var $pageid;
00051      
00056      var $isLink = false;
00057      
00062      var $linkToObjectId=0;
00063 
00068      var $text='';
00069      
00074      var $number=0;
00075 
00076      
00081      var $date=0;
00082      
00087      var $element;
00088      
00093      var $elementid;
00094      
00099      var $value;
00100      
00105      var $lastchangeTimeStamp;
00106      
00111      var $lastchangeUserId;
00112 
00117      var $lastchangeUserName;
00118      
00123      var $active;
00124      
00130      var $publish;
00131      
00135      function Value()
00136      {
00137           $this->lastchangeUserId    = 0;
00138           $this->lastchangeTimeStamp = 0;
00139           
00140           $language = Session::getProjectLanguage();
00141           $this->languageid = $language->languageid;
00142      }
00143 
00144      
00145 
00146 
00147      function path_to_page( $pageid )
00148      {
00149           return $this->page->path_to_object( $pageid );
00150      }
00151      function path_to_object( $pageid )
00152      {
00153           return $this->path_to_page( $pageid );
00154      }
00155 
00156 
00160      function load()
00161      {
00162           $db = db_connection();
00163 
00164           if   ( $this->publish )
00165                $sql = new Sql( 'SELECT * FROM {t_value}'.
00166                                '  WHERE elementid ={elementid}'.
00167                                '    AND pageid    ={pageid}'.
00168                                '    AND languageid={languageid}'.
00169                                '    AND publish=1' );
00170           else
00171                $sql = new Sql( 'SELECT * FROM {t_value}'.
00172                                '  WHERE elementid ={elementid}'.
00173                                '    AND pageid    ={pageid}'.
00174                                '    AND languageid={languageid}'.
00175                                '    AND active=1' );
00176           $sql->setInt( 'elementid' ,$this->element->elementid );
00177           $sql->setInt( 'pageid'    ,$this->pageid    );
00178           $sql->setInt( 'languageid',$this->languageid);
00179           $row = $db->getRow( $sql->query );
00180           
00181           if   ( count($row) > 0 ) // Wenn Inhalt gefunden
00182           {
00183                $this->text           = $row['text'];
00184                $this->valueid        = intval($row['id']          );
00185                $this->linkToObjectId = intval($row['linkobjectid']);
00186                $this->number         = intval($row['number'      ]);
00187                $this->date           = intval($row['date'        ]);
00188      
00189                $this->active         = ( $row['active' ]=='1' );
00190                $this->publish        = ( $row['publish']=='1' );
00191      
00192                $this->lastchangeTimeStamp = intval($row['lastchange_date'  ]);
00193                $this->lastchangeUserId    = intval($row['lastchange_userid']);
00194           }
00195      }
00196 
00197 
00201      function loadWithId( $valueid=0 )
00202      {
00203           if   ( $valueid != 0 )
00204                $this->valueid = $valueid;
00205 
00206           $db = db_connection();
00207 
00208           $sql = new Sql( 'SELECT {t_value}.*,{t_user}.name as lastchange_username'.
00209                           ' FROM {t_value}'.
00210                           ' LEFT JOIN {t_user} ON {t_user}.id={t_value}.lastchange_userid'.
00211                           '  WHERE {t_value}.id={valueid}' );
00212           $sql->setInt( 'valueid',$this->valueid);
00213           $row = $db->getRow( $sql->query );
00214           
00215           $this->text           =        $row['text'        ];
00216           $this->pageid         = intval($row['pageid'      ]);
00217           $this->elementid      = intval($row['elementid'   ]);
00218           $this->languageid     = intval($row['languageid'  ]);
00219           $this->valueid        = intval($row['id'          ]);
00220           $this->linkToObjectId = intval($row['linkobjectid']);
00221           $this->number         = intval($row['number'      ]);
00222           $this->date           = intval($row['date'        ]);
00223 
00224           $this->active         = ( $row['active' ]=='1' );
00225           $this->publish        = ( $row['publish']=='1' );
00226 
00227           $this->lastchangeTimeStamp = intval($row['lastchange_date'    ]);
00228           $this->lastchangeUserId    = intval($row['lastchange_userid'  ]);
00229           $this->lastchangeUserName  =        $row['lastchange_username'];
00230      }
00231 
00232 
00237      function getVersionList()
00238      {
00239           $db = db_connection();
00240 
00241           $sql = new Sql( 'SELECT {t_value}.*,{t_user}.name as lastchange_username'.
00242                           '  FROM {t_value}'.
00243                           '  LEFT JOIN {t_user} ON {t_user}.id={t_value}.lastchange_userid'.
00244                           '  WHERE elementid ={elementid}'.
00245                           '    AND pageid    ={pageid}'.
00246                           '    AND languageid={languageid}'.
00247                           '  ORDER BY lastchange_date' );
00248           $sql->setInt( 'elementid' ,$this->element->elementid );
00249           $sql->setInt( 'pageid'    ,$this->pageid    );
00250           $sql->setInt( 'languageid',$this->languageid);
00251 
00252           $list = array();
00253           foreach( $db->getAll( $sql->query ) as $row )
00254           {
00255                $val = new Value();
00256                $val->valueid = $row['id'];
00257                
00258                $val->text           = $row['text'];
00259                $val->valueid        = intval($row['id']          );
00260                $val->linkToObjectId = intval($row['linkobjectid']);
00261                $val->number         = intval($row['number'      ]);
00262                $val->date           = intval($row['date'        ]);
00263      
00264                $val->active         = ( $row['active' ]=='1' );
00265                $val->publish        = ( $row['publish']=='1' );
00266      
00267                $val->lastchangeTimeStamp = intval($row['lastchange_date'    ]);
00268                $val->lastchangeUserId    = intval($row['lastchange_userid'  ]);
00269                $val->lastchangeUserName  = $row['lastchange_username'];
00270                $list[] = $val;
00271           }
00272           return $list;
00273      }
00274 
00275 
00280      function getCountVersions()
00281      {
00282           $db = db_connection();
00283 
00284           $sql = new Sql( 'SELECT COUNT(*) FROM {t_value}'.
00285                           '  WHERE elementid ={elementid}'.
00286                           '    AND pageid    ={pageid}'.
00287                           '    AND languageid={languageid}' );
00288           $sql->setInt( 'elementid' ,$this->element->elementid );
00289           $sql->setInt( 'pageid'    ,$this->pageid    );
00290           $sql->setInt( 'languageid',$this->languageid);
00291 
00292           return $db->getOne( $sql->query );
00293      }
00294 
00295 
00296      function getLastChangeTime()
00297      {
00298           $db = db_connection();
00299 
00300           $sql = new Sql( 
00301 <<<SQL
00302      SELECT lastchange_date FROM {t_value}
00303           WHERE elementid ={elementid}
00304             AND pageid    ={pageid}
00305             AND languageid={languageid}
00306             ORDER BY id DESC
00307 SQL
00308           );
00309           $sql->setInt( 'elementid' ,$this->element->elementid );
00310           $sql->setInt( 'pageid'    ,$this->pageid    );
00311           $sql->setInt( 'languageid',$this->languageid);
00312 
00313           return $db->getOne( $sql->query );
00314      }
00315      
00316      
00317      
00321      function release()
00322      {
00323           $db = db_connection();
00324 
00325           $sql = new Sql( 'UPDATE {t_value}'.
00326                           '  SET publish=0'.
00327                           '  WHERE elementid ={elementid}'.
00328                           '    AND pageid    ={pageid}'.
00329                           '    AND languageid={languageid}' );
00330           $sql->setInt( 'elementid' ,$this->elementid );
00331           $sql->setInt( 'pageid'    ,$this->pageid    );
00332           $sql->setInt( 'languageid',$this->languageid);
00333 
00334           $db->query( $sql->query );
00335 
00336           $sql = new Sql( 'UPDATE {t_value}'.
00337                           '  SET publish=1'.
00338                           '  WHERE active    = 1'.
00339                           '    AND elementid ={elementid}'.
00340                           '    AND pageid    ={pageid}'.
00341                           '    AND languageid={languageid}' );
00342           $sql->setInt( 'elementid' ,$this->elementid );
00343           $sql->setInt( 'pageid'    ,$this->pageid    );
00344           $sql->setInt( 'languageid',$this->languageid);
00345 
00346           $db->query( $sql->query );
00347      }
00348 
00352      function save()
00353      {
00354           global $SESS;
00355           $db = db_connection();
00356 
00357           $sql = new Sql( 'UPDATE {t_value}'.
00358                           '  SET active=0'.
00359                           '  WHERE elementid ={elementid}'.
00360                           '    AND pageid    ={pageid}'.
00361                           '    AND languageid={languageid}' );
00362           $sql->setInt( 'elementid' ,$this->element->elementid );
00363           $sql->setInt( 'pageid'    ,$this->pageid    );
00364           $sql->setInt( 'languageid',$this->languageid);
00365 
00366           $db->query( $sql->query );
00367 
00368           if   ( $this->publish )
00369           {
00370                // Wenn Inhalt sofort veroeffentlicht werden kann, dann
00371                // alle anderen Inhalte auf nicht-veroeffentlichen stellen 
00372                $sql = new Sql( 'UPDATE {t_value}'.
00373                                '  SET publish=0'.
00374                                '  WHERE elementid ={elementid}'.
00375                                '    AND pageid    ={pageid}'.
00376                                '    AND languageid={languageid}' );
00377                $sql->setInt( 'elementid' ,$this->element->elementid );
00378                $sql->setInt( 'pageid'    ,$this->pageid    );
00379                $sql->setInt( 'languageid',$this->languageid);
00380 
00381                $db->query( $sql->query );
00382           }
00383 
00384           // Naechste ID aus Datenbank besorgen
00385           $sql = new Sql('SELECT MAX(id) FROM {t_value}');
00386           $this->valueid = intval($db->getOne($sql->query))+1;
00387 
00388           $sql = new Sql( <<<SQL
00389 INSERT INTO {t_value}
00390             (id       ,linkobjectid  ,text  ,number  ,date  ,elementid  ,pageid  ,languageid  ,active,publish  ,lastchange_date  ,lastchange_userid  )
00391      VALUES ({valueid},{linkobjectid},{text},{number},{date},{elementid},{pageid},{languageid},1     ,{publish},{lastchange_date},{lastchange_userid})
00392 SQL
00393           );
00394           $sql->setInt( 'valueid'   ,$this->valueid            );
00395           $sql->setInt( 'elementid' ,$this->element->elementid );
00396           $sql->setInt( 'pageid'    ,$this->pageid             );
00397           $sql->setInt( 'languageid',$this->languageid         );
00398 
00399           if   ( intval($this->linkToObjectId)==0)
00400                $sql->setNull  ( 'linkobjectid' );
00401           else $sql->setInt   ( 'linkobjectid',$this->linkToObjectId   );
00402 
00403           if   ( $this->text == '' )
00404                $sql->setNull  ( 'text' );
00405           else $sql->setString( 'text',$this->text );
00406 
00407           if   ( intval($this->number)==0)
00408                $sql->setNull  ( 'number' );
00409           else $sql->setInt   ( 'number',$this->number );
00410 
00411           if   ( intval($this->date)==0)
00412                $sql->setNull  ( 'date' );
00413           else $sql->setInt   ( 'date',$this->date );
00414 
00415           $sql->setBoolean( 'publish'          ,$this->publish );
00416           $sql->setInt    ( 'lastchange_date'  ,time()         );
00417           $user = Session::getUser();
00418           $sql->setInt    ( 'lastchange_userid',$user->userid  );
00419 
00420           $db->query( $sql->query );
00421      }
00422 
00423 
00427      function delete()
00428      {
00429           $db = db_connection();
00430           $sql = new Sql( 'DELETE * FROM {t_value}'.
00431                           '  WHERE elementid ={elementid}'.
00432                           '    AND pageid    ={pageid}'.
00433                           '    AND languageid={languageid}' );
00434           $sql->setInt( 'elementid' ,$this->element->elementid );
00435           $sql->setInt( 'pageid'    ,$this->pageid    );
00436           $sql->setInt( 'languageid',$this->languageid);
00437           $row = $db->getRow( $sql->query );
00438      }
00439 
00440 
00447      function generate()
00448      {
00449           global $conf;
00450 
00451           if   ( intval($this->valueid)==0 )
00452                $this->load();
00453      
00454           $inhalt = '';
00455 
00456           global $conf;
00457 
00458           if   ( $conf['cache']['enable_cache'] && is_file( $this->tmpfile() ))
00459           {
00460                $this->value = implode('',file($this->tmpfile() )); // from cache.
00461                return;
00462           }
00463 
00464           // Inhalt ist mit anderer Seite verkn�pft.
00465           if   ( in_array($this->element->type,array('text','longtext','date','number')) && intval($this->linkToObjectId) != 0 && !$this->isLink )
00466           {
00467                $p = new Page( $this->linkToObjectId );
00468                $p->load();
00469                
00470                $v = new Value();
00471                $v->isLink     = true;
00472                $v->pageid     = $p->pageid;
00473                $v->page       = $p;
00474                $v->simple     = $this->simple;
00475                $v->element    = $this->element;
00476                $v->languageid = $this->languageid;
00477                $v->modelid    = $this->modelid;
00478                $v->load();
00479                $v->generate();
00480                $this->value = $v->value;
00481                return;
00482           }
00483           
00484           switch( $this->element->type )
00485           {
00486                case 'list'  : // nur wg. R�ckw�rtskompabilit�t.
00487                case 'insert':
00488 
00489                     $objectid = $this->linkToObjectId;
00490 
00491                     if   ( intval($objectid) == 0 )
00492                          $objectid = $this->element->defaultObjectId;
00493                     
00494                     if   ( ! Object::available( $objectid) )
00495                          return;
00496                          
00497                     $object = new Object( $objectid );
00498                     $object->objectLoadRaw();
00499                     
00500                     if   ( $object->isFolder )
00501                     {
00502                          if   ( $this->simple )
00503                          {
00504                               $f = new Folder( $objectid );
00505                               $f->load();
00506                               $inhalt = $f->name;
00507                               unset( $f );
00508                          }
00509                          else
00510                          {
00511                               if   ( $objectid != $this->page->objectid ) // Rekursion vermeiden
00512                               {
00513                                    $f = new Folder( $objectid );
00514                                    foreach( $f->getObjectIds() as $oid )
00515                                    {
00516                                         if   ( $oid != $this->page->objectid )  // Rekursion vermeiden
00517                                         {
00518                                              switch( $this->element->subtype )
00519                                              {
00520                                                   case '':
00521                                                   case 'inline':
00522                                                        $o = new Object( $oid );
00523                                                        $o->load();
00524                                                        switch( $o->getType() )
00525                                                        {
00526                                                             case OR_TYPE_PAGE:
00527                                                                  $p = new Page( $oid );
00528                                                                  $p->public         = $this->page->public;
00529                                                                  $p->up_path        = $this->page->up_path();
00530                                                                  $p->modelid        = $this->page->modelid;
00531                                                                  $p->languageid     = $this->languageid;
00532                                                                  $p->mime_type      = $this->page->mimeType();
00533                                                                  $p->load();
00534                                                                  $p->generate();
00535                                                                  $inhalt .= $p->value;
00536                                                                  unset( $p );
00537                                                                  break;
00538                                                             case OR_TYPE_LINK:
00539                                                                  $l = new Link( $oid );
00540                                                                  $l->load();
00541                                                                  if   ( $l->isLinkToObject )
00542                                                                  {
00543                                                                       $op = new Object( $l->linkedObjectId );
00544                                                                       $op->load();
00545                                                                       if   ( $op->isPage )
00546                                                                       {
00547                                                                            $p = new Page( $l->linkedObjectId );
00548                                                                            $p->public         = $this->page->public;
00549                                                                            $p->up_path        = $this->page->up_path();
00550                                                                            $p->modelid        = $this->page->modelid;
00551                                                                            $p->languageid     = $this->languageid;
00552                                                                            $p->load();
00553                                                                            $p->generate();
00554                                                                            $inhalt .= $p->value;
00555                                                                            unset( $p );
00556                                                                       }
00557                                                                  }
00558                                                                  break;
00559                                                        }
00560                                                        break;
00561 
00562                                                   case 'ssi':
00563                                                        $inhalt .= '<!--#include virtual="'.$this->page->path_to_object($oid).'" -->'; 
00564                                                        break;
00565 
00566                                                   default:
00567                                                        $inhalt = '?'.$this->element->subtype.'?';
00568                                              }
00569                                         }
00570                                         else die('FATAL: recursion detected');
00571                                    }
00572                               }
00573                               else die('FATAL: recursion detected');
00574                          }
00575                     }
00576                     elseif    ( $object->isPage )
00577                     {
00578                          if   ( $this->simple )
00579                          {
00580                               $p = new Page( $objectid );
00581                               $p->load();
00582                               $inhalt = $p->name;
00583                               unset( $p );
00584                          }
00585                          else
00586                          {
00587                               if   ( $objectid != $this->page->objectid ) // Rekursion vermeiden
00588                               {
00589                                    switch( $this->element->subtype )
00590                                    {
00591                                         case '':
00592                                         case 'inline':
00593                                              $p = new Page( $objectid );
00594                                              $p->public         = $this->page->public;
00595                                              $p->up_path        = $this->page->up_path();
00596                                              $p->modelid        = $this->page->modelid;
00597                                              $p->languageid     = $this->languageid;
00598                                              $p->mime_type      = $this->page->mimeType();
00599                                              $p->load();
00600                                              $p->generate();
00601                                              $inhalt = $p->value;
00602                                              unset( $p );
00603                                              break;
00604                                              
00605                                         case 'ssi':
00606                                              $inhalt = '<!--#include virtual="'.$this->page->path_to_object($objectid).'" -->'; 
00607                                              break;
00608                                              
00609                                         default:
00610                                              $inhalt = '?'.$this->element->subtype.'?';
00611                                              break;
00612                                    }
00613                               }
00614                               else die('FATAL: recursion detected');
00615                          }
00616                     }
00617 
00618                     if   ( $this->simple )
00619                     {
00620                          $inhalt = strip_tags( $inhalt );
00621                          $inhalt = str_replace( "\n",'',$inhalt );
00622                          $inhalt = str_replace( "\r",'',$inhalt );
00623                     }
00624                     
00625                     break;
00626 
00627 
00628                case 'link':
00629 
00630                     $objectid = $this->linkToObjectId;
00631                     
00632                     if   ( intval($objectid) == 0 )
00633                          $objectid = $this->element->defaultObjectId;
00634      
00635                     if   ( $objectid==0 )
00636                     {
00637                          // Link noch nicht gefuellt
00638                          $inhalt = '';
00639                     }
00640                     elseif     ( ! Object::available($objectid) )
00641                     {
00642                          $inhalt = $this->simple?'-':'';
00643                     }
00644                     elseif   ( $this->simple )
00645                     {
00646                          $o = new Object( $objectid );
00647                          $o->load();
00648                          $inhalt = $o->name;
00649                     }
00650                     else
00651                     {
00652                          $inhalt = $this->page->path_to_object( $objectid );
00653                     }
00654                     
00655                     break;
00656 
00657 
00658                case 'copy':
00659 
00660                     list($linkElementName,$targetElementName) = explode('%',$this->element->name.'%');
00661 
00662                     if   ( empty($targetElementName) )
00663                          break;
00664 
00665                     $element = new Element();
00666                     $element->name = $linkElementName;
00667                     $element->load();
00668                     
00669                     if   ( intval($element->elementid)==0 )
00670                          break;
00671                     
00672                     $linkValue = new Value();
00673                     $linkValue->elementid = $element->elementid;
00674                     $linkValue->element   = $element;
00675                     $linkValue->pageid = $this->pageid;
00676                     $linkValue->page   = $this->page;
00677                     $linkValue->simple = $this->simple;
00678                     $linkValue->languageid = $this->languageid;
00679                     $linkValue->load();
00680                     
00681                     if   ( !Object::available( $linkValue->linkToObjectId ) )
00682                          break;
00683 
00684                     $linkedPage = new Page( $linkValue->linkToObjectId );
00685                     $linkedPage->load();
00686 
00687                     $linkedPageTemplate = new Template( $linkedPage->templateid );
00688                     $targetElementId = array_search( $targetElementName, $linkedPageTemplate->getElementNames() );
00689                     
00690                     if   ( intval($targetElementId)==0 )
00691                          break;
00692 
00693                     $targetValue = new Value();
00694                     $targetValue->elementid = $targetElementId;
00695                     $targetValue->element = new Element($targetElementId);
00696                     $targetValue->element->load();
00697                     $targetValue->pageid = $linkedPage->pageid;
00698                     $targetValue->page   = $linkedPage;
00699                     $targetValue->simple = $this->simple;
00700                     $targetValue->generate();
00701                     
00702                     $inhalt = $targetValue->value; 
00703                     
00704                     break;
00705 
00706 
00707                case 'linkinfo':
00708 
00709                     @list( $linkElementName, $name ) = explode('%',$this->element->name);
00710                     if   ( is_null($name) )
00711                          break;
00712                          
00713                     $element = new Element();
00714                     $element->name = $linkElementName;
00715                     $element->load();
00716                     
00717                     $linkValue = new Value();
00718                     $linkValue->elementid = $element->elementid;
00719                     $linkValue->element   = $element;
00720                     $linkValue->pageid = $this->pageid;
00721                     $linkValue->languageid = $this->languageid;
00722                     $linkValue->load();
00723                     
00724                     if   ( !Object::available( $linkValue->linkToObjectId ) )
00725                          break;
00726                          
00727                     $linkedObject = new Object( $linkValue->linkToObjectId );
00728                     $linkedObject->load();
00729                     
00730                     switch( $this->element->subtype )
00731                     {
00732                          case 'width':
00733                               $f = new File( $linkValue->linkToObjectId );
00734                               $f->load();
00735                               if   ( $f->isImage() )
00736                               {
00737                                    $f->getImageSize();
00738                                    $inhalt = $f->width;
00739                               }
00740                               unset($f);
00741                          break;
00742                          
00743                          case 'height':
00744                               $f = new File( $linkValue->linkToObjectId );
00745                               $f->load();
00746                               if   ( $f->isImage() )
00747                               {
00748                                    $f->getImageSize();
00749                                    $inhalt = $f->height;
00750                               }
00751                               unset($f);
00752                          break;
00753                          
00754                          default:
00755                               $inhalt = ''; 
00756                               Logger::error('subtype for linkinfo not implemented:'.$this->element->subtype);
00757                     }              
00758                     
00759                     break;
00760 
00761 
00762                case 'longtext':
00763                case 'text':
00764                case 'select':
00765 
00766                     $inhalt = $this->text;
00767      
00768                     // Wenn Inhalt leer, dann Vorbelegung verwenden
00769                     if   ( $inhalt == '' )
00770                          $inhalt = $this->element->defaultText;
00771 
00772                     // Wenn HTML nicht erlaubt und Wiki-Formatierung aktiv, dann einfache HTML-Tags in Wiki umwandeln
00773                     if   ( !$this->element->html && $this->element->wiki && $conf['editor']['wiki']['convert_html'] && $this->page->mimeType()=='text/html' )
00774                          $inhalt = Text::html2Wiki( $inhalt );
00775 
00776                     // Wenn Wiki-Formatierung aktiv, dann BB-Code umwandeln
00777                     if   ( $this->element->wiki && $conf['editor']['wiki']['convert_bbcode'] )
00778                          $inhalt = Text::bbCode2Wiki( $inhalt );
00779 
00780                     // Wenn HTML nicht erlaubt ist, dann die HTML-Tags ersetzen
00781                     if   ( !$this->element->html && !$this->element->wiki && $this->page->mimeType()=='text/html')
00782                          $inhalt = Text::encodeHtml( $inhalt );
00783 
00784                     // Wenn HTML nicht erlaubt ist, dann Sonderzeichen in HTML �bersetzen
00785                     if   ( !$this->element->wiki && !$this->element->wiki && $this->page->mimeType()=='text/html' )
00786                          $inhalt = Text::encodeHtmlSpecialChars( $inhalt );
00787 
00788                     // Schnellformatierung ('Wiki') durchfuehren
00789                     if   ( $this->element->wiki )
00790                     {
00791                          $transformer = new Transformer();
00792                          $transformer->text    = $inhalt;
00793                          $transformer->page    = $this->page;
00794                          $transformer->element = $this->element;
00795 
00796                          $transformer->transform();
00797                          $inhalt = $transformer->text;
00798                     }
00799      
00800                     if   ( $this->simple )
00801                     {
00802                          $inhalt = strip_tags( $inhalt );
00803                          $inhalt = str_replace( "\n",'',$inhalt );
00804                          $inhalt = str_replace( "\r",'',$inhalt );
00805                     }
00806                     
00807                     break;
00808 
00809 
00810                // Zahl
00811                //
00812                // wird im entsprechenden Format angezeigt.
00813                case 'number':
00814 
00815                     if   ( $this->number == 0 )
00816                     {
00817                          // Zahl ist gleich 0, dann Default-Text
00818                          $inhalt = $this->element->defaultText;
00819                          break;
00820                     }
00821      
00822                     $number = $this->number / pow(10,$this->element->decimals);
00823                     $inhalt = number_format( $number,$this->element->decimals,$this->element->decPoint,$this->element->thousandSep );
00824      
00825                     break;
00826      
00827      
00828                // Datum
00829                case 'date':
00830 
00831                     $date = $this->date;
00832 
00833                     if   ( intval($date) == 0 )
00834                     {
00835                          // Datum wurde noch nicht eingegeben
00836                          $inhalt = $this->element->defaultText;
00837                          break;
00838                     }
00839 
00840                     // Datum gemaess Elementeinstellung formatieren
00841                     $inhalt = date( $this->element->dateformat,$date );
00842                     
00843                     break;
00844 
00845 
00846                // Programmcode (PHP)
00847                case 'code':
00848 
00849                     if   ( $this->page->simple )
00850                          break;
00851 
00852                     $this->page->load();
00853 
00854                     $code = new Code();
00855                     $code->page = &$this->page;
00856                     $code->setObjectId( $this->page->objectid );
00857                     $code->delOutput();
00858                     $code->code = $this->element->code;
00859 
00860                     // Jetzt ausfuehren des temporaeren PHP-Codes                    
00861                     $code->execute();
00862 
00863                     $inhalt = $code->getOutput();
00864 
00865                     break;
00866 
00867 
00868                // Programmcode (PHP)
00869                case 'dynamic':
00870 
00871                     if   ( $this->page->simple )
00872                          break;
00873 
00874                     $this->page->load();
00875                     $className = $this->element->subtype;
00876                     $fileName  = './dynamicClasses/'.$className.'.class.php';
00877                     if   ( is_file( $fileName ) )
00878                     {
00879                          // Fuer den Fall, dass eine Dynamic-Klasse mehrmals pro Vorlage auftritt
00880                          if   ( !class_exists($className) )
00881                               require( $fileName );
00882 
00883                          if   ( class_exists($className) )
00884                          {
00885                               $dynEl = new $className;
00886                               $dynEl->page = &$this->page;
00887 
00888                               if   ( method_exists( $dynEl,'execute' ) )
00889                               {
00890                                    //$dynEl->delOutput();
00891                                    $dynEl->objectid = $this->page->objectid;
00892                                    $dynEl->page    = &$this->page;
00893 
00894                                    foreach( $this->element->getDynamicParameters() as $param_name=>$param_value )
00895                                    {
00896                                         if   ( isset( $dynEl->$param_name ) )
00897                                         {
00898                                              Logger::debug("Setting parameter for dynamic Class $className, ".$param_name.':'.$param_value );
00899                                              $dynEl->$param_name = $param_value;
00900                                         }
00901                                    }
00902 
00903                                    $dynEl->execute();
00904                                    $inhalt = $dynEl->getOutput();
00905                               }
00906                               else
00907                               {
00908                                    Logger::warn('element:'.$this->element->name.', '.
00909                                                 'class:'.$className.', no method: execute()');
00910                               }
00911                          }
00912                          else
00913                          {
00914                               Logger::warn('element:'.$this->element->name.', '.
00915                                            'class not found:'.$className);
00916                          }
00917                     }
00918                     else
00919                     {
00920                          Logger::warn('element:'.$this->element->name.', '.
00921                                       'file not found:'.$fileName);
00922                     }
00923 
00924                     // Wenn HTML-Ausgabe, dann Sonderzeichen in HTML �bersetzen
00925                     if   ( $this->page->mimeType()=='text/html' )
00926                          $inhalt = Text::encodeHtmlSpecialChars( $inhalt );
00927                     
00928                     break;
00929 
00930 
00931                // Info-Feld als Datum
00932                case 'infodate':
00933 
00934                     if   ( $this->page->simple )
00935                          break;
00936                     
00937                     switch( $this->element->subtype )
00938                     {
00939                          case 'date_published':
00940                               // START_TIME wird zu Beginn im Controller gesetzt.
00941                               // So erh�lt jede Datei das gleiche Ver�ffentlichungsdatum.
00942                               $inhalt = date( $this->element->dateformat,START_TIME );
00943                               break;
00944                               
00945                          case 'date_saved':
00946                               $inhalt = date( $this->element->dateformat,$this->page->lastchangeDate );
00947                               break;
00948 
00949                          case 'date_created':
00950                               $inhalt = date( $this->element->dateformat,$this->page->createDate );
00951                               break;
00952 
00953                          default:  
00954                               Logger::warn('element:'.$this->element->name.', '.
00955                                            'type:'.$this->element->type.', '.
00956                                            'unknown subtype:'.$this->element->subtype);
00957                     }
00958                     
00959                     break;
00960 
00961 
00962                // Info-Feld
00963                case 'info':
00964 
00965                     if   ( $this->page->simple )
00966                          break;
00967 
00968                     $raw = false;
00969                     switch( $this->element->subtype )
00970                     {
00971                          case 'db_id':
00972                               $inhalt = $SESS['dbid'];
00973                               break;
00974                          case 'db_name':
00975                               $inhalt = $conf['database_'.$SESS['dbid']]['comment'];
00976                               break;
00977                          case 'project_id':
00978                               $inhalt = $this->page->projectid;
00979                               break;
00980                          case 'project_name':
00981                               $project = new Project( $this->page->projectid );
00982                               $project->load();
00983                               $inhalt = $project->name;
00984                               break;
00985                          case 'language_id':
00986                               $inhalt = $this->page->languageid;
00987                               break;
00988                          case 'language_iso':
00989                               $language = new Language( $this->page->languageid );
00990                               $language->load();
00991                               $inhalt = $language->isoCode;
00992                               break;
00993                          case 'language_name':
00994                               $language = new Language( $this->page->languageid );
00995                               $language->load();
00996                               $inhalt = $language->name;
00997                               break;
00998                          case 'page_id':
00999                               $inhalt = $this->page->objectid;
01000                               break;
01001                          case 'page_name':
01002                               $inhalt = $this->page->name;
01003                               break;
01004                          case 'page_desc':
01005                               $inhalt = $this->page->desc;
01006                               break;
01007                          case 'page_fullfilename':
01008                               $inhalt = $this->page->full_filename();
01009                               break;
01010                          case 'page_filename':
01011                               $inhalt = $this->page->filename;
01012                               break;
01013                          case 'page_extension':
01014                               $inhalt = '';
01015                               break;
01016                          case 'edit_url':
01017                               $raw = true;
01018                               $db = Session::getDatabase();
01019                               $inhalt = Html::url('index','object',$this->page->objectid,array('dbid'=>$db->id));
01020                               break;
01021                          case 'edit_fullurl':
01022                               $raw = true;
01023                               $inhalt = Http::getServer();
01024                               $db = Session::getDatabase();
01025                               $params = array('dbid'      =>$db->id,
01026                                               'objectid'  =>$this->page->objectid,
01027                                               'modelid'   =>$this->page->modelid,
01028                                               'languageid'=>$this->page->languageid,
01029                                               'elementid' =>$this->element->elementid );
01030                               $inhalt .= '/'.basename(Html::url('index','object',$this->page->objectid,$params));
01031                               break;
01032                          case 'lastch_user_username':
01033                               $user = $this->page->lastchangeUser;
01034                               $user->load();
01035                               $inhalt = $user->name;
01036                               break;
01037                          case 'lastch_user_fullname':
01038                               $user = $this->page->lastchangeUser;
01039                               $user->load();
01040                               $inhalt = $user->fullname;
01041                               break;
01042                          case 'lastch_user_mail':
01043                               $user = $this->page->lastchangeUser;
01044                               $user->load();
01045                               $inhalt = $user->mail;
01046                               break;
01047                          case 'lastch_user_desc':
01048                               $user = $this->page->lastchangeUser;
01049                               $user->load();
01050                               $inhalt = $user->desc;
01051                               break;
01052                          case 'lastch_user_tel':
01053                               $user = $this->page->lastchangeUser;
01054                               $user->load();
01055                               $inhalt = $user->tel;
01056                               break;
01057 
01058                          case 'create_user_username':
01059                               $user = $this->page->createUser;
01060                               $user->load();
01061                               $inhalt = $user->name;
01062                               break;
01063                          case 'create_user_fullname':
01064                               $user = $this->page->createUser;
01065                               $user->load();
01066                               $inhalt = $user->fullname;
01067                               break;
01068                          case 'create_user_mail':
01069                               $user = $this->page->createUser;
01070                               $user->load();
01071                               $inhalt = $user->mail;
01072                               break;
01073                          case 'create_user_desc':
01074                               $user = $this->page->createUser;
01075                               $user->load();
01076                               $inhalt = $user->desc;
01077                               break;
01078                          case 'create_user_tel':
01079                               $user = $this->page->createUser;
01080                               $user->load();
01081                               $inhalt = $user->tel;
01082                               break;
01083 
01084                          case 'act_user_username':
01085                               $user = new User($SESS['user']['id']);
01086                               $user->load();
01087                               $inhalt = $user->name;
01088                               break;
01089                          case 'act_user_fullname':
01090                               $user = new User($SESS['user']['id']);
01091                               $user->load();
01092                               $inhalt = $user->fullname;
01093                               break;
01094                          case 'act_user_mail':
01095                               $user = new User($SESS['user']['id']);
01096                               $user->load();
01097                               $inhalt = $user->mail;
01098                               break;
01099                          case 'act_user_desc':
01100                               $user = new User($SESS['user']['id']);
01101                               $user->load();
01102                               $inhalt = $user->desc;
01103                               break;
01104                          case 'act_user_tel':
01105                               $user = new User($SESS['user']['id']);
01106                               $user->load();
01107                               $inhalt = $user->tel;
01108                               break;
01109                          default:
01110                               Logger::warn('element:'.$this->element->name.', '.
01111                                            'type:'.$this->element->type.', '.
01112                                            'unknown subtype:'.$this->element->subtype);
01113                               // Keine Fehlermeldung in erzeugte Seite schreiben. 
01114                     }
01115 
01116                     if   ( !$raw && $this->page->mimeType()=='text/html' )
01117                          $inhalt = Text::encodeHtml( $inhalt );
01118 
01119                     // Wenn HTML-Ausgabe, dann Sonderzeichen in HTML �bersetzen
01120                     if   ( $this->page->mimeType()=='text/html' )
01121                          $inhalt = Text::encodeHtmlSpecialChars( $inhalt );
01122                          
01123                     break;
01124                     
01125                default:
01126                     // Unbekannte Elementtypen darf es nicht geben, daher ERROR loggen.
01127                     Logger::error('element:'.$this->element->name.', '.
01128                                   'unknown type:'.$this->element->type);
01129                     
01130           }
01131           
01132           
01133           if   ( $this->page->icons && $this->element->withIcon )
01134                $inhalt = '<a href="'.Html::url('pageelement','edit',$this->page->objectid,array('elementid'=>$this->element->elementid)).'" title="'.$this->element->desc.'" target="cms_main_main"><img src="'.OR_THEMES_DIR.$conf['interface']['theme'].'/images/icon_el_'.$this->element->type.IMG_ICON_EXT.'" border="0" align="left"></a>'.$inhalt;
01135           
01136           $this->value = $inhalt;
01137 
01138           
01139           // Store in cache.
01140           $f = fopen( $this->tmpfile(),'w' );
01141           fwrite( $f,$this->value );
01142           fclose( $f );
01143      }
01144 
01145 
01151      function getObjectIdsByValue( $text )
01152      {
01153           $db = db_connection();
01154           
01155           $sql = new Sql( 'SELECT {t_object}.id FROM {t_value} '.
01156                           ' LEFT JOIN {t_page} '.
01157                           '   ON {t_page}.id={t_value}.pageid '.
01158                           ' LEFT JOIN {t_object} '.
01159                           '   ON {t_object}.id={t_page}.objectid '.
01160                           ' WHERE {t_value}.text LIKE {text}'.
01161                           '   AND {t_value}.languageid={languageid}'.
01162                           '  ORDER BY {t_object}.lastchange_date DESC' );
01163                           
01164           $sql->setInt   ( 'languageid',$this->languageid );
01165           $sql->setString( 'text'      ,'%'.$text.'%'     );
01166           return $db->getCol( $sql->query );
01167      }
01168 
01169 
01175      function getObjectIdsByLastChangeUserId( $userid )
01176      {
01177 
01178           $db = db_connection();
01179           
01180           $sql = new Sql( 'SELECT {t_object}.id FROM {t_value} '.
01181                           ' LEFT JOIN {t_page} '.
01182                           '   ON {t_page}.id={t_value}.pageid '.
01183                           ' LEFT JOIN {t_object} '.
01184                           '   ON {t_object}.id={t_page}.objectid '.
01185                           ' WHERE {t_value}.lastchange_userid={userid}'.
01186                           '   AND {t_value}.languageid={languageid}'.
01187                           '  ORDER BY {t_object}.lastchange_date DESC' );
01188           $sql->setInt   ( 'languageid',$this->languageid );
01189           $sql->setInt   ( 'userid'    ,$userid           );
01190 
01191           return $db->getCol( $sql->query );
01192      }
01193 
01194      
01195 
01201      function getLastChangedObjectByUserId( $userid )
01202      {
01203           $db = db_connection();
01204           
01205           $sql = new Sql( <<<SQL
01206 SELECT {t_object}.id
01207   FROM {t_value} 
01208   LEFT JOIN {t_page} 
01209     ON {t_page}.id={t_value}.pageid 
01210   LEFT JOIN {t_object} 
01211     ON {t_object}.id={t_page}.objectid 
01212  WHERE {t_value}.lastchange_userid={userid}
01213  ORDER BY {t_value}.lastchange_date DESC
01214 SQL
01215 );
01216           $sql->setInt   ( 'userid'    ,$userid           );
01217           return $db->getOne( $sql->query );
01218      }
01219      
01220      
01224      function tmpfile()
01225      {
01226           $db = db_connection();
01227           $filename = Object::getTempFileName( array('db'=>$db->id,
01228                                                      'va'=>$this->valueid,
01229                                                      'el'=>$this->element->elementid,
01230                                                      'la'=>$this->languageid,
01231                                                      'm' =>$this->page->modelid,
01232                                                      'pu'=>intval($this->publish),
01233                                                      'si'=>intval($this->simple)    ) );
01234           return $filename;
01235      }
01236      
01237      
01238      
01239      
01240 }

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