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( ' » ',$f->parentObjectNames(false,true) ); 68 $objects[ $oid ] .= ' » '.$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( ' » ',$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 }