PageAction.class.php (23936B)
1 <?php 2 3 namespace cms\action; 4 5 use cms\model\Acl; 6 use cms\model\Project; 7 use cms\model\Value; 8 use cms\model\Element; 9 use cms\model\Template; 10 use cms\model\Page; 11 use cms\model\Folder; 12 use cms\model\BaseObject; 13 use cms\model\Language; 14 use cms\model\Model; 15 use cms\publish\PublishPreview; 16 use cms\publish\PublishPublic; 17 use \Html; 18 use Http; 19 use Logger; 20 use Session; 21 22 23 /** 24 * Action-Klasse zum Bearbeiten einer Seite 25 * @author $Author$ 26 * @version $Revision$ 27 * @package openrat.actions 28 */ 29 30 class PageAction extends ObjectAction 31 { 32 public $security = Action::SECURITY_USER; 33 34 /** 35 * @var Page 36 */ 37 private $page; 38 39 40 function __construct() 41 { 42 parent::__construct(); 43 44 } 45 46 47 public function init() 48 { 49 $page = new Page( $this->getRequestId() ); 50 51 if ( $this->request->hasLanguageId()) 52 $page->languageid = $this->request->getLanguageId(); 53 54 if ( $this->request->hasModelId()) 55 $page->modelid = $this->request->getModelId(); 56 57 $page->load(); 58 59 if ( !$page->languageid ) 60 $page->languageid = $page->getProject()->getDefaultLanguageId(); 61 62 if ( !$page->modelid ) 63 $page->modelid = $page->getProject()->getDefaultModelId(); 64 65 // Hier kann leider nicht das Datum der letzten Änderung verwendet werden, 66 // da sich die Seite auch danach ändern kann, z.B. durch Includes anderer 67 // Seiten oder Änderung einer Vorlage oder Änderung des Dateinamens einer 68 // verlinkten Datei. 69 $this->lastModified( time() ); 70 71 $this->setBaseObject($page); 72 } 73 74 75 76 protected function setBaseObject($folder ) { 77 78 $this->page = $folder; 79 80 parent::setBaseObject( $folder ); 81 } 82 83 84 /** 85 * Alle Daten aus dem Formular speichern 86 */ 87 function formPost() 88 { 89 $this->page->public = true; 90 $this->page->simple = true; 91 92 foreach( $this->page->getElements() as $elementid=>$name ) 93 { 94 if ( $this->hasRequestVar('saveid'.$elementid) ) 95 { 96 $value = new Value(); 97 $value->objectid = $this->page->objectid; 98 $value->pageid = Page::getPageIdFromObjectId( $value->objectid ); 99 $value->element = new Element( $elementid ); 100 $value->element->load(); 101 $value->load(); 102 103 // Eingegebenen Inhalt aus dem Request lesen 104 $inhalt = $this->getRequestVar( 'id'.$elementid ); 105 106 // Den Inhalt speichern. 107 switch( $value->element->type ) 108 { 109 case 'number': 110 $value->number = $inhalt * pow(10,$value->element->decimals); 111 break; 112 113 case 'date': 114 $value->date = strtotime( $inhalt ); 115 break; 116 117 case 'text': 118 case 'longtext': 119 case 'select': 120 $value->text = $inhalt; 121 break; 122 123 case 'link': 124 case 'list': 125 case 'insert': 126 $value->linkToObjectId = intval($inhalt); 127 break; 128 } 129 130 $value->page = &$this->page; 131 132 // Ermitteln, ob Inhalt sofort freigegeben werden kann und soll 133 if ( $this->page->hasRight( Acl::ACL_RELEASE ) && $this->hasRequestVar('release') ) 134 $value->publish = true; 135 else 136 $value->publish = false; 137 138 // Html::debug($inhalt,'Eingabe'); 139 // Html::debug($value,'Inhalt'); 140 141 // Inhalt speichern. 142 // Inhalt in allen Sprachen gleich? 143 if ( $value->element->allLanguages ) 144 { 145 // Inhalt fuer jede Sprache einzeln speichern. 146 $p = new Project(); 147 foreach( $p->getLanguageIds() as $languageid ) 148 { 149 $value->languageid = $languageid; 150 $value->save(); 151 } 152 } 153 else 154 { 155 // sonst nur 1x speichern (fuer die aktuelle Sprache) 156 $value->languageid = $this->getSessionVar(REQ_PARAM_LANGUAGE_ID); 157 $value->save(); 158 } 159 } 160 } 161 $this->page->setTimestamp(); // "Letzte Aenderung" setzen 162 163 if ( $this->hasRequestVar('publish') ) 164 $this->callSubAction( 'pubnow' ); 165 else 166 $this->callSubAction( 'el' ); 167 } 168 169 170 /** 171 * Element speichern 172 * 173 * Der Inhalt eines Elementes wird abgespeichert 174 */ 175 function editPost() 176 { 177 $value = new Value(); 178 $value->languageid = $this->page->languageid; 179 $value->objectid = $this->page->objectid; 180 $value->pageid = Page::getPageIdFromObjectId( $this->page->objectid ); 181 182 if ( ! $this->hasRequestVar('elementid') ) 183 $this->addValidationError('elementid' ); 184 185 $value->element = new Element( $this->getRequestVar('elementid') ); 186 187 $value->element->load(); 188 $value->load(); 189 190 $value->number = $this->getRequestVar('number') * pow(10,$value->element->decimals); 191 $value->linkToObjectId = intval($this->getRequestVar('linkobjectid')); 192 $value->text = $this->getRequestVar('text'); 193 194 // Vorschau anzeigen 195 if ( $value->element->type=='longtext' && ($this->hasRequestVar('preview')||$this->hasRequestVar('addmarkup')) ) 196 { 197 if ( $this->hasRequestVar('preview') ) 198 { 199 $value->page = $this->page; 200 $value->simple = false; 201 $value->page->languageid = $value->languageid; 202 $value->page->load(); 203 $value->generate(); 204 $this->setTemplateVar('preview_text',$value->value ); 205 } 206 207 if ( $this->hasRequestVar('addmarkup') ) 208 { 209 $addText = $this->getRequestVar('addtext'); 210 211 if ( !empty($addText) ) // Nur, wenn ein Text eingegeben wurde 212 { 213 $addText = $this->getRequestVar('addtext'); 214 215 if ( $this->hasRequestVar('strong') ) 216 $value->text .= '*'.$addText.'*'; 217 218 if ( $this->hasRequestVar('emphatic') ) 219 $value->text .= '_'.$addText.'_'; 220 221 if ( $this->hasRequestVar('link') ) 222 $value->text .= '"'.$addText.'"->"'.$this->getRequestVar('objectid').'"'; 223 } 224 225 if ( $this->hasRequestVar('table') ) 226 $value->text .= "|$addText | |\n|$addText | |\n|$addText | |\n"; 227 228 if ( $this->hasRequestVar('list') ) 229 $value->text .= "\n- ".$addText."\n".'- '.$addText."\n".'- '.$addText."\n"; 230 231 if ( $this->hasRequestVar('numlist') ) 232 $value->text .= "\n# ".$addText."\n".'# '.$addText."\n".'# '.$addText."\n"; 233 234 if ( $this->hasRequestVar('image') ) 235 $value->text .= '{'.$this->getRequestVar('objectid').'}'; 236 } 237 238 // Ermitteln aller verlinkbaren Objekte (fuer Editor) 239 $objects = array(); 240 241 foreach( Folder::getAllObjectIds() as $id ) 242 { 243 $o = new BaseObject( $id ); 244 $o->load(); 245 246 if ( $o->getType() != 'folder' ) 247 { 248 $f = new Folder( $o->parentid ); 249 $objects[ $id ] = lang( 'GLOBAL_'.$o->getType() ).': '; 250 $objects[ $id ] .= implode( FILE_SEP,$f->parentObjectNames(false,true) ); 251 $objects[ $id ] .= FILE_SEP.$o->name; 252 } 253 } 254 asort($objects); 255 $this->setTemplateVar( 'objects' ,$objects ); 256 257 $this->setTemplateVar( 'release' ,$this->page->hasRight(Acl::ACL_RELEASE) ); 258 $this->setTemplateVar( 'publish' ,$this->page->hasRight(Acl::ACL_PUBLISH) ); 259 $this->setTemplateVar( 'html' ,$value->element->html ); 260 $this->setTemplateVar( 'wiki' ,$value->element->wiki ); 261 $this->setTemplateVar( 'text' ,$value->text ); 262 $this->setTemplateVar( 'name' ,$value->element->name ); 263 $this->setTemplateVar( 'desc' ,$value->element->desc ); 264 $this->setTemplateVar( 'objectid',$this->page->objectid ); 265 return; 266 } 267 268 if ( $this->hasRequestVar('year') ) // Wird ein Datum gespeichert? 269 { 270 // Wenn ein ANSI-Datum eingegeben wurde, dann dieses verwenden 271 if ( $this->getRequestVar('ansidate') != $this->getRequestVar('ansidate_orig') ) 272 $value->date = strtotime($this->getRequestVar('ansidate') ); 273 else 274 // Sonst die Zeitwerte einzeln zu einem Datum zusammensetzen 275 $value->date = mktime( $this->getRequestVar('hour' ), 276 $this->getRequestVar('minute'), 277 $this->getRequestVar('second'), 278 $this->getRequestVar('month' ), 279 $this->getRequestVar('day' ), 280 $this->getRequestVar('year' ) ); 281 } 282 else $value->date = 0; // Datum nicht gesetzt. 283 284 $value->text = $this->getRequestVar('text'); 285 286 $value->page = new Page( $value->objectid ); 287 $value->page->load(); 288 289 // Inhalt sofort freigegeben, wenn 290 // - Recht vorhanden 291 // - Freigabe gewuenscht 292 if ( $value->page->hasRight( Acl::ACL_RELEASE ) && $this->getRequestVar('release')!='' ) 293 $value->publish = true; 294 else 295 $value->publish = false; 296 297 // Inhalt speichern 298 299 // Wenn Inhalt in allen Sprachen gleich ist, dann wird der Inhalt 300 // fuer jede Sprache einzeln gespeichert. 301 if ( $value->element->allLanguages ) 302 { 303 $project = new Project( $this->page->projectid ); 304 foreach( $project->getLanguageIds() as $languageid ) 305 { 306 $value->languageid = $languageid; 307 $value->save(); 308 } 309 } 310 else 311 { 312 // sonst nur 1x speichern (fuer die aktuelle Sprache) 313 $value->save(); 314 } 315 316 $this->page->setTimestamp(); // "Letzte Aenderung" setzen 317 318 // Falls ausgewaehlt die Seite sofort veroeffentlichen 319 if ( $this->hasRequestVar('publish') ) 320 $this->callSubAction( 'pubnow' ); // Weiter zum veroeffentlichen 321 else 322 $this->callSubAction( 'el' ); // Element-Liste anzeigen 323 } 324 325 326 327 /** 328 * Die Eigenschaften der Seite anzeigen 329 */ 330 function infoView() 331 { 332 $this->setTemplateVar('id',$this->page->objectid); 333 334 $this->page->publisher = new PublishPublic( $this->page->projectid ); 335 $this->page->load(); 336 $this->page->full_filename(); 337 338 if ( $this->page->filename == $this->page->objectid ) 339 $this->page->filename = ''; 340 341 $this->setTemplateVars( $this->page->getProperties() ); 342 343 $alias = $this->page->getAliasForLanguage(null); 344 $this->setTemplateVar( 'alias', $alias->full_filename() ); 345 346 $languages = $this->page->getProject()->getLanguages(); 347 $languagesVars = array(); 348 349 foreach( $languages as $id => $name ) 350 { 351 $this->page->languageid = $id; 352 $this->page->load(); 353 354 $languagesVar = $this->page->getProperties(); 355 $languagesVar['languagename'] = $name; 356 $languagesVar['languageid' ] = $id; 357 $alias = $this->page->getAliasForLanguage( $id ); 358 $languagesVar['alias' ] = $alias->full_filename(); 359 360 $languagesVars[] = $languagesVar; 361 362 } 363 364 $this->setTemplateVar('languages',$languagesVars ); 365 366 if ( $this->userIsProjectAdmin() ) 367 { 368 $this->setTemplateVar('templateid',$this->page->templateid); 369 $this->setTemplateVar('modelid',$this->page->modelid); 370 } 371 372 $template = new Template( $this->page->templateid ); 373 $template->load(); 374 $this->setTemplateVar('template_name',$template->name ); 375 $this->setTemplateVar('tmp_filename' ,$this->page->getCache()->getFilename() ); 376 377 } 378 379 380 381 382 /** 383 * Die Eigenschaften der Seite anzeigen 384 */ 385 function nameView() 386 { 387 $this->page->load(); 388 389 $this->setTemplateVars( $this->page->getProperties() ); 390 $this->setTemplateVar( 'languageid', $this->page->languageid ); 391 392 $alias = $this->page->getAliasForLanguage( $this->page->languageid ); 393 394 $this->setTemplateVar( 'alias_filename', $alias->filename ); 395 $this->setTemplateVar( 'alias_folderid', $alias->parentid ); 396 397 $project = Project::create( $this->page->projectid ); 398 $this->setTemplateVar( 'folders' , $project->getAllFlatFolders() ); 399 } 400 401 402 403 404 function namePost() { 405 406 parent::namePost(); // Save name and description 407 408 $alias = $this->page->getAliasForLanguage( $this->getRequestId('languageid')); 409 410 $alias->filename = BaseObject::urlify( $this->getRequestVar( 'alias_filename') ); 411 $alias->parentid = $this->getRequestId('alias_folderid'); 412 413 // If no alias, remove the alias 414 if ( ! $alias->filename ) { 415 416 $alias->delete(); 417 $this->addNotice($alias->getType(),'','DELETED','ok'); 418 } 419 else 420 { 421 $alias->save(); 422 $this->addNotice($alias->getType(),$alias->filename,'SAVED','ok'); 423 } 424 425 } 426 427 428 /** 429 * Austauschen der Vorlage vorbereiten 430 * 431 * Es wird ein Formualar erzeugt, in dem der Benutzer auswaehlen kann, welche Elemente 432 * in welches Element uebernommen werden sollen 433 */ 434 public function changetemplateselectelementsView() 435 { 436 $newTemplateId = $this->getRequestVar( 'newtemplateid' ); 437 438 if ( $newTemplateId != 0 ) 439 { 440 $this->setTemplateVar('newtemplateid',$newTemplateId ); 441 442 $oldElements = array(); 443 $oldTemplate = new Template( $this->page->templateid ); 444 $newTemplate = new Template( $newTemplateId ); 445 446 foreach( $oldTemplate->getElementIds() as $elementid ) 447 { 448 $e = new Element( $elementid ); 449 $e->load(); 450 451 if ( !$e->isWritable() ) 452 continue; 453 454 $oldElement = array(); 455 $oldElement['name'] = $e->name.' - '.lang('EL_'.$e->type ); 456 $oldElement['id' ] = $e->elementid; 457 458 $newElements = Array(); 459 $newElements[0] = lang('ELEMENT_DELETE_VALUES'); 460 461 foreach( $newTemplate->getElementIds() as $newelementid ) 462 { 463 $ne = new Element( $newelementid ); 464 $ne->load(); 465 466 // Nur neue Elemente anbieten, deren Typ identisch ist 467 if ( $ne->type == $e->type ) 468 $newElements[$newelementid] = lang('ELEMENT').': '.$ne->name.' - '.lang('EL_'.$e->type ); 469 } 470 $oldElement['newElementsName'] = 'from'.$e->elementid; 471 $oldElement['newElementsList'] = $newElements; 472 $oldElements[$elementid] = $oldElement; 473 } 474 $this->setTemplateVar('elements',$oldElements ); 475 } 476 else 477 { 478 $this->callSubAction('prop'); 479 } 480 } 481 482 483 484 /** 485 * Die Vorlage der Seite austauschen 486 * 487 * Die Vorlage wird ausgetauscht, die Inhalte werden gemaess der Benutzereingaben kopiert 488 */ 489 public function changetemplateselectelementsPost() 490 { 491 $newTemplateId = $this->getRequestVar('newtemplateid'); 492 $replaceElementMap = Array(); 493 494 $oldTemplate = new Template( $this->page->templateid ); 495 foreach( $oldTemplate->getElementIds() as $elementid ) 496 $replaceElementMap[$elementid] = $this->getRequestVar('from'.$elementid); 497 498 if ( $newTemplateId != 0 ) 499 { 500 $this->page->replaceTemplate( $newTemplateId,$replaceElementMap ); 501 $this->addNotice('page',$this->page->name,'SAVED',OR_NOTICE_OK); 502 } 503 else 504 $this->addNotice('page',$this->page->name,'NOT_SAVED',OR_NOTICE_WARN); 505 } 506 507 508 509 510 /** 511 * Alle Elemente der Seite anzeigen 512 */ 513 function editView() 514 { 515 $template = new Template( $this->page->templateid ); 516 $template->load(); 517 518 /** @var Element[] $elements */ 519 $elements = $template->getElements(); 520 521 $elements = array_filter(/** 522 * @param $element Element 523 * @return Element 524 */ $elements, function($element ) { 525 return $element->isWritable(); 526 } ); 527 528 $elements = array_map( function( $element ) { 529 return get_object_vars( $element ) + array('pageelementid'=>$this->page->id.'_'.$element->elementid,'typename'=>$element->getTypeName() ); 530 }, $elements); 531 532 $this->setTemplateVar('elements',$elements); 533 } 534 535 536 /** 537 * Alle editierbaren Felder in einem Formular bereitstellen 538 */ 539 function formView() 540 { 541 global $conf_php; 542 543 $this->page->public = false; 544 $this->page->simple = true; 545 $this->page->generate_elements(); 546 547 $list = array(); 548 549 foreach( $this->page->values as $id=>$value ) 550 { 551 if ( $value->element->isWritable() ) 552 { 553 $list[$id] = array(); 554 $list[$id]['name'] = $value->element->name; 555 $list[$id]['desc'] = $value->element->desc; 556 $list[$id]['type'] = $value->element->type; 557 $list[$id]['id' ] = 'id'.$value->element->elementid; 558 $list[$id]['saveid'] = 'saveid'.$value->element->elementid; 559 560 switch( $value->element->type ) 561 { 562 case 'text': 563 case 'longtext': 564 $list[$id]['value'] = $value->text; 565 break; 566 567 case 'date': 568 $list[$id]['value'] = date( 'Y-m-d H:i:s',$value->date ); 569 break; 570 571 case 'number': 572 $list[$id]['value'] = $value->number / pow(10,$value->element->decimals); 573 break; 574 575 case 'select': 576 $list[$id]['list' ] = $value->element->getSelectItems(); 577 $list[$id]['value'] = $value->text; 578 break; 579 580 case 'link': 581 $objects = array(); 582 583 foreach( Folder::getAllObjectIds() as $oid ) 584 { 585 $o = new BaseObject( $oid ); 586 $o->load(); 587 588 if ( $o->getType() != 'folder' ) 589 { 590 $f = new Folder( $o->parentid ); 591 $f->load(); 592 593 $objects[ $oid ] = lang( $o->getType() ).': '; 594 $objects[ $oid ] .= implode( ' » ',$f->parentObjectNames(false,true) ); 595 $objects[ $oid ] .= ' » '.$o->name; 596 } 597 } 598 599 asort( $objects ); // Sortieren 600 601 $list[$id]['list' ] = $objects; 602 $list[$id]['value'] = $value->linkToObjectId; 603 break; 604 605 case 'list': 606 $objects = array(); 607 foreach( Folder::getAllFolders() as $oid ) 608 { 609 $f = new Folder( $oid ); 610 $f->load(); 611 612 $objects[ $oid ] = lang( $f->getType() ).': '; 613 $objects[ $oid ] .= implode( ' » ',$f->parentObjectNames(false,true) ); 614 } 615 616 asort( $objects ); // Sortieren 617 618 $this->setTemplateVar('list' ,$objects); 619 $this->setTemplateVar('value',$this->value->linkToObjectId); 620 621 break; 622 } 623 } 624 } 625 626 $this->setTemplateVar( 'release',$this->page->hasRight(Acl::ACL_RELEASE) ); 627 $this->setTemplateVar( 'publish',$this->page->hasRight(Acl::ACL_PUBLISH) ); 628 629 $this->setWindowMenu( 'elements' ); 630 $this->setTemplateVar('el',$list); 631 } 632 633 634 635 /** 636 * Seite anzeigen 637 */ 638 public function previewView() 639 { 640 $this->setModelAndLanguage(); 641 642 $this->setTemplateVar('preview_url',Html::url('page','show',$this->page->objectid,array(REQ_PARAM_LANGUAGE_ID=>$this->page->languageid,REQ_PARAM_MODEL_ID=>$this->page->modelid) ) ); 643 } 644 645 646 647 /** 648 * Seite anzeigen 649 */ 650 function showView() 651 { 652 // Do NOT use CSP here. 653 // The output is only shown in an iframe, so there is no security impact to the CMS. 654 // But if the template is using inline JS or CSS, we would break this with a CSP-header. 655 header('Content-Security-Policy:'); 656 // TODO: Read CSP from root folder settings. 657 658 // Seite definieren 659 if ( $this->hasRequestVar('withIcons') ) 660 $this->page->icons = true; 661 662 $publisher = new PublishPreview(); 663 664 $this->page->publisher = $publisher; 665 666 $this->page->load(); 667 $this->page->generate(); 668 669 header('Content-Type: '.$this->page->mimeType().'; charset=UTF-8' ); 670 671 // HTTP-Header mit Sprachinformation setzen. 672 $language = new Language( $this->page->languageid); 673 $language->load(); 674 header('Content-Language: '.$language->isoCode); 675 676 Logger::debug("Preview page: ".$this->page->__toString() ); 677 678 // Executing PHP in Pages. 679 if ( ( config('publish','enable_php_in_page_content')=='auto' && $this->page->template->extension == 'php') || 680 config('publish','enable_php_in_page_content')===true ) 681 { 682 ob_start(); 683 require( $this->page->getCache()->getFilename() ); 684 $this->setTemplateVar('output',ob_get_contents() ); 685 ob_end_clean(); 686 } 687 else 688 $this->setTemplateVar('output',file_get_contents( $this->page->getCache()->getFilename() ) ); 689 } 690 691 692 693 /** 694 * Den Quellcode der Seite anzeigen 695 * 696 * Alle HTML-Sonderzeichen werden maskiert 697 */ 698 function srcView() 699 { 700 $project = new Project( $this->page->projectid ); 701 702 $this->page->withLanguage = config('publish','filename_language') == 'always' || count($project->getLanguageIds()) > 1; 703 $this->page->withModel = config('publish','filename_type' ) == 'always' || count($project->getModelIds() ) > 1; 704 705 $this->page->publisher = new PublishPublic( $this->page->projectid ); 706 $this->page->load(); 707 708 $this->setModelAndLanguage(); 709 710 $src = $this->page->generate(); 711 712 $this->setTemplateVar('src',$src); 713 } 714 715 716 717 718 /** 719 * Die Eigenschaften der Seite anzeigen 720 */ 721 function changetemplateView() 722 { 723 $this->page->public = true; 724 $this->page->load(); 725 726 727 $this->setTemplateVars( $this->page->getProperties() ); 728 729 if ( $this->userIsAdmin() ) 730 { 731 $this->setTemplateVar('template_url',Html::url('main','template',$this->page->templateid,array(REQ_PARAM_MODEL_ID=>$this->page->modelid))); 732 } 733 734 $template = new Template( $this->page->templateid ); 735 $template->load(); 736 $this->setTemplateVar('template_name',$template->name); 737 738 $templates = Array(); 739 $project = new Project( $this->page->projectid ); 740 foreach( $project->getTemplates() as $id=>$name ) 741 { 742 if ( $id != $this->page->templateid ) 743 $templates[$id]=$name; 744 } 745 $this->setTemplateVar('templates',$templates); 746 } 747 748 749 750 751 752 /** 753 * Seite veroeffentlichen 754 * 755 * Es wird ein Formular angzeigt, mit dem die Seite veroeffentlicht 756 * werden kann 757 */ 758 function pubView() 759 { 760 } 761 762 763 764 /** 765 * Seite veroeffentlichen 766 * 767 * Die Seite wird generiert. 768 */ 769 function pubPost() 770 { 771 if ( !$this->page->hasRight( Acl::ACL_PUBLISH ) ) 772 throw new \SecurityException( 'no right for publish' ); 773 774 Session::close(); 775 776 $publisher = new PublishPublic( $this->page->projectid ); 777 778 $this->page->publisher = $publisher; 779 $this->page->publish(); 780 $publisher->close(); 781 782 $this->addNotice( 'page', 783 $this->page->fullFilename, 784 'PUBLISHED', 785 OR_NOTICE_OK, 786 array(), 787 array_map(function($obj) { 788 return $obj['full_filename']; 789 },$publisher->publishedObjects) 790 ); 791 } 792 793 794 function setWindowMenu( $type ) { 795 switch( $type) 796 { 797 case 'elements': 798 $menu = array( array('subaction'=>'el' ,'text'=>'all'), 799 array('subaction'=>'form','text'=>'change' ) ); 800 $this->setTemplateVar('windowMenu',$menu); 801 break; 802 case 'acl': 803 $menu = array( array('subaction'=>'rights' ,'text'=>'show'), 804 array('subaction'=>'aclform','text'=>'add' ) ); 805 $this->setTemplateVar('windowMenu',$menu); 806 break; 807 808 } 809 } 810 811 812 /** 813 * Liefert die Struktur zu diesem Ordner: 814 * - Mit den übergeordneten Ordnern und 815 * - den in diesem Ordner enthaltenen Objekten 816 * 817 * Beispiel: 818 * <pre> 819 * - A 820 * - B 821 * - C (dieser Ordner) 822 * - Unterordner 823 * - Seite 824 * - Seite 825 * - Datei 826 * </pre> 827 */ 828 public function structureView() 829 { 830 831 $structure = array(); 832 $tmp = &$structure; 833 $nr = 0; 834 835 $folder = new Folder( $this->page->parentid ); 836 $parents = $folder->parentObjectNames(false,true); 837 838 foreach( $parents as $id=>$name) 839 { 840 unset($children); 841 unset($o); 842 $children = array(); 843 $o = array('id'=>$id,'name'=>$name,'type'=>'folder','level'=>++$nr,'children'=>&$children); 844 845 $tmp[$id] = &$o;; 846 847 unset($tmp); 848 849 $tmp = &$children; 850 } 851 852 853 854 unset($children); 855 unset($id); 856 unset($name); 857 858 $elementChildren = array(); 859 860 $tmp[ $this->page->objectid ] = array('id'=>$this->page->objectid,'name'=>$this->page->name,'type'=>'page','self'=>true,'children'=>&$elementChildren); 861 862 $template = new Template( $this->page->templateid ); 863 $elements = $template->getElementNames(); 864 865 foreach( $elements as $id=>$name ) 866 { 867 $elementChildren[$id] = array('id'=>$this->page->objectid.'_'.$id,'name'=>$name,'type'=>'pageelement','children'=>array() ); 868 } 869 870 //Html::debug($structure); 871 872 $this->setTemplateVar('outline',$structure); 873 } 874 875 876 877 878 public function removeView() 879 { 880 $this->setTemplateVar( 'name',$this->page->filename ); 881 } 882 883 884 public function removePost() 885 { 886 if ( $this->getRequestVar('delete') != '' ) 887 { 888 $this->page->delete(); 889 $this->addNotice('page',$this->page->filename,'DELETED',OR_NOTICE_OK); 890 } 891 else 892 { 893 $this->addNotice('page',$this->page->filename,'CANCELED',OR_NOTICE_WARN); 894 } 895 } 896 897 protected function setModelAndLanguage() 898 { 899 $this->setTemplateVar('languages' ,$this->page->getProject()->getLanguages()); 900 $this->setTemplateVar('languageid',$this->page->languageid ); 901 902 $this->setTemplateVar('models' ,$this->page->getProject()->getModels() ); 903 $this->setTemplateVar('modelid' ,$this->page->modelid ); 904 } 905 906 907 } 908 909 ?>