Exemple #1
0
 function run($dbi, $argstr, &$request, $basepage)
 {
     extract($this->getArgs($argstr, $request));
     // Prevent spaces at the start and end of a page name
     $s = trim($s);
     if (!$s) {
         return $this->error(_("Cannot create page with empty name!"));
     }
     // TODO: javascript warning if "/" or SUBPAGE_SEPARATOR in s
     if ($verify) {
         $head = _("CreatePage failed");
         if ($dbi->isWikiPage($verify)) {
             $msg = _("Do you really want to create the page '%s'?");
         } else {
             $msg = _("Do you really want to create the page '%s'?");
         }
         if (isSubPage($s)) {
             $main = subPageSlice(0);
             if (!$dbi->isWikiPage(subPageSlice(0))) {
                 $msg .= "\n" . _("The new page you want to create will be a subpage.") . "\n" . _("Subpages cannot be created unless the parent page exists.");
                 return alert($head, $msg);
             } else {
                 $msg .= "\n" . _("The new page you want to create will be a subpage.");
             }
         }
         if (strpos($s, " \\/")) {
             $msg .= "\n" . _("Subpages with ending space are not allowed as directory name on Windows.");
             return alert($head, $msg);
         }
     }
     $param = array('action' => 'edit');
     if ($template and $dbi->isWikiPage($template)) {
         $param['template'] = $template;
     } elseif (!empty($initial_content)) {
         // Warning! Potential URI overflow here on the GET redirect. Better use template.
         $param['initial_content'] = $initial_content;
     }
     // If the initial_content is too large, pre-save the content in the page
     // and redirect without that argument.
     // URI length limit:
     //   http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1
     $url = WikiURL($s, $param, 'absurl');
     // FIXME: expand vars in templates here.
     if (strlen($url) > 255 or $param['template'] or preg_match('/%%\\w+%%/', $initial_content)) {
         unset($param['initial_content']);
         $url = WikiURL($s, $param, 'absurl');
         $page = $dbi->getPage($s);
         $current = $page->getCurrentRevision();
         $version = $current->getVersion();
         // overwrite empty (deleted) pages
         if ($version and !$current->hasDefaultContents() and !$overwrite) {
             return $this->error(fmt("%s already exists", WikiLink($s)));
         } else {
             $user = $request->getUser();
             $meta = array('markup' => 2.0, 'author' => $user->getId());
             if (!empty($param['template']) and !$initial_content) {
                 $tmplpage = $dbi->getPage($template);
                 $currenttmpl = $tmplpage->getCurrentRevision();
                 $initial_content = $currenttmpl->getPackedContent();
                 $meta['markup'] = $currenttmpl->_data['markup'];
                 if (preg_match('/<noinclude>.+<\\/noinclude>/s', $initial_content)) {
                     $initial_content = preg_replace("/<noinclude>.+?<\\/noinclude>/s", "", $initial_content);
                 }
             }
             $meta['summary'] = _("Created by CreatePage");
             $content = $this->doVariableExpansion($initial_content, $vars, $s, $request);
             if ($content !== $initial_content) {
                 // need to destroy the template so that editpage doesn't overwrite it.
                 unset($param['template']);
                 $url = WikiURL($s, $param, 'absurl');
             }
             $page->save($content, $version + 1, $meta);
         }
     }
     return HTML($request->redirect($url, true));
 }
Exemple #2
0
/**
 * @param  string $pagename   page from which the parent page is searched.
 * @return string parent      pagename or the (possibly pseudo) dot-pagename.
 */
function getParentPage($pagename)
{
    if (isSubPage($pagename)) {
        return subPageSlice($pagename, 0);
    } else {
        return '.';
    }
}