示例#1
0
 function save($params)
 {
     $v = new Views();
     $v->id = $params['layoutid'];
     $v->name = $params['layoutname'];
     try {
         if ($v->save(true)) {
             die("<script>top.document.location.href='" . url("cms/layouts/" . $params['layoutid']) . "';</script>");
         }
     } catch (\Exception $e) {
         Core::error($e->getMessage());
     }
 }
示例#2
0
 public function testErrors()
 {
     $this->assertEmpty(Core::error(), "Errors");
     $this->assertFalse(Core::isError(), "IsError");
     Core::error("message", "obj.field");
     $this->assertNotEmpty(Core::error(), "Errors #2");
     $this->assertTrue(Core::isError(), "IsError #2");
 }
示例#3
0
文件: param.php 项目: bztsrc/phppe3
 /**
  * default action
  */
 function action($item)
 {
     //! omit frame and panel and disable cache
     Core::$core->noframe = true;
     Core::$core->nopanel = true;
     Core::$core->nocache = true;
     //! if not called as it should, return
     if (empty($item) || $item != sha1("pageadd_") && (empty($_SESSION['cms_url']) || empty($_SESSION['cms_param'][$item]))) {
         Core::$core->template = "403";
         return;
     }
     //! get height
     $this->height = intval(@$_REQUEST['height']);
     $this->adjust = intval(@$_REQUEST['adjust']);
     //! save current scroll position to session so that on next
     //! page load pe.cms.init() will use it
     if (isset($_REQUEST['scrx'])) {
         $_SESSION['cms_scroll'] = [$_REQUEST['scrx'], $_REQUEST['scry']];
     }
     //! get available access control entries
     $this->ace = ClassMap::ace();
     foreach ($this->ace as $k => $v) {
         $this->ace[$k] = "@" . $v;
     }
     $this->ace[] = "@siteadm|webadm";
     $this->ace[] = "loggedin";
     $this->ace[] = "csrf";
     $this->ace[] = "get";
     $this->ace[] = "post";
     //! get the field we're editing
     $F = clone $_SESSION["cms_param"][$item];
     $F->fld = "page_value";
     if (get_class($F) == "PHPPE\\AddOn\\wyswyg") {
         $F->args = [0, "pe.cms.image"];
     }
     if (method_exists($F, 'init')) {
         $F->init();
     }
     $this->fieldTitle = $F->name;
     $this->heightClass = @$F->heightClass;
     $this->boxHeight = $this->height - @$F->headerHeight;
     //! get the page we're editing
     //! if parameter name starts with "frame", load frame page instead
     $page = new Page(substr($F->name, 0, 6) == "frame." ? "frame" : @$_SESSION['cms_url']);
     $this->editable = $page->lock();
     View::assign("page", $page);
     $n = substr($F->name, 0, 6) == "frame." ? substr($F->name, 6) : (substr($F->name, 0, 4) == "app." ? substr($F->name, 4) : $F->name);
     if (!empty($page->data[$n])) {
         $F->value = $page->data[$n];
     }
     //! load extra data if any
     if (method_exists($F, 'load')) {
         $F->load($this);
     }
     //! save page parameter
     $param = Core::req2arr("page");
     if (!empty($param) && $this->editable) {
         //! if there was no validation error
         if (!Core::isError()) {
             if (method_exists($F, "save")) {
                 //! if it's a special field with it's own save mechanism
                 $param['pageid'] = $page->id;
                 if (!$F->save($param)) {
                     Core::error(L("Unable to save page!"));
                 }
             } else {
                 //! otherwise standard page parameter
                 $page->setParameter($F->name, $param['value']);
                 if (!$page->save()) {
                     Core::error(L("Unable to save page!"));
                 }
             }
             //! close the modal if save was successful
             if (!Core::isError()) {
                 //! release the page lock
                 $page->release();
                 die("<html><script>parent.pe.cms.close(true);</script></html>");
             }
         }
         //! copy the form data. normally you don't need to do that
         //! but here form name and object name differs, so it's not automatic
         foreach ($param as $k => $v) {
             $page->{$k} = $v;
         }
     }
     //! get the input(s)
     if (method_exists($F, 'edit')) {
         $this->field = $F->edit();
     } else {
         //! fallback to a simple input field. Should never happen
         $this->field = "<input type='text' class='input" . (Core::isError("page.value") ? " errinput" : "") . "' name='page_value' value=\"" . htmlspecialchars($F->value) . "\">";
     }
     //! focus first input
     View::js("init()", "var inp=document.querySelector('.reqinput,.input');if(inp!=null){inp.focus();inp.selectionStart=inp.selectionEnd=(inp.value!=null?inp.value:inp.innerHTML).length;}", true);
 }
示例#4
0
 /**
  * default action, loaded via AJAX
  */
 function action($item)
 {
     //! assets
     if (!empty($_REQUEST['assetn'])) {
         list($d, $f) = explode("/", $_REQUEST['assetn']);
         $fn = ".tmp/" . session_id() . "/" . $d . "/" . $f;
         if (file_exists($fn)) {
             header("Content-type: " . ($d == "i" ? "image/png" : ($d == "c" ? "text/css" : ($d == "j" ? "text/javascript" : "application/octet-stream"))));
             die(file_get_contents($fn) . "");
         }
     }
     //! sitebuild import
     Core::$core->noframe = true;
     $import = Core::req2arr("import");
     //! uncompress uploaded archive
     if (!empty($import['file']['tmp_name'])) {
         @Tools::rmdir(".tmp/" . session_id());
         @mkdir(".tmp/" . session_id() . "/i", 0750, true);
         @mkdir(".tmp/" . session_id() . "/c", 0750, true);
         @mkdir(".tmp/" . session_id() . "/j", 0750, true);
         @mkdir(".tmp/" . session_id() . "/f", 0750, true);
         @mkdir(".tmp/" . session_id() . "/h", 0750, true);
         Tools::untar($import['file']['tmp_name'], function ($name, $body) {
             $fn = "";
             if (substr($name, -4) == ".htm" || substr($name, -5) == ".html") {
                 self::$success = true;
                 $fn = "h/" . basename($name);
             } else {
                 if (in_array(substr($name, -4), [".gif", ".png", ".pnm", ".jpg", ".svg"])) {
                     $fn = "i/" . basename($name);
                 } else {
                     if (in_array(substr($name, -4), [".eot", ".ttf"]) || substr($name, -5) == ".woff" || substr($name, -6) == ".woff2") {
                         $fn = "f/" . basename($name);
                     } else {
                         if (substr($name, -4) == ".css") {
                             $fn = "c/" . basename($name);
                         } else {
                             if (substr($name, -3) == ".js") {
                                 $fn = "j/" . basename($name);
                             }
                         }
                     }
                 }
             }
             if (!empty($fn)) {
                 file_put_contents(".tmp/" . session_id() . "/" . $fn, $body);
             }
         });
         if (!self::$success) {
             Core::error("Bad archive");
             return;
         }
     }
     //! choose a html
     $this->htmls = glob(".tmp/" . session_id() . "/h/*");
     if (count($this->htmls) == 1) {
         $item = 1;
     }
     if (intval($item) > 0 && !empty($this->htmls[$item - 1])) {
         $html = $this->htmls[$item - 1];
         unset($this->htmls);
     }
     if (empty($html)) {
         if (intval($item) > 0) {
             Core::error("Bad archive");
         }
         return;
     }
     //! choose application area
     $data = preg_replace("/<script.*?\\/script>/ims", "", file_get_contents($html));
     $files = glob(".tmp/" . session_id() . "/*/*");
     $assets = ["i" => "images", "c" => "css", "j" => "js", "f" => "fonts"];
     //! replace urls with temporary ones for the uploaded files
     foreach ($files as $f) {
         if (!empty($assets[basename(dirname($f))])) {
             $data = preg_replace("/[^=\\ \t\r\n\\'\",\\(\\[]+" . basename($f) . "/ims", url("cms/sitebuild") . "?assetn=" . basename(dirname($f)) . "/" . basename($f), $data);
         }
         if (basename(dirname($f)) == "c") {
             View::css(url("cms/sitebuild") . "?assetn=" . basename(dirname($f)) . "/" . basename($f));
         } else {
             if (basename(dirname($f)) == "j") {
                 View::jslib(url("cms/sitebuild") . "?assetn=" . basename(dirname($f)) . "/" . basename($f));
             }
         }
     }
     //! get the main application tag
     $this->content = CMS::taghtml($data);
     if (empty($_REQUEST['chooseid']) && preg_match("/(<[^<>]*?id=[\\'\"]?content[^>]*?>)/ims", $this->content, $m) && !empty($m[0]) && preg_match("/data\\-chooseid=[\\'\"]?([0-9]+)/ims", $m[0], $M)) {
         $_REQUEST['chooseid'] = $M[1];
     }
     if (!empty($_REQUEST['chooseid'])) {
         //! replace with <!app>
         $t = CMS::splithtml($this->content, $_REQUEST['chooseid'], 0) . "<!app>" . CMS::splithtml($this->content, $_REQUEST['chooseid'], 2);
         //! replace temporary urls with final ones
         preg_match_all("/[^=\\ \t\r\n\\'\",\\(\\[]+\\?assetn=([a-z])\\/([^=\\ \t\r\n\\'\",\\)\\]]+)/ims", $t, $m, PREG_SET_ORDER);
         foreach ($m as $M) {
             $t = str_replace($M[0], $assets[$M[1]] . "/" . $M[2], $t);
         }
         //! figure out sitebuild name
         $name = strtr(basename($html), [".html" => "", ".htm" => ""]);
         if ($name == "index" || $name == "frame" || $name == "simple" || $name == "default") {
             $name = "sitebuild" . Core::$core->now;
         }
         $views = Views::find($name);
         if (!empty($views)) {
             $name .= Core::$core->now;
         }
         //! save sitebuild
         $view = new Views();
         $view->id = $name;
         $view->name = $name;
         $view->sitebuild = $name;
         $view->data = preg_replace("/<!\\-\\-.*?\\-\\->/ms", "", $t);
         $view->created = date("Y-m-d H:i:s", Core::$core->now);
         foreach ($files as $f) {
             if (empty($assets[basename(dirname($f))])) {
                 continue;
             }
             if (basename(dirname($f)) == "c") {
                 $view->css[] = basename($f);
             }
             if (basename(dirname($f)) == "j") {
                 $view->jslib[] = basename($f);
             }
         }
         if ($view->save(true)) {
             //! copy temporary files to public directory
             foreach ($assets as $k => $v) {
                 chdir(".tmp/" . session_id() . "/" . $k);
                 Tools::copy(glob("*"), "public/" . $v);
                 chdir("../../..");
             }
             //! clean up
             @Tools::rmdir(".tmp/" . session_id());
             //! redirect user to the fresh new sitebuild layout
             Http::redirect("cms/layouts/" . $name);
         }
         Core::error("Unable to save sitebuild!");
     }
 }