예제 #1
0
파일: admin.php 프로젝트: neutrinog/Door43
    /**
     * handle user request
     *
     * @author  Michael Hamann <*****@*****.**>
     * @author  Gary Owen <*****@*****.**>
     */
    function handle() {
        global $ID;
        global $ACT;
        global $INFO;

        // populate options with default values
        $this->opts['ns']          = getNS($ID);
        $this->opts['name']        = noNS($ID);
        $this->opts['ns_for_page'] = $INFO['namespace'];
        $this->opts['newns']       = '';
        $this->opts['newname']     = noNS($ID);
        $this->opts['targetns']    = getNS($ID);
        $this->opts['newnsname']   = '';
        $this->opts['move_type']   = 'page';
        $this->opts['contenttomove'] = 'pages';

        $this->helper = $this->loadHelper('move', true);
        if (!$this->helper) return;

        $this->ns_opts = $this->helper->get_namespace_move_opts();

        // Only continue when the form was submitted
        if ($_SERVER['REQUEST_METHOD'] != 'POST') {
            return;
        }

        if (isset($_POST['continue_namespace_move']) || isset($_POST['skip_continue_namespace_move'])) {
            if (isset($_POST['skip_continue_namespace_move'])) {
                $this->helper->skip_namespace_move_item();
            }
            $this->ns_opts['remaining'] = $this->helper->continue_namespace_move();
            $this->ns_move_state = ($this->ns_opts['remaining'] === false ? 'error': 'continued');
            if ($this->ns_opts['remaining'] === 0) {
                $ID = $this->helper->getNewID($INFO['id'], $this->opts['ns'], $this->opts['newns']);
                $ACT = 'show';
            }

            return;
        } elseif (isset($_POST['abort_namespace_move'])) {
            $this->helper->abort_namespace_move();
            $this->ns_opts = false;

            return;
        }

        // Store the form data in the options and clean the submitted data.
        if (isset($_POST['ns_for_page'])) $this->opts['ns_for_page'] = cleanID((string)$_POST['ns_for_page']);
        if (isset($_POST['newns'])) $this->opts['newns'] = cleanID((string)$_POST['newns']);
        if (isset($_POST['newname'])) $this->opts['newname'] = cleanID((string)$_POST['newname']);
        if (isset($_POST['targetns'])) $this->opts['targetns'] = cleanID((string)$_POST['targetns']);
        if (isset($_POST['newnsname'])) $this->opts['newnsname'] = cleanID((string)$_POST['newnsname']);
        if (isset($_POST['move_type'])) $this->opts['move_type'] = (string)$_POST['move_type'];
        if (isset($_POST['contenttomove']) && in_array($_POST['contenttomove'], array('pages', 'media', 'both'), true)) $this->opts['contenttomove'] = $_POST['contenttomove'];

        // check the input for completeness
        if( $this->opts['move_type'] == 'namespace' ) {

            if ($this->opts['targetns'] == '') {
                $this->opts['newns'] = $this->opts['newnsname'];
            } else {
                $this->opts['newns'] = $this->opts['targetns'].':'.$this->opts['newnsname'];
            }

            $started = $this->helper->start_namespace_move($this->opts);
            if ($started !== false) {
                $this->ns_opts = $this->helper->get_namespace_move_opts();
                $this->ns_move_state = 'started';
            }
        } else {
            // check that the pagename is valid
            if ($this->opts['newname'] == '' ) {
                msg($this->getLang('badname'), -1);
                return;
            }

            if ($this->opts['newns'] === '') {
                $this->opts['newns'] = $this->opts['ns_for_page'];
            }

            if ($this->helper->move_page($this->opts)) {
                // Set things up to display the new page.
                $ID = $this->opts['new_id'];
                $ACT = 'show'; // this triggers a redirect to the page
            }
        }
    }
예제 #2
0
	function test_move_page_to_parent_ns() {
	    global $ID;

	    $newPagename = 'new_page';

	    $opts = array();
	    $opts['page_ns'] = 'page';
	    $opts['ns']   = getNS($ID);
	    $opts['name'] = noNS($ID);
	    $opts['newns'] = 'parent_ns';
	    $opts['newname'] = $newPagename;
	    $newId = $opts['newns'].':'.$opts['newname'];
	    $this->movedToId = $opts['newns'].':'.$newPagename;

	    $this->move->move_page($opts);

	    $newContent = rawWiki($newId);
	    $expectedContent = <<<EOT
[[parent_ns:current_ns:start|start]]
[[parent_ns:current_ns:parallel_page|parallel_page]]
[[parent_ns:current_ns:|.:]]
[[parent_ns:current_ns:|..current_ns:]]
[[parent_ns:current_ns:|..:current_ns:]]
[[parent_ns:parallel_ns:|..parallel_ns:]]
[[parent_ns:parallel_ns:|..:parallel_ns:]]
[[:|..:..:]]
[[start|..:..:parent_ns:]]
[[parent_ns:new_page|parent_ns:new_page]]
[[parent_ns/new_page|parent_ns/new_page]]
[[/start|/start]]
EOT;
	    $this->assertEquals($expectedContent, $newContent);

	    // page is moved to same NS as backlinking page (parent_ns)
	    $newContent = rawWiki($this->parentBacklinkingId);
	    $expectedContent = <<<EOT
[[new_page|$this->movedId]]
[[new_page|:$this->movedId]]
[[new_page|.current_ns:test_page]]
[[new_page|.:current_ns:test_page]]
[[new_page|..parent_ns:current_ns:test_page]]
[[test_page|test_page]]
[[new_page|new_page]]
[[ftp://somewhere.com|ftp://somewhere.com]]
[[http://somewhere.com|http://somewhere.com]]

[[start|start]]
[[parallel_page|parallel_page]]
[[.:|.:]]
[[..current_ns:|..current_ns:]]
[[..:current_ns:|..:current_ns:]]
[[..parallel_ns:|..parallel_ns:]]
[[..:parallel_ns:|..:parallel_ns:]]
[[..:..:|..:..:]]
[[..:..:parent_ns:|..:..:parent_ns:]]
[[parent_ns:new_page|parent_ns:new_page]]
[[parent_ns/new_page|parent_ns/new_page]]
[[/start|/start]]
EOT;
	    $this->assertEquals($expectedContent, $newContent);

	    $newContent = rawWiki($this->currentNsBacklinkingId);
	    $expectedContent = <<<EOT
[[parent_ns:new_page|$this->movedId]]
[[$newId|:$this->movedId]]
[[parent_ns:new_page|..current_ns:test_page]]
[[parent_ns:new_page|..:current_ns:test_page]]
[[parent_ns:new_page|test_page]]
[[parent_ns:new_page|.test_page]]
[[parent_ns:new_page|.:test_page]]
[[..test_page|..test_page]]
[[..:test_page|..:test_page]]
[[.:..:test_page|.:..:test_page]]
[[new_page|new_page]]
[[ftp://somewhere.com|ftp://somewhere.com]]
[[http://somewhere.com|http://somewhere.com]]

[[start|start]]
[[parallel_page|parallel_page]]
[[.:|.:]]
[[..current_ns:|..current_ns:]]
[[..:current_ns:|..:current_ns:]]
[[..parallel_ns:|..parallel_ns:]]
[[..:parallel_ns:|..:parallel_ns:]]
[[..:..:|..:..:]]
[[..:..:parent_ns:|..:..:parent_ns:]]
[[parent_ns:new_page|parent_ns:new_page]]
[[parent_ns/new_page|parent_ns/new_page]]
[[/start|/start]]
EOT;
	    $this->assertEquals($expectedContent, $newContent);

	    $newContent = rawWiki($this->otherBacklinkingId);
	    $expectedContent = <<<EOT
[[parent_ns:new_page|$this->movedId]]
[[$newId|:$this->movedId]]
[[.current_ns:test_page|.current_ns:test_page]]
[[.:current_ns:test_page|.:current_ns:test_page]]
[[test_page|test_page]]
[[new_page|new_page]]
[[ftp://somewhere.com|ftp://somewhere.com]]
[[http://somewhere.com|http://somewhere.com]]

[[start|start]]
[[parallel_page|parallel_page]]
[[.:|.:]]
[[..current_ns:|..current_ns:]]
[[..:current_ns:|..:current_ns:]]
[[..parallel_ns:|..parallel_ns:]]
[[..:parallel_ns:|..:parallel_ns:]]
[[..:..:|..:..:]]
[[..:..:parent_ns:|..:..:parent_ns:]]
[[parent_ns:new_page|parent_ns:new_page]]
[[parent_ns/new_page|parent_ns/new_page]]
[[/start|/start]]
EOT;
	    $this->assertEquals($expectedContent, $newContent);
	}