00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
00050
00051
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
00076 $inhalt = $this->getRequestVar( 'id'.$elementid );
00077
00078
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
00105 if ( $this->page->hasRight( ACL_RELEASE ) && $this->hasRequestVar('release') )
00106 $value->publish = true;
00107 else
00108 $value->publish = false;
00109
00110
00111
00112
00113
00114
00115 if ( $value->element->allLanguages )
00116 {
00117
00118 $p = new Project();
00119 foreach( $p->getLanguageIds() as $languageid )
00120 {
00121 $value->languageid = $languageid;
00122 $value->save();
00123 }
00124 }
00125 else
00126 {
00127
00128 $value->languageid = $this->getSessionVar(REQ_PARAM_LANGUAGE_ID);
00129 $value->save();
00130 }
00131 }
00132 }
00133 $this->page->setTimestamp();
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
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) )
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
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') )
00243 {
00244
00245 if ( $this->getRequestVar('ansidate') != $this->getRequestVar('ansidate_orig') )
00246 $value->date = strtotime($this->getRequestVar('ansidate') );
00247 else
00248
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;
00257
00258 $value->text = $this->getRequestVar('text');
00259
00260 $value->page = new Page( $value->objectid );
00261 $value->page->load();
00262
00263
00264
00265
00266 if ( $value->page->hasRight( ACL_RELEASE ) && $this->getRequestVar('release')!='' )
00267 $value->publish = true;
00268 else
00269 $value->publish = false;
00270
00271
00272
00273
00274
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
00287 $value->save();
00288 }
00289
00290 $this->page->setTimestamp();
00291
00292
00293 if ( $this->hasRequestVar('publish') )
00294 $this->callSubAction( 'pubnow' );
00295 else
00296 $this->callSubAction( 'el' );
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
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
00418 foreach( $this->page->values as $id=>$value )
00419 {
00420
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
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( ' » ',$f->parentObjectNames(false,true) );
00501 $objects[ $oid ] .= ' » '.$o->name;
00502 }
00503 }
00504
00505 asort( $objects );
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( ' » ',$f->parentObjectNames(false,true) );
00520 }
00521
00522 asort( $objects );
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
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
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
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
00580 $language = Session::getProjectLanguage();
00581 header('Content-Language: '.$language->isoCode);
00582
00583
00584 require( $this->page->tmpfile() );
00585
00586
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
00605
00606
00607
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
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
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
00728
00729
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 ?>