Пример #1
0
function txPageAddBulk()
{
    global $DB, $C;
    VerifyAdministrator();
    CheckAccessList();
    $v = new Validator();
    $v->Register($_REQUEST['ext'], V_EMPTY, 'The File Extension field must be filled in');
    $v->Register($_REQUEST['num_pages'], V_REGEX, 'The Number of Pages field must be a numeric value', '~^\\d+$~');
    if (empty($_REQUEST['category_id'])) {
        $v->Register($_REQUEST['prefix'], V_EMPTY, 'The Filename Prefix field must be filled in');
    }
    // Check tags for proper format
    if (!IsEmptyString($_REQUEST['tags'])) {
        $_REQUEST['tags'] = FormatSpaceSeparated($_REQUEST['tags']);
        foreach (explode(' ', $_REQUEST['tags']) as $tag) {
            if (strlen($tag) < 4 || !preg_match('~^[a-z0-9_]+$~i', $tag)) {
                $v->SetError('All page tags must be at least 4 characters in length and contain only letters, numbers, and underscores');
                break;
            }
        }
    }
    $v->Register($_REQUEST['base_url'], V_URL, 'The Base URL field is not a properly formatted HTTP URL');
    $v->Register($_REQUEST['base_dir'], V_EMPTY, 'The Base Directory field must be filled in');
    $base_dir = $_REQUEST['base_dir'];
    $base_url = $_REQUEST['base_url'];
    if (!is_dir($base_dir)) {
        $v->SetError('The Base Directory value must point to an already existing directory');
    }
    if (!$v->Validate()) {
        return $v->ValidationError('txShPageAddBulk');
    }
    // Get starting build order
    $build_order = $DB->Count('SELECT MAX(`build_order`) FROM `tx_pages`') + 1;
    // Load default template
    $template = file_get_contents("{$GLOBALS['BASE_DIR']}/templates/default-tgp.tpl");
    NullIfEmpty($_REQUEST['category_id']);
    $pages =& GetBulkAddPages($base_url, $base_dir);
    $c = new Compiler();
    $buffering = @ini_get('output_buffering');
    include_once 'includes/header.php';
    include_once 'includes/pages-add-bulk-progress.php';
    if ($buffering) {
        echo '<span style="display: none">' . str_repeat('x', $buffering) . '</span>';
        flush();
    }
    foreach ($pages as $page) {
        if ($DB->Count('SELECT COUNT(*) FROM `tx_pages` WHERE `filename`=?', array($page['filename'])) < 1) {
            echo "Adding " . htmlspecialchars($page['page_url']) . "<br />";
            if ($buffering) {
                echo '<span style="display: none">' . str_repeat('x', $buffering) . "</span>\n";
            }
            flush();
            $compiled = '';
            $c->flags['category_id'] = $page['category_id'];
            $c->compile($template, $compiled);
            // Add page to the database
            $DB->Update('INSERT INTO `tx_pages` VALUES (?,?,?,?,?,?,?,?,?)', array(NULL, $page['filename'], $page['page_url'], $page['category_id'], $build_order++, intval($_REQUEST['locked']), $_REQUEST['tags'], $template, $compiled));
        }
    }
    RenumberBuildOrder();
    echo "</div>\n<div id=\"done\"></div>\n</body>\n</html>";
}
Пример #2
0
function tlxPageAddBulk()
{
    global $DB, $C;
    VerifyAdministrator();
    CheckAccessList();
    $v = new Validator();
    $v->Register($_REQUEST['ext'], V_EMPTY, 'The File Extension field must be filled in');
    $v->Register($_REQUEST['num_pages'], V_REGEX, 'The Number of Pages field must be a numeric value', '~^\\d+$~');
    if (empty($_REQUEST['category_id'])) {
        $v->Register($_REQUEST['prefix'], V_EMPTY, 'The Filename Prefix field must be filled in');
    }
    // Check tags for proper format
    if (!IsEmptyString($_REQUEST['tags'])) {
        $_REQUEST['tags'] = FormatSpaceSeparated($_REQUEST['tags']);
        foreach (explode(' ', $_REQUEST['tags']) as $tag) {
            if (strlen($tag) < 4 || !preg_match('~^[a-z0-9_]+$~i', $tag)) {
                $v->SetError('All page tags must be at least 4 characters in length and contain only letters, numbers, and underscores');
                break;
            }
        }
    }
    $v->Register($_REQUEST['base_url'], V_CONTAINS, 'For security purposes the Base URL may not contain the .. character sequence', '..');
    $base_dir = ResolvePath($C['document_root'] . '/' . $_REQUEST['base_url']);
    if (!is_dir($base_dir)) {
        $v->SetError('The Base URL value must point to an already existing directory');
    }
    if (!$v->Validate()) {
        return $v->ValidationError('tlxShPageAddBulk');
    }
    // Get starting build order
    $build_order = $DB->Count('SELECT MAX(`build_order`) FROM `tlx_pages`') + 1;
    // Load default template
    $template = file_get_contents("{$GLOBALS['BASE_DIR']}/templates/default-ranking.tpl");
    NullIfEmpty($_REQUEST['category_id']);
    $pages =& GetBulkAddPages($_REQUEST['base_url']);
    $buffering = @ini_get('output_buffering');
    foreach ($pages as $page) {
        $page['filename'] = preg_replace('~^/~', '', $page['filename']);
        if ($DB->Count('SELECT COUNT(*) FROM `tlx_pages` WHERE `filename`=?', array($page['filename'])) < 1) {
            if ($buffering) {
                echo '<span style="display: none">' . str_repeat('x', $buffering) . "</span>\n";
            }
            $compiled = '';
            $c = new Compiler();
            $c->flags['category_id'] = $page['category_id'];
            $c->compile($template, $compiled);
            // Add page to the database
            $DB->Update('INSERT INTO `tlx_pages` VALUES (?,?,?,?,?,?,?)', array(NULL, $page['filename'], $page['category_id'], $build_order++, $_REQUEST['tags'], $template, $compiled));
        }
    }
    $GLOBALS['message'] = 'New ranking pages successfully added';
    $GLOBALS['added'] = true;
    RenumberBuildOrder();
    UnsetArray($_REQUEST);
    tlxShPageAddBulk();
}