Пример #1
0
/**
 * Output a scaffold page for database.
 *
 */
function db_scaffold()
{
    if (auth() === false) {
        return;
    }
    if (!file_exists(DATABASE_SCAFFOLD_PATH)) {
        error('db: ' . DATABASE_SCAFFOLD_PATH . ' is not found');
    }
    // initialize
    $app = 'app/';
    $models = $app . 'models/';
    $views = $app . 'views/';
    $controllers = $app . 'controllers/';
    $header_file = $views . 'header.php';
    $footer_file = $views . 'footer.php';
    $before_file = $app . 'controllers/before.php';
    $config_file = $app . 'config.php';
    $exclude_prefix = 'levis_';
    $primary_key = 'id';
    $test = 'test/';
    // table
    $resource = db_query(db_sql('table_list'));
    $results = db_result($resource);
    if (count($results) === 0) {
        error('db: Table not found');
    }
    $scaffold = '';
    foreach ($results as $result) {
        if (DATABASE_TYPE === 'pdo_mysql' || DATABASE_TYPE === 'mysql') {
            $table_comment = $result['Comment'];
        } else {
            $table_comment = null;
        }
        $table = array_shift($result);
        if (regexp_match('^' . DATABASE_PREFIX . $exclude_prefix, $table)) {
            continue;
        }
        // initialize
        $primary_flag = false;
        $model_file = $models . $table . '.php';
        $view_index_file = $views . $table . '/' . MAIN_DEFAULT_WORK . '.php';
        $view_post_file = $views . $table . '/post.php';
        $controller_index_file = $controllers . $table . '/' . MAIN_DEFAULT_WORK . '.php';
        $controller_post_file = $controllers . $table . '/post.php';
        $controller_delete_file = $controllers . $table . '/delete.php';
        $test_model_file = $test . 'model_' . $table . '.php';
        $test_view_file = $test . 'view_' . $table . '.php';
        $test_controller_file = $test . 'controller_' . $table . '.php';
        $define_sql = db_sql('table_define', $table);
        $define_resource = db_query($define_sql);
        $define_results = db_result($define_resource);
        $model_validate = '';
        $model_default = '';
        $view_head = '';
        $view_data = '';
        $view_form = '';
        $controller_validate = '';
        $controller_insert = '';
        $controller_update = '';
        $test_data = '';
        // indent
        $max_length = 0;
        foreach ($define_results as $define_result) {
            $field = '';
            if (DATABASE_TYPE === 'pdo_mysql' || DATABASE_TYPE === 'mysql') {
                $field = $define_result['Field'];
            } elseif (DATABASE_TYPE === 'pdo_pgsql' || DATABASE_TYPE === 'pgsql') {
                $field = $define_result['column_name'];
            } elseif (DATABASE_TYPE === 'pdo_sqlite' || DATABASE_TYPE === 'pdo_sqlite2' || DATABASE_TYPE === 'sqlite') {
                $field = $define_result['name'];
            }
            $max_length = strlen($field) > $max_length ? strlen($field) : $max_length;
        }
        foreach ($define_results as $define_result) {
            // define
            $field = '';
            $null = false;
            if (DATABASE_TYPE === 'pdo_mysql' || DATABASE_TYPE === 'mysql') {
                $field = $define_result['Field'];
                $type = $define_result['Type'];
                $null = $define_result['Null'] === 'YES' ? true : false;
                $comment = $define_result['Comment'];
            } elseif (DATABASE_TYPE === 'pdo_pgsql' || DATABASE_TYPE === 'pgsql') {
                $field = $define_result['column_name'];
                $type = $define_result['data_type'];
                $null = $define_result['is_nullable'] === 'YES' ? true : false;
                $comment = null;
            } elseif (DATABASE_TYPE === 'pdo_sqlite' || DATABASE_TYPE === 'pdo_sqlite2' || DATABASE_TYPE === 'sqlite') {
                $field = $define_result['name'];
                $type = $define_result['type'];
                $null = $define_result['notnull'] === 0 ? true : false;
                $comment = null;
            }
            if ($field === $primary_key) {
                $primary_flag = true;
            }
            // model
            $model_validate .= '    // ' . ($comment ? $comment : $field) . "\n";
            $model_validate .= '    if (isset($queries[\'' . $field . '\'])) {' . "\n";
            if ($field === $primary_key || !$null) {
                $model_validate .= '        if ($queries[\'' . $field . '\'] === \'\') {' . "\n";
                $model_validate .= '            $messages[] = \'The ' . ($comment ? $comment : $field) . ' is required.\';' . "\n";
                $model_validate .= '        }' . "\n";
            }
            $model_validate .= '    }' . "\n";
            $model_validate .= "\n";
            $space = str_repeat(' ', $max_length - strlen($field));
            if ($field === $primary_key) {
                $model_default .= '        \'' . $field . '\' ' . $space . '=> null,' . "\n";
            } elseif ($null) {
                $model_default .= '        \'' . $field . '\' ' . $space . '=> null,' . "\n";
            } elseif (regexp_match('(BLOB|TEXT|CHAR)', $type)) {
                $model_default .= '        \'' . $field . '\' ' . $space . '=> \'\',' . "\n";
            } else {
                $model_default .= '        \'' . $field . '\' ' . $space . '=> 0,' . "\n";
            }
            // view
            $view_head .= '                <th>' . ($comment ? $comment : $field) . '</th>' . "\n";
            if ($field === $primary_key) {
                $view_data .= '                <td><a href="<?php t(MAIN_FILE) ?>/' . $table . '/post?' . $primary_key . '=<?php t($data[\'' . $primary_key . '\']) ?>"><?php h($data[\'' . $field . '\']) ?></a></td>' . "\n";
            } else {
                $view_data .= '                <td><?php h($data[\'' . $field . '\']) ?></td>' . "\n";
            }
            if (regexp_match('(BLOB|TEXT)', $type)) {
                $input = '<textarea name="' . $field . '" rows="10" cols="50"><?php t($_view[\'data\'][\'' . $field . '\']) ?></textarea>';
            } elseif (regexp_match('(CHAR)', $type)) {
                $input = '<input type="text" name="' . $field . '" size="30" value="<?php t($_view[\'data\'][\'' . $field . '\']) ?>" />';
            } else {
                $input = '<input type="text" name="' . $field . '" size="10" value="<?php t($_view[\'data\'][\'' . $field . '\']) ?>" />';
            }
            if ($field === $primary_key) {
                $view_form .= '                    <dt>' . ($comment ? $comment : $field) . ($null ? '' : '(required)') . '</dt>' . "\n";
                $view_form .= '                        <dd>' . "\n";
                $view_form .= '                            <?php if (empty($_GET[\'' . $primary_key . '\'])) : ?>' . "\n";
                $view_form .= '                            ' . $input . "\n";
                $view_form .= '                            <?php else : ?>' . "\n";
                $view_form .= '                            <em><?php h($_view[\'data\'][\'' . $field . '\']) ?></em><input type="hidden" name="' . $field . '" value="<?php t($_view[\'data\'][\'' . $field . '\']) ?>" />' . "\n";
                $view_form .= '                            <?php endif ?>' . "\n";
                $view_form .= '                        </dd>' . "\n";
            } else {
                $view_form .= '                    <dt>' . ($comment ? $comment : $field) . ($null ? '' : '(required)') . '</dt>' . "\n";
                $view_form .= '                        <dd>' . $input . '</dd>' . "\n";
            }
            // controller
            $controller_validate .= '        \'' . $field . '\' ' . $space . '=> $_POST[\'' . $field . '\'],' . "\n";
            $controller_insert .= '                \'' . $field . '\' ' . $space . '=> $_POST[\'' . $field . '\'],' . "\n";
            if ($field !== $primary_key) {
                $controller_update .= '                \'' . $field . '\' ' . $space . '=> $_POST[\'' . $field . '\'],' . "\n";
            }
            // test
            if ($field === $primary_key) {
                $test_data .= '            \'' . $field . '\' ' . $space . '=> [N],' . "\n";
            } elseif ($null) {
                $test_data .= '            \'' . $field . '\' ' . $space . '=> null,' . "\n";
            } elseif (regexp_match('(BLOB|TEXT|CHAR)', $type)) {
                $test_data .= '            \'' . $field . '\' ' . $space . '=> \'TEST[N]\',' . "\n";
            } else {
                $test_data .= '            \'' . $field . '\' ' . $space . '=> [N],' . "\n";
            }
        }
        // heading
        $scaffold .= '[' . $table . ']' . "\n";
        // model
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= '/**' . "\n";
        $buffer .= ' * Validate for ' . ($table_comment ? $table_comment : $table) . "\n";
        $buffer .= ' *' . "\n";
        $buffer .= ' * @param array $queries' . "\n";
        $buffer .= ' *' . "\n";
        $buffer .= ' * @return array' . "\n";
        $buffer .= ' */' . "\n";
        $buffer .= 'function validate_' . $table . '($queries)' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    $messages = array();' . "\n";
        $buffer .= '' . "\n";
        $buffer .= $model_validate;
        $buffer .= '    return $messages;' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= '/**' . "\n";
        $buffer .= ' * Default for ' . ($table_comment ? $table_comment : $table) . "\n";
        $buffer .= ' *' . "\n";
        $buffer .= ' * @return array' . "\n";
        $buffer .= ' */' . "\n";
        $buffer .= 'function default_' . $table . '()' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    return array(' . "\n";
        $buffer .= $model_default;
        $buffer .= '    );' . "\n";
        $buffer .= '}' . "\n";
        $scaffold .= db_scaffold_output($model_file, $buffer);
        // view
        $buffer = '<?php import(\'app/views/header.php\') ?>' . "\n";
        $buffer .= "\n";
        $buffer .= '        <h2>' . ($table_comment ? $table_comment : $table) . '</h2>' . "\n";
        $buffer .= '        <ul>' . "\n";
        $buffer .= '            <li><a href="<?php t(MAIN_FILE) ?>/' . $table . '/post">post</a></li>' . "\n";
        $buffer .= '        </ul>' . "\n";
        $buffer .= '        <table summary="' . ($table_comment ? $table_comment : $table) . '">' . "\n";
        $buffer .= '            <tr>' . "\n";
        $buffer .= $view_head;
        $buffer .= '            </tr>' . "\n";
        $buffer .= '            <?php foreach ($_view[\'' . $table . '\'] as $data) : ?>' . "\n";
        $buffer .= '            <tr>' . "\n";
        $buffer .= $view_data;
        $buffer .= '            </tr>' . "\n";
        $buffer .= '            <?php endforeach ?>' . "\n";
        $buffer .= '        </table>' . "\n";
        $buffer .= "\n";
        $buffer .= '<?php import(\'app/views/footer.php\') ?>' . "\n";
        $scaffold .= db_scaffold_output($view_index_file, $buffer);
        $buffer = '<?php import(\'app/views/header.php\') ?>' . "\n";
        $buffer .= "\n";
        $buffer .= '        <h2>' . ($table_comment ? $table_comment : $table) . '</h2>' . "\n";
        $buffer .= '        <form action="<?php t(MAIN_FILE) ?>/' . $table . '/post' . ($primary_flag ? '<?php $_view[\'data\'][\'' . $primary_key . '\'] ? t(\'?' . $primary_key . '=\' . $_view[\'data\'][\'' . $primary_key . '\']) : \'\' ?>' : '') . '" method="post">' . "\n";
        $buffer .= '            <fieldset>' . "\n";
        $buffer .= '                <legend>' . ($table_comment ? $table_comment : $table) . '</legend>' . "\n";
        $buffer .= '                <dl>' . "\n";
        $buffer .= $view_form;
        $buffer .= '                </dl>' . "\n";
        $buffer .= '                <p><input type="submit" value="post" /></p>' . "\n";
        $buffer .= '            </fieldset>' . "\n";
        $buffer .= '        </form>' . "\n";
        if ($primary_flag) {
            $buffer .= '        <?php if (!empty($_GET[\'' . $primary_key . '\'])) : ?>' . "\n";
            $buffer .= '        <h2>delete</h2>' . "\n";
            $buffer .= '        <form action="<?php t(MAIN_FILE) ?>/' . $table . '/delete?' . $primary_key . '=\' . t($_view[\'data\'][\'' . $primary_key . '\']) ?>" method="post">' . "\n";
            $buffer .= '            <fieldset>' . "\n";
            $buffer .= '                <legend>' . ($table_comment ? $table_comment : $table) . '</legend>' . "\n";
            $buffer .= '                <input type="hidden" name="' . $primary_key . '" value="<?php t($_view[\'data\'][\'' . $primary_key . '\']) ?>" /></dd>' . "\n";
            $buffer .= '                <p><input type="submit" value="delete" /></p>' . "\n";
            $buffer .= '            </fieldset>' . "\n";
            $buffer .= '        </form>' . "\n";
            $buffer .= '        <?php endif ?>' . "\n";
        }
        $buffer .= "\n";
        $buffer .= '<?php import(\'app/views/footer.php\') ?>' . "\n";
        $scaffold .= db_scaffold_output($view_post_file, $buffer);
        // controller
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= '$_view[\'' . $table . '\'] = select_' . $table . '(array(' . "\n";
        $buffer .= '    \'limit\' => array(' . "\n";
        $buffer .= '        \':limit\',' . "\n";
        $buffer .= '        array(' . "\n";
        $buffer .= '            \'limit\' => $GLOBALS[\'config\'][\'limits\'][\'' . $table . '\'],' . "\n";
        $buffer .= '        ),' . "\n";
        $buffer .= '    ),' . "\n";
        $buffer .= '));' . "\n";
        $scaffold .= db_scaffold_output($controller_index_file, $buffer);
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= 'if ($_SERVER[\'REQUEST_METHOD\'] === \'POST\') {' . "\n";
        $buffer .= '    $warnings = validate_' . $table . '(normalize_' . $table . '(array(' . "\n";
        $buffer .= $controller_validate;
        $buffer .= '    )));' . "\n";
        $buffer .= '    if (!empty($warnings)) {' . "\n";
        $buffer .= '        warning($warnings);' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= '    if (isset($_GET[\'' . $primary_key . '\'])) {' . "\n";
        if ($primary_flag) {
            $buffer .= '        $resource = update_' . $table . '(array(' . "\n";
            $buffer .= '            \'set\' => array(' . "\n";
            $buffer .= $controller_update;
            $buffer .= '            ),' . "\n";
            $buffer .= '            \'where\' => array(' . "\n";
            $buffer .= '                \'' . $primary_key . ' = :' . $primary_key . '\',' . "\n";
            $buffer .= '                array(' . "\n";
            $buffer .= '                    \'' . $primary_key . '\' => $_POST[\'' . $primary_key . '\'],' . "\n";
            $buffer .= '                ),' . "\n";
            $buffer .= '            ),' . "\n";
            $buffer .= '        ));' . "\n";
            $buffer .= '        if (!$resource) {' . "\n";
            $buffer .= '            error(\'Update error.\');' . "\n";
            $buffer .= '        }' . "\n";
        }
        $buffer .= '    } else {' . "\n";
        $buffer .= '        $resource = insert_' . $table . '(array(' . "\n";
        $buffer .= '            \'values\' => array(' . "\n";
        $buffer .= $controller_insert;
        $buffer .= '            ),' . "\n";
        $buffer .= '        ));' . "\n";
        $buffer .= '        if (!$resource) {' . "\n";
        $buffer .= '            error(\'Insert error.\');' . "\n";
        $buffer .= '        }' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= "\n";
        $buffer .= '    redirect(\'/' . $table . '/' . MAIN_DEFAULT_WORK . '\');' . "\n";
        $buffer .= '} else {' . "\n";
        $buffer .= '    if (isset($_GET[\'' . $primary_key . '\'])) {' . "\n";
        if ($primary_flag) {
            $buffer .= '        $' . $table . ' = select_' . $table . '(array(' . "\n";
            $buffer .= '            \'where\' => array(' . "\n";
            $buffer .= '                \'' . $primary_key . ' = :' . $primary_key . '\',' . "\n";
            $buffer .= '                array(' . "\n";
            $buffer .= '                    \'' . $primary_key . '\' => $_GET[\'' . $primary_key . '\'],' . "\n";
            $buffer .= '                ),' . "\n";
            $buffer .= '            ),' . "\n";
            $buffer .= '        ));' . "\n";
            $buffer .= '        if (empty($' . $table . ')) {' . "\n";
            $buffer .= '            error(\'Data not found.\');' . "\n";
            $buffer .= '        } else {' . "\n";
            $buffer .= '            $_view[\'data\'] = $' . $table . '[0];' . "\n";
            $buffer .= '        }' . "\n";
        }
        $buffer .= '    } else {' . "\n";
        $buffer .= '        $_view[\'data\'] = default_' . $table . '();' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= '}' . "\n";
        $scaffold .= db_scaffold_output($controller_post_file, $buffer);
        if ($primary_flag) {
            $buffer = '<?php' . "\n";
            $buffer .= "\n";
            $buffer .= 'if ($_SERVER[\'REQUEST_METHOD\'] === \'POST\') {' . "\n";
            $buffer .= '    $resource = delete_' . $table . '(array(' . "\n";
            $buffer .= '        \'where\' => array(' . "\n";
            $buffer .= '            \'' . $primary_key . ' = :' . $primary_key . '\',' . "\n";
            $buffer .= '            array(' . "\n";
            $buffer .= '                \'' . $primary_key . '\' => $_POST[\'' . $primary_key . '\'],' . "\n";
            $buffer .= '            ),' . "\n";
            $buffer .= '        ),' . "\n";
            $buffer .= '    ));' . "\n";
            $buffer .= '    if (!$resource) {' . "\n";
            $buffer .= '        error(\'Delete error.\');' . "\n";
            $buffer .= '    }' . "\n";
            $buffer .= '} else {' . "\n";
            $buffer .= '    error(\'Method error.\');' . "\n";
            $buffer .= '}' . "\n";
            $buffer .= "\n";
            $buffer .= 'redirect(\'/' . $table . '/' . MAIN_DEFAULT_WORK . '\');' . "\n";
            $scaffold .= db_scaffold_output($controller_delete_file, $buffer);
        }
        // test data
        $test_insert = '';
        $test_insert .= '    $insert_' . $table . ' = array(' . "\n";
        $test_insert .= '        1 => array(' . "\n";
        $test_insert .= str_replace('[N]', 1, $test_data);
        $test_insert .= '        ),' . "\n";
        $test_insert .= '        2 => array(' . "\n";
        $test_insert .= str_replace('[N]', 2, $test_data);
        $test_insert .= '        ),' . "\n";
        $test_insert .= '        3 => array(' . "\n";
        $test_insert .= str_replace('[N]', 3, $test_data);
        $test_insert .= '        ),' . "\n";
        $test_insert .= '    );' . "\n";
        $test_update = '';
        $test_update .= '    $update_' . $table . ' = array(' . "\n";
        $test_update .= '        3 => array(' . "\n";
        $test_update .= str_replace('[N]', 3, $test_data);
        $test_update .= '        ),' . "\n";
        $test_update .= '    );' . "\n";
        // test model
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= 'model(\'' . $table . '.php\');' . "\n";
        $buffer .= "\n";
        $buffer .= 'db_transaction();' . "\n";
        $buffer .= "\n";
        $buffer .= '// insert' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // data' . "\n";
        $buffer .= $test_insert;
        $buffer .= "\n";
        $buffer .= '    // insert' . "\n";
        $buffer .= '    foreach ($insert_' . $table . ' as $insert_data) {' . "\n";
        $buffer .= '        $warnings = validate_' . $table . '(normalize_' . $table . '($insert_data));' . "\n";
        $buffer .= '        if (empty($warnings)) {' . "\n";
        $buffer .= '            insert_' . $table . '(array(' . "\n";
        $buffer .= '                \'values\' => $insert_data,' . "\n";
        $buffer .= '            ));' . "\n";
        $buffer .= '        } else {' . "\n";
        $buffer .= '            debug($warnings);' . "\n";
        $buffer .= '        }' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $' . $table . ' = select_' . $table . '(array(' . "\n";
        $buffer .= '        \'limit\' => 10,' . "\n";
        $buffer .= '    ));' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_equals(\'count_' . $table . '\', count($' . $table . '), 3);' . "\n";
        $buffer .= "\n";
        $buffer .= '    for ($i = 1; $i <= 3; $i++) {' . "\n";
        $buffer .= '        $inserted_data = array_shift($' . $table . ');' . "\n";
        $buffer .= '        $test_data     = array(' . "\n";
        $buffer .= '            $i => $inserted_data,' . "\n";
        $buffer .= '        );' . "\n";
        $buffer .= '        test_array_subset(\'insert_' . $table . ' \' . $i, $test_data, $insert_' . $table . '[$i]);' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= '// update' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // data' . "\n";
        $buffer .= $test_update;
        $buffer .= "\n";
        $buffer .= '    // update' . "\n";
        $buffer .= '    $warnings = validate_' . $table . '(normalize_' . $table . '($update_' . $table . '[3]));' . "\n";
        $buffer .= '    if (empty($warnings)) {' . "\n";
        $buffer .= '        update_' . $table . '(array(' . "\n";
        $buffer .= '            \'set\'   => $update_' . $table . '[3],' . "\n";
        $buffer .= '            \'where\' => \'id = 3\',' . "\n";
        $buffer .= '        ));' . "\n";
        $buffer .= '    } else {' . "\n";
        $buffer .= '        debug($warnings);' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $' . $table . ' = select_' . $table . '(array(' . "\n";
        $buffer .= '        \'limit\' => 10,' . "\n";
        $buffer .= '    ));' . "\n";
        $buffer .= "\n";
        $buffer .= '    $updated_data = array_pop($' . $table . ');' . "\n";
        $buffer .= '    $test_data    = array(' . "\n";
        $buffer .= '        3 => $updated_data,' . "\n";
        $buffer .= '    );' . "\n";
        $buffer .= '    test_array_subset(\'update_' . $table . '\', $test_data, $update_' . $table . '[3]);' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= '// delete' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // delete' . "\n";
        $buffer .= '    delete_' . $table . '(array(' . "\n";
        $buffer .= '        \'where\' => \'id = 3\',' . "\n";
        $buffer .= '    ));' . "\n";
        $buffer .= "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $' . $table . ' = select_' . $table . '(array(' . "\n";
        $buffer .= '        \'limit\' => 10,' . "\n";
        $buffer .= '    ));' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_equals(\'delete_' . $table . '\', count($' . $table . '), 2);' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= 'db_rollback();' . "\n";
        $scaffold .= db_scaffold_output($test_model_file, $buffer);
        // test view
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= '// index' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // data' . "\n";
        $buffer .= $test_insert;
        $buffer .= "\n";
        $buffer .= '    // assign' . "\n";
        $buffer .= '    $_view[\'' . $table . '\'] = $insert_' . $table . ';' . "\n";
        $buffer .= "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $html = view(\'' . $table . '/index.php\', true);' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 1\', $html, \'<td>\' . $insert_' . $table . '[1][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 2\', $html, \'<td>\' . $insert_' . $table . '[2][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 3\', $html, \'<td>\' . $insert_' . $table . '[3][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= '// post' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $_view[\'data\'] = $insert_' . $table . '[1];' . "\n";
        $buffer .= "\n";
        $buffer .= '    $html = view(\'' . $table . '/post.php\', true);' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_contains(\'' . $table . '/post\', $html, \'value="\' . $insert_' . $table . '[1][\'' . $primary_key . '\'] . \'"\');' . "\n";
        $buffer .= '}' . "\n";
        $scaffold .= db_scaffold_output($test_view_file, $buffer);
        // test controller
        $buffer = '<?php' . "\n";
        $buffer .= "\n";
        $buffer .= 'model();' . "\n";
        $buffer .= "\n";
        $buffer .= 'db_transaction();' . "\n";
        $buffer .= "\n";
        $buffer .= '// index' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // data' . "\n";
        $buffer .= $test_insert;
        $buffer .= "\n";
        $buffer .= '    // insert' . "\n";
        $buffer .= '    foreach ($insert_' . $table . ' as $insert_data) {' . "\n";
        $buffer .= '        $warnings = validate_' . $table . '(normalize_' . $table . '($insert_data));' . "\n";
        $buffer .= '        if (empty($warnings)) {' . "\n";
        $buffer .= '            insert_' . $table . '(array(' . "\n";
        $buffer .= '                \'values\' => $insert_data,' . "\n";
        $buffer .= '            ));' . "\n";
        $buffer .= '        } else {' . "\n";
        $buffer .= '            debug($warnings);' . "\n";
        $buffer .= '        }' . "\n";
        $buffer .= '    }' . "\n";
        $buffer .= "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $_params = array(\'' . $table . '\', \'index\');' . "\n";
        $buffer .= '    controller(\'' . $table . '/index.php\');' . "\n";
        $buffer .= '    $html = view(\'' . $table . '/index.php\', true);' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 1\', $html, \'<td>\' . $insert_' . $table . '[1][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 2\', $html, \'<td>\' . $insert_' . $table . '[2][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '    test_contains(\'' . $table . '/index 3\', $html, \'<td>\' . $insert_' . $table . '[3][\'' . $primary_key . '\'] . \'</td>\');' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= '// post' . "\n";
        $buffer .= '{' . "\n";
        $buffer .= '    // test' . "\n";
        $buffer .= '    $_params = array(\'' . $table . '\', \'post\');' . "\n";
        $buffer .= '    $_GET[\'' . $primary_key . '\'] = 3;' . "\n";
        $buffer .= '    controller(\'' . $table . '/post.php\');' . "\n";
        $buffer .= '    $html = view(\'' . $table . '/post.php\', true);' . "\n";
        $buffer .= "\n";
        $buffer .= '    test_contains(\'' . $table . '/post\', $html, \'value="\' . $insert_' . $table . '[3][\'' . $primary_key . '\'] . \'"\');' . "\n";
        $buffer .= '}' . "\n";
        $buffer .= "\n";
        $buffer .= 'db_rollback();' . "\n";
        $scaffold .= db_scaffold_output($test_controller_file, $buffer);
        $scaffold .= "\n";
    }
    // home
    $view_home_file = $views . MAIN_DEFAULT_MODE . '/' . MAIN_DEFAULT_WORK . '.php';
    $controller_home_file = $controllers . MAIN_DEFAULT_MODE . '/' . MAIN_DEFAULT_WORK . '.php';
    $scaffold .= '[index]' . "\n";
    $buffer = '<?php import(\'app/views/header.php\') ?>' . "\n";
    $buffer .= "\n";
    $buffer .= '        <ul>' . "\n";
    foreach ($results as $result) {
        if (DATABASE_TYPE === 'pdo_mysql' || DATABASE_TYPE === 'mysql') {
            $table_comment = $result['Comment'];
        } else {
            $table_comment = null;
        }
        $table = array_shift($result);
        if (regexp_match('^' . DATABASE_PREFIX . $exclude_prefix, $table)) {
            continue;
        }
        $buffer .= '            <li><a href="<?php t(MAIN_FILE) ?>/' . $table . '">' . ($table_comment ? $table_comment : $table) . '</a></li>' . "\n";
    }
    $buffer .= '        </ul>' . "\n";
    $buffer .= "\n";
    $buffer .= '<?php import(\'app/views/footer.php\') ?>' . "\n";
    $scaffold .= db_scaffold_output($view_home_file, $buffer);
    $buffer = '<?php' . "\n";
    $scaffold .= db_scaffold_output($controller_home_file, $buffer);
    // header
    $buffer = '<!DOCTYPE html>' . "\n";
    $buffer .= '<html>' . "\n";
    $buffer .= '    <head>' . "\n";
    $buffer .= '        <meta charset="<?php t(MAIN_CHARSET) ?>" />' . "\n";
    $buffer .= '        <title>scaffold</title>' . "\n";
    $buffer .= '    </head>' . "\n";
    $buffer .= '    <body>' . "\n";
    $buffer .= '        <h1>scaffold</h1>' . "\n";
    $scaffold .= db_scaffold_output($header_file, $buffer);
    // footer
    $buffer = '    </body>' . "\n";
    $buffer .= '</html>' . "\n";
    $scaffold .= db_scaffold_output($footer_file, $buffer);
    // before
    $buffer = '<?php' . "\n";
    $buffer .= "\n";
    $buffer .= 'import(\'' . $config_file . '\');' . "\n";
    $scaffold .= db_scaffold_output($before_file, $buffer);
    // config
    $buffer = '<?php' . "\n";
    $buffer .= "\n";
    $buffer .= '$GLOBALS[\'config\'][\'limits\'] = array(' . "\n";
    $max_length = 0;
    foreach ($results as $result) {
        $table = array_shift($result);
        if (regexp_match('^' . DATABASE_PREFIX . $exclude_prefix, $table)) {
            continue;
        }
        $max_length = strlen($table) > $max_length ? strlen($table) : $max_length;
    }
    foreach ($results as $result) {
        $table = array_shift($result);
        if (regexp_match('^' . DATABASE_PREFIX . $exclude_prefix, $table)) {
            continue;
        }
        $space = str_repeat(' ', $max_length - strlen($table));
        $buffer .= '    \'' . $table . '\' ' . $space . '=> 10,' . "\n";
    }
    $buffer .= ');' . "\n";
    $scaffold .= db_scaffold_output($config_file, $buffer);
    $scaffold .= "\n";
    $scaffold .= "Complete\n";
    // result
    echo "<!DOCTYPE html>\n";
    echo "<html>\n";
    echo "<head>\n";
    echo "<meta charset=\"" . t(MAIN_CHARSET, true) . "\" />\n";
    echo "<title>DB Scaffold</title>\n";
    style();
    echo "</head>\n";
    echo "<body>\n";
    echo "<h1>DB Scaffold</h1>\n";
    echo "<pre><code>" . t($scaffold, true) . "</code></pre>\n";
    echo "</body>\n";
    echo "</html>\n";
    exit;
}
Пример #2
0
                }
            }
            cookie_set('auth[session]', $session, localdate() + $GLOBALS['config']['cookie_expire']);
            // 古いセッションを削除
            $resource = delete_sessions(array('where' => array('expire < :expire', array('expire' => localdate('Y-m-d H:i:s')))));
            if (!$resource) {
                error('データを削除できません。');
            }
            // トランザクションを終了
            db_commit();
        }
    }
} else {
    $_view['user'] = array('username' => '', 'password' => '', 'session' => null);
}
// ログイン確認
if (!empty($_SESSION['auth']['user']['id'])) {
    if ($_REQUEST['_work'] === 'index') {
        if (isset($_GET['referer']) && regexp_match('^\\/', $_GET['referer'])) {
            $url = $_GET['referer'];
        } else {
            $url = '/user/home';
        }
        // リダイレクト
        redirect($url);
    } else {
        error('不正なアクセスです。');
    }
}
// タイトル
$_view['title'] = 'ログイン';
Пример #3
0
/**
 * Test if the actual data not match the expected data.
 *
 * @param string $title
 * @param mixed  $actual
 * @param mixed  $expected
 *
 * @return void
 */
function test_not_regexp($title, $actual, $expected)
{
    $result = false;
    if (!regexp_match($expected, $actual)) {
        $result = true;
    }
    return test_result($title, $result);
}
Пример #4
0
/**
 * Resize the file.
 *
 * @param string $original
 * @param string $output
 * @param int    $output_width
 * @param int    $output_height
 * @param int    $quality
 *
 * @return bool
 */
function file_resize($original, $output, $output_width, $output_height, $quality = 80)
{
    if (!regexp_match('\\.(gif|jpeg|jpg|jpe|png)$', $original)) {
        return true;
    }
    list($original_width, $original_height) = file_info($original);
    if ($original_width > $output_width) {
        $width = $output_width;
        $height = $width / $original_width * $original_height;
    } else {
        $width = $original_width;
        $height = $original_height;
    }
    if ($height > $output_height) {
        $width = $output_height / $height * $width;
        $height = $output_height;
    }
    if ($original_width === $width && $original_height === $height && $output === null) {
        header('Content-type: ' . file_mimetype($original));
        readfile($original);
        return true;
    }
    if (regexp_match('\\.gif$', $original)) {
        $file = imagecreatefromgif($original);
        $bgcolor = imagecolorallocatealpha($file, 0, 0, 0, 127);
    } elseif (regexp_match('\\.(jpeg|jpg|jpe)$', $original)) {
        $file = imagecreatefromjpeg($original);
        $bgcolor = false;
    } elseif (regexp_match('\\.png$', $original)) {
        $file = imagecreatefrompng($original);
        $bgcolor = imagecolorallocatealpha($file, 0, 0, 0, 127);
    } else {
        $file = false;
        $bgcolor = false;
    }
    if ($file === false) {
        return false;
    }
    $thumbnail = imagecreatetruecolor($width, $height);
    if ($thumbnail === false) {
        return false;
    }
    if (regexp_match('\\.gif$', $original)) {
        imagefill($thumbnail, 0, 0, $bgcolor);
        imagecolortransparent($thumbnail, $bgcolor);
    } elseif (regexp_match('\\.png$', $original)) {
        imagefill($thumbnail, 0, 0, $bgcolor);
        imagealphablending($thumbnail, false);
        imagesavealpha($thumbnail, true);
        imagecolortransparent($thumbnail, $bgcolor);
    }
    $result = imagecopyresampled($thumbnail, $file, 0, 0, 0, 0, $width, $height, $original_width, $original_height);
    if ($result === false) {
        return false;
    }
    if ($output) {
        if (regexp_match('\\.gif$', $original)) {
            $result = imagegif($thumbnail, $output);
        } elseif (regexp_match('\\.(jpeg|jpg|jpe)$', $original)) {
            $result = imagejpeg($thumbnail, $output, $quality);
        } elseif (regexp_match('\\.png$', $original)) {
            $result = imagepng($thumbnail, $output);
        } else {
            $result = false;
        }
    } else {
        header('Content-type: ' . file_mimetype($original));
        if (regexp_match('\\.gif$', $original)) {
            $result = imagegif($thumbnail);
        } elseif (regexp_match('\\.(jpeg|jpg|jpe)$', $original)) {
            $result = imagejpeg($thumbnail, null, $quality);
        } elseif (regexp_match('\\.png$', $original)) {
            $result = imagepng($thumbnail);
        } else {
            $result = false;
        }
    }
    if ($result === false) {
        return false;
    }
    imagedestroy($thumbnail);
    return true;
}
Пример #5
0
/**
 * Forward to the target.
 *
 * @param string|null $target
 *
 * @return string|null|void
 */
function forward($target = null)
{
    global $_params, $_view;
    static $forwarded = null;
    if ($target === null) {
        return $forwarded;
    } else {
        $forwarded = $target;
        if ($regexp = regexp_match('^\\/([_a-zA-Z0-9\\-]+)\\/([_a-zA-Z0-9\\-]+)$', $target)) {
            $_REQUEST['_mode'] = $regexp[1];
            $_REQUEST['_work'] = $regexp[2];
            $_params = array($regexp[1], $regexp[2]);
            controller($regexp[1] . '/' . $regexp[2] . '.php');
            view($regexp[1] . '/' . $regexp[2] . '.php');
            exit;
        } else {
            error('​Forward error' . (DEBUG_LEVEL ? ': ' . $target : ''));
        }
    }
}
Пример #6
0
/**
 * Get a form parts for time/date.
 *
 * @param mixed  $timestamp
 * @param string $type
 * @param array  $option
 *
 * @return string
 */
function ui_datetime($timestamp, $type = '', $option = array())
{
    if (!isset($option['format'])) {
        $option['format'] = '%01d';
    }
    if (!isset($option['prefix'])) {
        $option['prefix'] = '';
    }
    if (!isset($option['suffix'])) {
        $option['suffix'] = '';
    }
    if (!isset($option['from'])) {
        $option['from'] = 0;
    }
    if (!isset($option['to'])) {
        $option['to'] = 0;
    }
    if (!isset($option['step'])) {
        $option['step'] = 1;
    }
    switch ($type) {
        case 'year':
            $value = $timestamp ? intval(localdate('Y', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : date('Y') - 10;
            $to = $option['to'] ? $option['to'] : date('Y') + 10;
            break;
        case 'month':
            $value = $timestamp ? intval(localdate('m', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : 1;
            $to = $option['to'] ? $option['to'] : 12;
            break;
        case 'day':
            $value = $timestamp ? intval(localdate('d', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : 1;
            $to = $option['to'] ? $option['to'] : 31;
            break;
        case 'hour':
            $value = $timestamp ? intval(localdate('H', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : 0;
            $to = $option['to'] ? $option['to'] : 23;
            break;
        case 'minute':
            $value = $timestamp ? intval(localdate('i', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : 0;
            $to = $option['to'] ? $option['to'] : 59;
            break;
        case 'second':
            $value = $timestamp ? intval(localdate('s', $timestamp)) : null;
            $from = $option['from'] ? $option['from'] : 0;
            $to = $option['to'] ? $option['to'] : 59;
            break;
        default:
            return '<option value="">ui_datetime: Incorrect value was specified.</option>';
    }
    if ($regexp = regexp_match('^(\\d\\d\\d\\d)\\-(\\d\\d)\\-(\\d\\d)', $timestamp)) {
        $year = intval($regexp[1]);
        $month = intval($regexp[2]);
        $day = intval($regexp[3]);
        if (!checkdate($month, $day, $year)) {
            if ($regexp = regexp_match('(\\d\\d)\\:(\\d\\d)\\:(\\d\\d)$', $timestamp)) {
                $hour = intval($regexp[1]);
                $minute = intval($regexp[2]);
                $second = intval($regexp[3]);
            } else {
                $hour = 0;
                $minute = 0;
                $second = 0;
            }
            switch ($type) {
                case 'year':
                    $value = $year;
                    break;
                case 'month':
                    $value = $month;
                    break;
                case 'day':
                    $value = $day;
                    break;
                case 'hour':
                    $value = $hour;
                    break;
                case 'minute':
                    $value = $minute;
                    break;
                case 'second':
                    $value = $second;
                    break;
                default:
            }
        }
    }
    $datetime = '';
    for ($i = $from; $i <= $to; $i += $option['step']) {
        $datetime .= '<option value="' . sprintf('%02d', $i) . '"' . ($value !== null && $i == $value ? ' selected="selected"' : '') . '>' . $option['prefix'] . sprintf($option['format'], $i) . $option['suffix'] . '</option>';
    }
    return $datetime;
}