openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

ProjectlistAddAction.class.php (5149B)


      1 <?php
      2 namespace cms\action\projectlist;
      3 use cms\action\Action;
      4 use cms\action\Method;
      5 use cms\action\ProjectlistAction;
      6 use cms\base\Configuration;
      7 use cms\model\Element;
      8 use cms\model\Folder;
      9 use cms\model\Language;
     10 use cms\model\Model;
     11 use cms\model\Page;
     12 use cms\model\PageContent;
     13 use cms\model\Project;
     14 use cms\model\Template;
     15 use cms\model\Text;
     16 use cms\model\Value;
     17 use configuration\Config;
     18 use language\Messages;
     19 use util\exception\SecurityException;
     20 
     21 class ProjectlistAddAction extends ProjectlistAction implements Method {
     22 
     23     public function view() {
     24 
     25     }
     26 
     27 
     28 	/**
     29 	 * Add a new project.
     30 	 */
     31     public function post() {
     32 
     33 		$name = $this->request->getNotEmptyText('name');
     34 
     35 		$project = new Project();
     36 		$project->name = $name;
     37 		$project->persist();
     38 
     39 		$this->addNoticeFor( $project,Messages::ADDED );
     40 
     41 		switch( $this->request->getText('type') ) {
     42 			case '':
     43 			case 'empty':
     44 				break;
     45 
     46 			case 'example':
     47 				$this->createSamplesInProject( $project );
     48 				break;
     49 
     50 			default:
     51 				// Unknown type value, no action.
     52 		}
     53     }
     54 
     55 
     56     public function checkAccess()
     57 	{
     58 		if   ( ! $this->userIsAdmin() )
     59 			throw new SecurityException();
     60 	}
     61 
     62 
     63 	/**
     64 	 * Create example data in the new project.
     65 	 *
     66 	 * @param $project Project
     67 	 */
     68 	protected function createSamplesInProject($project ) {
     69 
     70 		$exampleConfig = Configuration::subset(['project','examples']);
     71 
     72 		$rootFolderId = $project->getRootObjectId();
     73 
     74 		// Modell anlegen
     75 		$model = new Model();
     76 		$model->projectid = $project->getId();
     77 		$model->name = 'html';
     78 		$model->persist();;
     79 
     80 		// Sprache anlegen
     81 		$language = new Language();
     82 		$language->projectid = $project->getId();
     83 		$language->isoCode = 'en';
     84 		$language->name    = 'english';
     85 		$language->persist();
     86 
     87 
     88 		// Template anlegen
     89 		$template = new Template();
     90 		$template->projectid  = $project->getId();
     91 		$template->name       = 'Standard';
     92 		$template->persist();
     93 
     94 		$element = new Element();
     95 		$element->templateid = $template->templateid;
     96 		$element->typeid     = Element::ELEMENT_TYPE_LONGTEXT;
     97 		$element->writable   = true;
     98 		$element->format     = Element::ELEMENT_FORMAT_MARKDOWN;
     99 		$element->label      = 'Text';
    100 		$element->name       = 'text';
    101 		$element->persist();
    102 
    103 		// Template anlegen
    104 		$templateModel = $template->loadTemplateModelFor( $model->modelid );
    105 		$templateModel->extension  = 'html';
    106 		$templateModel->src        =  $exampleConfig->get('html',<<<HTML
    107 <html>
    108   <head>
    109     <link rel="stylesheet" href="{{style}}" />
    110     <script src="{{script}}" defer="defer"></script>
    111   </head>
    112   <body>
    113     <h1>My first page</h1>
    114     <hr>
    115     <p>{{text}}</p>
    116   </body>
    117 </html>
    118 HTML
    119 		);
    120 		$templateModel->public = true;
    121 		$templateModel->persist();
    122 
    123 		$scriptFolder = new Folder();
    124 		$scriptFolder->parentid = $rootFolderId;
    125 		$scriptFolder->projectid = $project->getId();
    126 		$scriptFolder->filename = 'script';
    127 		$scriptFolder->persist();
    128 
    129 		$script = new Text();
    130 		$script->validFromDate = time();
    131 		$script->settings = <<<SETTINGS
    132 # Sample configuration for this script
    133 # filter:
    134 SETTINGS;
    135 		$script->parentid = $scriptFolder->getId();
    136 		$script->projectid = $project->getId();
    137 		$script->filename = 'script.js';
    138 		$script->value = $exampleConfig->get('script',<<<SCRIPT
    139 // Sample Javascript
    140 SCRIPT
    141 		);
    142 		$script->persist();
    143 		$script->public = true;
    144 		$script->saveValue();
    145 
    146 		$scriptElement = new Element();
    147 		$scriptElement->templateid = $template->templateid;
    148 		$scriptElement->typeid     = Element::ELEMENT_TYPE_LINK;
    149 		$scriptElement->writable   = false;
    150 		$scriptElement->defaultObjectId = $script->getId();
    151 		$scriptElement->label      = 'Script';
    152 		$scriptElement->name       = 'script';
    153 		$scriptElement->persist();
    154 
    155 		$style = new Text();
    156 		$style->parentid = $scriptFolder->getId();
    157 		$style->projectid = $project->getId();;
    158 		$style->filename = 'style.css';
    159 		$style->value = $exampleConfig->get('style',<<<STYLE
    160 /* Theme CSS */
    161 background-color: white;
    162 STYLE
    163 		);
    164 		$style->persist();
    165 		$style->public = true;
    166 		$style->saveValue();
    167 
    168 		$styleElement = new Element();
    169 		$styleElement->templateid = $template->templateid;
    170 		$styleElement->typeid     = Element::ELEMENT_TYPE_LINK;
    171 		$styleElement->writable   = false;
    172 		$styleElement->label      = 'Stylesheet';
    173 		$styleElement->name       = 'style';
    174 		$styleElement->defaultObjectId = $style->getId();
    175 		$styleElement->persist();
    176 
    177 		// Beispiel-Seite anlegen
    178 		$page = new Page();
    179 		$page->parentid   = $rootFolderId;
    180 		$page->projectid  = $project->getId();
    181 		$page->templateid = $template->templateid;
    182 		$page->filename   = 'start';
    183 		$page->getDefaultName()->name = 'Sample page';
    184 		$page->persist();
    185 
    186 		$pageContent = new PageContent();
    187 		$pageContent->pageId     = $page->pageid;
    188 		$pageContent->elementId  = $element->elementid;
    189 		$pageContent->languageid = $language->languageid;
    190 		$pageContent->persist();
    191 
    192 		$value = new Value();
    193 		$value->contentid = $pageContent->contentId;
    194 		$value->text = $exampleConfig->get('text',<<<TEXT
    195 # Congratulations
    196 
    197 ## Congratulations, this is your first page.
    198 
    199 This is your first page in OpenRat CMS. You may edit the page and change this text.
    200 TEXT
    201 		);
    202 		$value->publish = true;
    203 		$value->persist();
    204 
    205 	}
    206 }