PageAction.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; 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 
00030 class PageAction extends ObjectAction
00031 {
00032      var $page;
00033      var $defaultSubAction = 'show';
00034 
00035 
00036      function PageAction()
00037      {
00038           if   ( $this->getRequestId() != 0  )
00039           {
00040                $this->page = new Page( $this->getRequestId() );
00041                $this->page->load();
00042                Session::setObject( $this->page );
00043           }
00044           else
00045           {
00046                $this->page = Session::getObject();
00047           }
00048           
00049           // Auskommentiert, da Conditional-Get bei
00050           // Seiten u.U. nicht sinnvoll ist
00051           //$this->lastModified( $this->page->lastchangeDate );
00052      }
00053 
00054 
00058      function saveform()
00059      {
00060           $this->page->public = true;
00061           $this->page->simple = true;
00062 
00063           foreach( $this->page->getElements() as $elementid=>$name )
00064           {
00065                if   ( $this->hasRequestVar('saveid'.$elementid) )
00066                {
00067                     $value = new Value();
00068                     $value->objectid   = $this->page->objectid;
00069                     $value->pageid     = Page::getPageIdFromObjectId( $value->objectid );
00070                     $value->element = new Element( $elementid );
00071                     $value->element->load();
00072                     $value->publish = false;
00073                     $value->load();
00074           
00075                     // Eingegebenen Inhalt aus dem Request lesen
00076                     $inhalt  = $this->getRequestVar( 'id'.$elementid );
00077                     
00078                     // Den Inhalt speichern.
00079                     switch( $value->element->type )
00080                     {
00081                          case 'number':
00082                               $value->number = $inhalt * pow(10,$value->element->decimals);
00083                               break;
00084 
00085                          case 'date':
00086                               $value->date = strtotime( $inhalt );
00087                               break;
00088 
00089                          case 'text':
00090                          case 'longtext':
00091                          case 'select':
00092                               $value->text = $inhalt;
00093                               break;
00094 
00095                          case 'link':
00096                          case 'list':
00097                          case 'insert':
00098                               $value->linkToObjectId = intval($inhalt);
00099                               break;
00100                     }
00101                
00102                     $value->page = &$this->page;
00103                     
00104                     // Ermitteln, ob Inhalt sofort freigegeben werden kann und soll
00105                     if   ( $this->page->hasRight( ACL_RELEASE ) && $this->hasRequestVar('release') )
00106                          $value->publish = true;
00107                     else
00108                          $value->publish = false;
00109           
00110 //                  Html::debug($inhalt,'Eingabe');
00111 //                  Html::debug($value,'Inhalt');
00112           
00113                     // Inhalt speichern.
00114                     // Inhalt in allen Sprachen gleich?
00115                     if   ( $value->element->allLanguages )
00116                     {
00117                          // Inhalt fuer jede Sprache einzeln speichern.
00118                          $p = new Project();
00119                          foreach( $p->getLanguageIds() as $languageid )
00120                          {
00121                               $value->languageid = $languageid;
00122                               $value->save();
00123                          }
00124                     }
00125                     else
00126                     {
00127                          // sonst nur 1x speichern (fuer die aktuelle Sprache)
00128                          $value->languageid = $this->getSessionVar(REQ_PARAM_LANGUAGE_ID);
00129                          $value->save();
00130                     }
00131                }
00132           }
00133           $this->page->setTimestamp(); // "Letzte Aenderung" setzen
00134 
00135           if   ( $this->hasRequestVar('publish') )
00136                $this->callSubAction( 'pubnow' );
00137           else
00138                $this->callSubAction( 'el' );
00139      }
00140 
00141 
00147      function elsave()
00148      {
00149           $value = new Value();
00150           $language = Session::getProjectLanguage();
00151           $value->languageid = $language->languageid;
00152           $value->objectid   = $this->page->objectid;
00153           $value->pageid     = Page::getPageIdFromObjectId( $this->page->objectid );
00154 
00155           if   ( $this->hasRequestVar('elementid') )
00156                $value->element = new Element( $this->getRequestVar('elementid') );
00157           else
00158                $value->element = Session::getElement();
00159 
00160           $value->element->load();
00161           $value->publish = false;
00162           $value->load();
00163 
00164           $value->number         = $this->getRequestVar('number') * pow(10,$value->element->decimals);
00165           $value->linkToObjectId = intval($this->getRequestVar('linkobjectid'));
00166           $value->text           = $this->getRequestVar('text');
00167 
00168           // Vorschau anzeigen
00169           if   ( $value->element->type=='longtext' && ($this->hasRequestVar('preview')||$this->hasRequestVar('addmarkup')) )
00170           {
00171                if   ( $this->hasRequestVar('preview') )
00172                {
00173                     $value->page             = $this->page;
00174                     $value->simple           = false;
00175                     $value->page->languageid = $value->languageid;
00176                     $value->page->load();
00177                     $value->generate();
00178                     $this->setTemplateVar('preview_text',$value->value );
00179                }
00180 
00181                if   ( $this->hasRequestVar('addmarkup') )
00182                {
00183                     $addText = $this->getRequestVar('addtext');
00184 
00185                     if   ( !empty($addText) ) // Nur, wenn ein Text eingegeben wurde
00186                     {
00187                          $addText = $this->getRequestVar('addtext');
00188 
00189                          if   ( $this->hasRequestVar('strong') )
00190                               $value->text .= '*'.$addText.'*';
00191 
00192                          if   ( $this->hasRequestVar('emphatic') )
00193                               $value->text .= '_'.$addText.'_';
00194 
00195                          if   ( $this->hasRequestVar('link') )
00196                               $value->text .= '"'.$addText.'"->"'.$this->getRequestVar('objectid').'"';
00197                     }
00198 
00199                     if   ( $this->hasRequestVar('table') )
00200                          $value->text .= "|$addText  |  |\n|$addText  |  |\n|$addText  |  |\n";
00201 
00202                     if   ( $this->hasRequestVar('list') )
00203                          $value->text .= "\n- ".$addText."\n".'- '.$addText."\n".'- '.$addText."\n";
00204 
00205                     if   ( $this->hasRequestVar('numlist') )
00206                          $value->text .= "\n# ".$addText."\n".'# '.$addText."\n".'# '.$addText."\n";
00207 
00208                     if   ( $this->hasRequestVar('image') )
00209                          $value->text .= '{'.$this->getRequestVar('objectid').'}';
00210                }
00211 
00212                // Ermitteln aller verlinkbaren Objekte (fuer Editor)
00213                $objects = array();
00214      
00215                foreach( Folder::getAllObjectIds() as $id )
00216                {
00217                     $o = new Object( $id );
00218                     $o->load();
00219                     
00220                     if   ( $o->getType() != 'folder' )
00221                     { 
00222                          $f = new Folder( $o->parentid );
00223                          $objects[ $id ]  = lang( 'GLOBAL_'.$o->getType() ).': '; 
00224                          $objects[ $id ] .=  implode( FILE_SEP,$f->parentObjectNames(false,true) ); 
00225                          $objects[ $id ] .= FILE_SEP.$o->name;
00226                     } 
00227                }
00228                asort($objects);
00229                $this->setTemplateVar( 'objects' ,$objects );
00230      
00231                $this->setTemplateVar( 'release' ,$this->page->hasRight(ACL_RELEASE) );
00232                $this->setTemplateVar( 'publish' ,$this->page->hasRight(ACL_PUBLISH) );
00233                $this->setTemplateVar( 'html'    ,$value->element->html );
00234                $this->setTemplateVar( 'wiki'    ,$value->element->wiki );
00235                $this->setTemplateVar( 'text'    ,$value->text          );
00236                $this->setTemplateVar( 'name'    ,$value->element->name );
00237                $this->setTemplateVar( 'desc'    ,$value->element->desc );
00238                $this->setTemplateVar( 'objectid',$this->page->objectid );
00239                $this->forward( 'pageelement_edit_longtext' );
00240           }
00241 
00242           if   ( $this->hasRequestVar('year') ) // Wird ein Datum gespeichert?
00243           {
00244                // Wenn ein ANSI-Datum eingegeben wurde, dann dieses verwenden
00245                if   ( $this->getRequestVar('ansidate') != $this->getRequestVar('ansidate_orig') )
00246                     $value->date = strtotime($this->getRequestVar('ansidate') );
00247                else
00248                     // Sonst die Zeitwerte einzeln zu einem Datum zusammensetzen
00249                     $value->date = mktime( $this->getRequestVar('hour'  ),
00250                                            $this->getRequestVar('minute'),
00251                                             $this->getRequestVar('second'),
00252                                             $this->getRequestVar('month' ),
00253                                             $this->getRequestVar('day'   ),
00254                                             $this->getRequestVar('year'  ) );
00255           }
00256           else $value->date = 0; // Datum nicht gesetzt.
00257      
00258           $value->text = $this->getRequestVar('text');
00259 
00260           $value->page = new Page( $value->objectid );
00261           $value->page->load();
00262           
00263           // Inhalt sofort freigegeben, wenn
00264           // - Recht vorhanden
00265           // - Freigabe gewuenscht
00266           if   ( $value->page->hasRight( ACL_RELEASE ) && $this->getRequestVar('release')!='' )
00267                $value->publish = true;
00268           else
00269                $value->publish = false;
00270 
00271           // Inhalt speichern
00272           
00273           // Wenn Inhalt in allen Sprachen gleich ist, dann wird der Inhalt
00274           // fuer jede Sprache einzeln gespeichert.
00275           if   ( $value->element->allLanguages )
00276           {
00277                $project = Session::getProject();
00278                foreach( $project->getLanguageIds() as $languageid )
00279                {
00280                     $value->languageid = $languageid;
00281                     $value->save();
00282                }
00283           }
00284           else
00285           {
00286                // sonst nur 1x speichern (fuer die aktuelle Sprache)
00287                $value->save();
00288           }
00289 
00290           $this->page->setTimestamp(); // "Letzte Aenderung" setzen
00291 
00292           // Falls ausgewaehlt die Seite sofort veroeffentlichen
00293           if   ( $this->hasRequestVar('publish') )
00294                $this->callSubAction( 'pubnow' ); // Weiter zum veroeffentlichen
00295           else
00296                $this->callSubAction( 'el' ); // Element-Liste anzeigen
00297      }
00298 
00299 
00300 
00304      function saveprop()
00305      {
00306           if   ( $this->getRequestVar('name')!='' )
00307           {
00308                $this->page->name        = $this->getRequestVar('name'       );
00309                $this->page->filename    = $this->getRequestVar('filename'   );
00310                $this->page->desc        = $this->getRequestVar('description');
00311 
00312                $this->page->save();
00313                $this->addNotice($this->page->getType(),$this->page->name,'PROP_SAVED','ok');
00314           }
00315           else
00316           {
00317                $this->addValidationError('name');
00318                $this->callSubAction('prop');
00319           }
00320      }
00321 
00322 
00323 
00330      function changetemplateselectelements()
00331      {
00332           $newTemplateId = intval($this->getRequestVar('templateid'));
00333 
00334           if   ( $newTemplateId != 0  )
00335           {
00336                $this->setTemplateVar('newTemplateId',$newTemplateId );
00337 
00338                $oldElements = array();
00339                $oldTemplate = new Template( $this->page->templateid );
00340                $newTemplate = new Template( $newTemplateId );
00341                
00342                foreach( $oldTemplate->getElementIds() as $elementid )
00343                {
00344                     $e = new Element( $elementid );
00345                     $e->load();
00346                     
00347                     if   ( !$e->isWritable() )
00348                          continue;
00349 
00350                     $oldElement = array();
00351                     $oldElement['name'] = $e->name.' - '.lang('EL_'.$e->type );
00352                     $oldElement['id'  ] = $e->elementid;
00353 
00354                     $newElements = Array();
00355                     $newElements[0] = lang('ELEMENT_DELETE_VALUES');
00356      
00357                     foreach( $newTemplate->getElementIds() as $newelementid )
00358                     {
00359                          $ne = new Element( $newelementid );
00360                          $ne->load();
00361                          
00362                          // Nur neue Elemente anbieten, deren Typ identisch ist
00363                          if   ( $ne->type == $e->type )
00364                               $newElements[$newelementid] = lang('ELEMENT').': '.$ne->name.' - '.lang('EL_'.$e->type );
00365                     }
00366                     $oldElement['newElementsName'] = 'from'.$e->elementid;
00367                     $oldElement['newElementsList'] = $newElements;
00368                     $oldElements[$elementid] = $oldElement;
00369                }
00370                $this->setTemplateVar('elements',$oldElements );
00371           }
00372           else
00373           {
00374                $this->callSubAction('prop');
00375           }
00376      }
00377 
00378 
00379 
00385      function replacetemplate()
00386      {
00387           $newTemplateId = intval($this->getRequestVar('newTemplateId'));
00388           $replaceElementMap = Array();
00389           
00390           $oldTemplate = new Template( $this->page->templateid );
00391           foreach( $oldTemplate->getElementIds() as $elementid )
00392                $replaceElementMap[$elementid] = $this->getRequestVar('from'.$elementid);
00393           
00394           if   ( $newTemplateId != 0  )
00395           {
00396                $this->page->replaceTemplate( $newTemplateId,$replaceElementMap );
00397                $this->addNotice('page',$this->page->name,'SAVED',OR_NOTICE_OK);
00398           }
00399           else
00400                $this->addNotice('page',$this->page->name,'NOT_SAVED',OR_NOTICE_WARN);
00401      }
00402 
00403 
00404 
00405 
00409      function el()
00410      {
00411           $this->page->public = true;
00412           $this->page->simple = true;
00413           $this->page->generate_elements();
00414           
00415           $list = array();
00416      
00417           // Schleife ueber alle Inhalte der Seite
00418           foreach( $this->page->values as $id=>$value )
00419           {
00420                // Element wird nur angezeigt, wenn es editierbar ist
00421                if   ( $value->element->isWritable() )
00422                {
00423                     $list[$id] = array();
00424                     $list[$id]['name']       = $value->element->name;
00425                     $list[$id]['url' ]       = Html::url( 'pageelement','edit'   ,$this->page->id,array('elementid'=>$id,'mode'=>'edit') );
00426                     $list[$id]['desc']       = $value->element->desc;
00427                     $list[$id]['type']       = $value->element->type;
00428      
00429                     $list[$id]['archive_count'] = intval($value->getCountVersions());
00430                     if   ( $list[$id]['archive_count'] > 0 )
00431                          $list[$id]['archive_url'] = Html::url( 'pageelement','archive',$this->page->id,array('elementid'=>$id) );
00432                     
00433                     // Maximal 50 Stellen des Inhaltes anzeigen
00434                     $list[$id]['value'] = Text::maxLaenge( 50,$value->value );
00435                }
00436           }
00437 
00438           $this->setTemplateVar('el',$list);
00439      }
00440 
00441 
00445      function form()
00446      {
00447           global $conf_php;
00448 
00449           $this->page->public = false;
00450           $this->page->simple = true;
00451           $this->page->generate_elements();
00452           
00453           $list = array();
00454      
00455           foreach( $this->page->values as $id=>$value )
00456           {
00457                if   ( $value->element->isWritable() )
00458                {
00459                     $list[$id] = array();
00460                     $list[$id]['name']        = $value->element->name;
00461                     $list[$id]['desc']        = $value->element->desc;
00462                     $list[$id]['type']        = $value->element->type;
00463                     $list[$id]['id'  ]        = 'id'.$value->element->elementid;
00464                     $list[$id]['saveid']      = 'saveid'.$value->element->elementid;
00465 
00466                     switch( $value->element->type )
00467                     {
00468                          case 'text':
00469                          case 'longtext':
00470                               $list[$id]['value'] = $value->text;
00471                               break;
00472 
00473                          case 'date':
00474                               $list[$id]['value'] = date( 'Y-m-d H:i:s',$value->date );
00475                               break;
00476 
00477                          case 'number':
00478                               $list[$id]['value'] = $value->number / pow(10,$value->element->decimals);
00479                               break;
00480 
00481                          case 'select':
00482                               $list[$id]['list' ] = $value->element->getSelectItems();
00483                               $list[$id]['value'] = $value->text;
00484                               break;
00485 
00486                          case 'link':
00487                               $objects = array();
00488                     
00489                               foreach( Folder::getAllObjectIds() as $oid )
00490                               {
00491                                    $o = new Object( $oid );
00492                                    $o->load();
00493                                    
00494                                    if   ( $o->getType() != 'folder' )
00495                                    { 
00496                                         $f = new Folder( $o->parentid );
00497                                         $f->load();
00498                                         
00499                                         $objects[ $oid ]  = lang( $o->getType() ).': '; 
00500                                         $objects[ $oid ] .=  implode( ' &raquo; ',$f->parentObjectNames(false,true) ); 
00501                                         $objects[ $oid ] .= ' &raquo; '.$o->name;
00502                                    } 
00503                               }
00504           
00505                               asort( $objects ); // Sortieren
00506                     
00507                               $list[$id]['list' ] = $objects;
00508                               $list[$id]['value'] = $value->linkToObjectId;
00509                               break;
00510 
00511                          case 'list':
00512                               $objects = array();
00513                               foreach( Folder::getAllFolders() as $oid )
00514                               {
00515                                    $f = new Folder( $oid );
00516                                    $f->load();
00517                                    
00518                                    $objects[ $oid ]  = lang( $f->getType() ).': '; 
00519                                    $objects[ $oid ] .=  implode( ' &raquo; ',$f->parentObjectNames(false,true) ); 
00520                               }
00521                     
00522                               asort( $objects ); // Sortieren
00523                     
00524                               $this->setTemplateVar('list' ,$objects);
00525                               $this->setTemplateVar('value',$this->value->linkToObjectId);
00526           
00527                               break;
00528                     }
00529                }
00530           }
00531 
00532           $this->setTemplateVar( 'release',$this->page->hasRight(ACL_RELEASE) );
00533           $this->setTemplateVar( 'publish',$this->page->hasRight(ACL_PUBLISH) );
00534 
00535           $this->setWindowMenu( 'elements' );
00536           $this->setTemplateVar('el',$list);
00537           $this->forward('page_form');
00538      }
00539 
00540 
00541 
00545      function show()
00546      {
00547           // Seite definieren
00548           $this->page->load();
00549           $this->page->generate();
00550           $this->page->write();
00551 
00552           header('Content-Type: '.$this->page->mimeType().'; charset='.$this->getCharset() );
00553 
00554           // HTTP-Header mit Sprachinformation setzen.
00555           $language = Session::getProjectLanguage();
00556           header('Content-Language: '.$language->isoCode);
00557 
00558           require( $this->page->tmpfile() );
00559      }
00560 
00561 
00562 
00568      function edit()
00569      {
00570           // Editier-Icons anzeigen
00571           $this->page->icons = true;
00572      
00573           $this->page->load();
00574           $this->page->generate();
00575           $this->page->write();
00576           
00577           header('Content-Type: '.$this->page->mimeType().'; charset='.$this->getCharset() );
00578           
00579           // HTTP-Header mit Sprachinformation setzen.
00580           $language = Session::getProjectLanguage();
00581           header('Content-Language: '.$language->isoCode);
00582 
00583           
00584           require( $this->page->tmpfile() );
00585 
00586           // Inhalt ist ausgegeben... Skript beenden.
00587           exit;
00588      }
00589 
00590 
00591 
00597      function src()
00598      {
00599           $this->page->public = true;
00600           $this->page->load();
00601      
00602           $src = $this->page->generate();
00603           
00604           // HTML Highlighting
00605           
00606           //$src = preg_replace( '|<(.+)( .+)?'.'>|Us'       , '<strong>&lt;$1</strong>$2<strong>&gt;</strong>', $src);
00607           //$src = preg_replace( '|([a-zA-Z]+)="(.+)"|Us' , '<em>$1</em>=<var>"$2"</var>'                   , $src);
00608           $src = htmlentities($src);
00609           
00610           $this->setTemplateVar('src',$src);
00611      }
00612 
00613 
00614 
00618      function prop()
00619      {
00620           $this->setTemplateVar('id',$this->page->objectid);
00621      
00622           $this->page->public = true;
00623           $this->page->load();
00624           $this->page->full_filename();
00625 
00626           if   ( $this->page->filename == $this->page->objectid )
00627                $this->page->filename = '';
00628 
00629           $this->setTemplateVars( $this->page->getProperties() );
00630           
00631           if   ( $this->userIsAdmin() )
00632           {
00633                $this->setTemplateVar('template_url',Html::url('main','template',$this->page->templateid));
00634           }
00635      
00636           $template = new Template( $this->page->templateid );
00637           $template->load();
00638           $this->setTemplateVar('template_name',$template->name);
00639      
00640           // Alle Ordner ermitteln
00641 //        $this->setTemplateVar('act_folderobjectid',$this->page->parentid);
00642 //
00643 //        $folders = array();
00644 //        $folder = new Folder( $this->page->parentid );
00645           
00646 //        foreach( $folder->getOtherFolders() as $oid )
00647 //        {
00648 //             $f = new Folder( $oid );
00649 //             $folders[$oid] = implode( FILE_SEP,$f->parentObjectNames(true,true) );
00650 //        }
00651 //        asort( $folders );
00652 //        $this->setTemplateVar('folder',$folders); 
00653 
00654           $templates = Array();
00655           foreach( Template::getAll() as $id=>$name )
00656           {
00657                if   ( $id != $this->page->templateid )
00658                     $templates[$id]=$name;
00659           }
00660           $this->setTemplateVar('templates',$templates); 
00661            
00662      
00663           $this->forward('page_prop');
00664      }
00665 
00666 
00667 
00668 
00672      function changetemplate()
00673      {
00674           $this->page->public = true;
00675           $this->page->load();
00676 
00677           $this->setTemplateVars( $this->page->getProperties() );
00678           
00679           if   ( $this->userIsAdmin() )
00680           {
00681                $this->setTemplateVar('template_url',Html::url('main','template',$this->page->templateid));
00682           }
00683      
00684           $template = new Template( $this->page->templateid );
00685           $template->load();
00686           $this->setTemplateVar('template_name',$template->name);
00687      
00688           $templates = Array();
00689           foreach( Template::getAll() as $id=>$name )
00690           {
00691                if   ( $id != $this->page->templateid )
00692                     $templates[$id]=$name;
00693           }
00694           $this->setTemplateVar('templates',$templates); 
00695      }
00696 
00697 
00698 
00699      
00700 
00707      function pub()
00708      {
00709      }
00710 
00711 
00712 
00718      function pubnow()
00719      {
00720           if   ( !$this->page->hasRight( ACL_PUBLISH ) )
00721                die( 'no right for publish' );
00722 
00723           $this->page->public = true;
00724           $this->page->publish();
00725           $this->page->publish->close();
00726 
00727 //        foreach( $this->page->publish->publishedObjects as $o )
00728 //        {
00729 //             $this->addNotice($o['type'],$o['full_filename'],'PUBLISHED','ok');
00730 //        }
00731 
00732           $this->addNotice('page',$this->page->fullFilename,'PUBLISHED'.($this->page->publish->ok?'':'_ERROR'),$this->page->publish->ok,array(),$this->page->publish->log);
00733 
00734           $this->callSubaction('pub');
00735      }
00736      
00737      
00738      function setWindowMenu( $type ) {
00739           switch( $type)
00740           {
00741                case 'elements':
00742                     $menu = array( array('subaction'=>'el'  ,'text'=>'all'),
00743                                    array('subaction'=>'form','text'=>'change'    )  );
00744                     $this->setTemplateVar('windowMenu',$menu);
00745                     break;
00746                case 'acl':
00747                     $menu = array( array('subaction'=>'rights' ,'text'=>'show'),
00748                                  array('subaction'=>'aclform','text'=>'add' ) );
00749                     $this->setTemplateVar('windowMenu',$menu);
00750                     break;
00751 
00752           }
00753      }
00754 }
00755 
00756 ?>

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