diff -r 45e887f23282 -r 7152ca0a0ce9 includes/pageprocess.php --- a/includes/pageprocess.php Mon Feb 16 16:04:54 2009 -0500 +++ b/includes/pageprocess.php Mon Feb 16 16:17:25 2009 -0500 @@ -229,7 +229,7 @@ $this->page_exists = true; } } - if ( isset($paths->pages[$pathskey]) ) + if ( isPage($pathskey) ) { if ( $this->send_headers ) { @@ -305,46 +305,7 @@ global $db, $session, $paths, $template, $plugins; // Common objects global $lang; - // Send as regular page - if ( $this->send_headers ) - { - $template->init_vars($this); - } - - $text = $this->fetch_text(); - - if ( $text == 'err_no_text_rows' ) - { - $this->err_no_rows(); - return false; - } - else - { - $redirect = ( isset($_GET['redirect']) ) ? $_GET['redirect'] : 'YES YOU IDIOT'; - if ( preg_match('/^#redirect \[\[([^\]]+)\]\]/i', $text, $match) && $redirect != 'no' ) - { - // Redirect page! - $page_to = sanitize_page_id($match[1]); - $page_id_data = RenderMan::strToPageID($page_to); - if ( count($this->redirect_stack) >= 3 ) - { - $this->render( (!$strict_no_headers), '
' . $lang->get('page_err_redirects_exceeded') . '
' ); - } - else - { - $result = $this->_handle_redirect($page_id_data[0], $page_id_data[1]); - if ( $result !== true ) - { - // There was some error during the redirect process - usually an infinite redirect - $this->render( (!$strict_no_headers), '
' . $result . '
' ); - } - } - } - else - { - $this->render( (!$strict_no_headers) ); - } - } + $this->ns->send_from_db(); } /** @@ -365,7 +326,7 @@ return ''; } $pathskey = $paths->nslist[ $this->namespace ] . $this->page_id; - if ( isset($paths->pages[$pathskey]) ) + if ( isPage($pathskey) ) { if ( isset($paths->pages[$pathskey]['password']) ) { @@ -383,10 +344,11 @@ * @param string The new text for the page * @param string A summary of edits made to the page. * @param bool If true, the edit is marked as a minor revision + * @param string Page format - wikitext or xhtml. REQUIRED, and new in 1.1.6. * @return bool True on success, false on failure. When returning false, it will push errors to the PageProcessor error stack; read with $page->pop_error() */ - function update_page($text, $edit_summary = false, $minor_edit = false) + function update_page($text, $edit_summary = false, $minor_edit = false, $page_format) { global $db, $session, $paths, $template, $plugins; // Common objects global $lang; @@ -455,6 +417,13 @@ return false; } + // Page format check + if ( !in_array($page_format, array('xhtml', 'wikitext')) ) + { + $this->raise_error("format \"$page_format\" not one of [xhtml, wikitext]"); + return false; + } + // // Protection validated; update page content // @@ -468,8 +437,8 @@ $date_string = enano_date('d M Y h:i a'); // Insert log entry - $sql = 'INSERT INTO ' . table_prefix . "logs ( time_id, date_string, log_type, action, page_id, namespace, author, page_text, edit_summary, minor_edit )\n" - . " VALUES ( $time, '$date_string', 'page', 'edit', '{$this->page_id}', '{$this->namespace}', '$author', '$text', '$edit_summary', $minor_edit );"; + $sql = 'INSERT INTO ' . table_prefix . "logs ( time_id, date_string, log_type, action, page_id, namespace, author, page_text, edit_summary, minor_edit, page_format )\n" + . " VALUES ( $time, '$date_string', 'page', 'edit', '{$this->page_id}', '{$this->namespace}', '$author', '$text', '$edit_summary', $minor_edit, '$page_format' );"; if ( !$db->sql_query($sql) ) { $this->raise_error($db->get_error()); @@ -492,6 +461,20 @@ return false; } + // Set page_format + $pathskey = $paths->nslist[ $this->namespace ] . $this->page_id; + if ( $paths->pages[ $pathskey ]['page_format'] != $page_format ) + { + // Note: no SQL injection to worry about here. Everything that goes into this is sanitized already, barring some rogue plugin. + // (and if there's a rogue plugin running, we have bigger things to worry about anyway.) + if ( !$db->sql_query('UPDATE ' . table_prefix . "pages SET page_format = '$page_format' WHERE urlname = '$this->page_id' AND namespace = '$this->namespace';") ) + { + $this->raise_error($db->get_error()); + return false; + } + $paths->update_metadata_cache(); + } + // Rebuild the search index $paths->rebuild_page_index($this->page_id, $this->namespace); @@ -673,7 +656,7 @@ // Rolling back the deletion of a page that was since created? $pathskey = $paths->nslist[ $this->namespace ] . $this->page_id; - if ( isset($paths->pages[$pathskey]) ) + if ( isPage($pathskey) ) return array( 'success' => false, // This is a clean Christian in-joke. @@ -875,7 +858,7 @@ // Retrieve page metadata $pathskey = $paths->nslist[ $this->namespace ] . $this->page_id; - if ( !isset($paths->pages[$pathskey]) ) + if ( !isPage($pathskey) ) { return array( 'success' => false, @@ -1038,7 +1021,7 @@ return $lang->get('page_err_redirect_infinite_loop'); } $page_id_key = $paths->nslist[ $namespace ] . sanitize_page_id($page_id); - if ( !isset($paths->pages[$page_id_key]) ) + if ( !isPage($page_id_key) ) { return $lang->get('page_err_redirect_to_nonexistent'); }