openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

PageFormAction.class.php (4618B)


      1 <?php
      2 namespace cms\action\page;
      3 use cms\action\Method;
      4 use cms\action\PageAction;
      5 use cms\model\Permission;
      6 use cms\model\BaseObject;
      7 use cms\model\Element;
      8 use cms\model\Folder;
      9 use cms\model\Page;
     10 use cms\model\Project;
     11 use cms\model\Value;
     12 
     13 class PageFormAction extends PageAction implements Method {
     14 
     15 	public function getRequiredPermission() {
     16 		return Permission::ACL_WRITE;
     17 	}
     18 
     19 	public function view() {
     20 		$list = array();
     21 
     22 		foreach( $this->page->values as $id=>$value )
     23 		{
     24 			if   ( $value->element->isWritable() )
     25 			{
     26 				$list[$id] = array();
     27 				$list[$id]['name']        = $value->element->name;
     28 				$list[$id]['desc']        = $value->element->desc;
     29 				$list[$id]['type']        = $value->element->type;
     30 				$list[$id]['id'  ]        = 'id'.$value->element->elementid;
     31 				$list[$id]['saveid']      = 'saveid'.$value->element->elementid;
     32 
     33 				switch( $value->element->type )
     34 				{
     35 					case 'text':
     36 					case 'longtext':
     37 						$list[$id]['value'] = $value->text;
     38 						break;
     39 
     40 					case 'date':
     41 						$list[$id]['value'] = date( 'Y-m-d H:i:s',$value->date );
     42 						break;
     43 
     44 					case 'number':
     45 						$list[$id]['value'] = $value->number / pow(10,$value->element->decimals);
     46 						break;
     47 
     48 					case 'select':
     49 						$list[$id]['list' ] = $value->element->getSelectItems();
     50 						$list[$id]['value'] = $value->text;
     51 						break;
     52 
     53 					case 'link':
     54 						$objects = array();
     55 
     56 						foreach( Folder::getAllObjectIds() as $oid )
     57 						{
     58 							$o = new BaseObject( $oid );
     59 							$o->load();
     60 
     61 							if	( $o->getType() != 'folder' )
     62 							{
     63 								$f = new Folder( $o->parentid );
     64 								$f->load();
     65 
     66 								$objects[ $oid ]  = \cms\base\Language::lang( $o->getType() ).': ';
     67 								$objects[ $oid ] .=  implode( ' &raquo; ',$f->parentObjectNames(false,true) );
     68 								$objects[ $oid ] .= ' &raquo; '.$o->name;
     69 							}
     70 						}
     71 
     72 						asort( $objects ); // Sortieren
     73 
     74 						$list[$id]['list' ] = $objects;
     75 						$list[$id]['value'] = $value->linkToObjectId;
     76 						break;
     77 
     78 					case 'list':
     79 						$objects = array();
     80 						foreach( Folder::getAllFolders() as $oid )
     81 						{
     82 							$f = new Folder( $oid );
     83 							$f->load();
     84 
     85 							$objects[ $oid ]  = \cms\base\Language::lang( $f->getType() ).': ';
     86 							$objects[ $oid ] .=  implode( ' &raquo; ',$f->parentObjectNames(false,true) );
     87 						}
     88 
     89 						asort( $objects ); // Sortieren
     90 
     91 						$this->setTemplateVar('list' ,$objects);
     92 						$this->setTemplateVar('value',$this->value->linkToObjectId);
     93 
     94 						break;
     95 				}
     96 			}
     97 		}
     98 
     99 		$this->setTemplateVar( 'release',$this->page->hasRight(Permission::ACL_RELEASE) );
    100 		$this->setTemplateVar( 'publish',$this->page->hasRight(Permission::ACL_PUBLISH) );
    101 
    102 		$this->setTemplateVar('el',$list);
    103     }
    104 
    105 
    106     public function post() {
    107 		foreach( $this->page->getElements() as $elementid=>$name )
    108 		{
    109 			if   ( $this->request->has('saveid'.$elementid) )
    110 			{
    111 				$value = new Value();
    112 				$value->objectid   = $this->page->objectid;
    113 				$value->pageid     = Page::getPageIdFromObjectId( $value->objectid );
    114 				$value->element = new Element( $elementid );
    115 				$value->element->load();
    116 				$value->load();
    117 
    118 				// Eingegebenen Inhalt aus dem Request lesen
    119 				$inhalt  = $this->request->getText( 'id'.$elementid );
    120 
    121 				// Den Inhalt speichern.
    122 				switch( $value->element->type )
    123 				{
    124 					case 'number':
    125 						$value->number = $inhalt * pow(10,$value->element->decimals);
    126 						break;
    127 
    128 					case 'date':
    129 						$value->date = strtotime( $inhalt );
    130 						break;
    131 
    132 					case 'text':
    133 					case 'longtext':
    134 					case 'select':
    135 						$value->text = $inhalt;
    136 						break;
    137 
    138 					case 'link':
    139 					case 'list':
    140 					case 'insert':
    141 						$value->linkToObjectId = intval($inhalt);
    142 						break;
    143 				}
    144 
    145 				$value->page = &$this->page;
    146 
    147 				// Ermitteln, ob Inhalt sofort freigegeben werden kann und soll
    148 				if	( $this->page->hasRight( Permission::ACL_RELEASE ) && $this->request->has('release') )
    149 					$value->publish = true;
    150 				else
    151 					$value->publish = false;
    152 
    153 //				Html::debug($inhalt,'Eingabe');
    154 //				Html::debug($value,'Inhalt');
    155 
    156 				// Inhalt speichern.
    157 				// Inhalt in allen Sprachen gleich?
    158 				if	( $value->element->allLanguages )
    159 				{
    160 					// Inhalt fuer jede Sprache einzeln speichern.
    161 					$p = new Project();
    162 					foreach( $p->getLanguageIds() as $languageid )
    163 					{
    164 						$value->languageid = $languageid;
    165 						$value->add();
    166 					}
    167 				}
    168 				else
    169 				{
    170 					// sonst nur 1x speichern (fuer die aktuelle Sprache)
    171 					$value->languageid = $this->request->getVar(RequestParams::PARAM_LANGUAGE_ID);
    172 					$value->add();
    173 				}
    174 			}
    175 		}
    176 		$this->page->setTimestamp(); // "Letzte Aenderung" setzen
    177 
    178     }
    179 }