1
0
mirror of https://github.com/moparisthebest/wallabag synced 2024-12-18 13:42:17 -05:00

Import poche v2 schema

This commit is contained in:
Vincent Jousse 2013-11-21 22:44:41 +01:00
parent 95a3b293ae
commit 6f5d4b334c
8 changed files with 160 additions and 1 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ cache/*
vendor
composer.phar
composer.lock
poche.db

View File

@ -17,6 +17,10 @@ If you are using PHP 5.4 you can run Poche v2 by using the embedded webserver:
Poche should now be running at [http://localhost:8080](http://localhost:8080).
Then you should initialize your database by running:
./console db:create
# Test
To run the test suite just use:

View File

@ -4,7 +4,8 @@
"atoum/atoum" : "dev-master",
"twig/twig": ">=1.8,<2.0-dev",
"symfony/twig-bridge": "~2.3",
"knplabs/console-service-provider": "dev-master"
"knplabs/console-service-provider": "dev-master",
"doctrine/dbal": "2.2.*"
},
"autoload": {
"psr-0": { "Poche\\": "src/" }

View File

@ -8,5 +8,6 @@ require_once __DIR__.'/src/app.php';
$console = $app['console'];
$console->add(new Poche\Command\UnitTestsCommand());
$console->add(new Poche\Command\CreateSchemaCommand());
$console->run();

View File

@ -0,0 +1,36 @@
<?php
namespace Poche\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Knp\Command\Command as BaseCommand;
use Poche\Schema;
/**
* Application aware command
*
* Provide a silex application in CLI context.
*/
class CreateSchemaCommand extends BaseCommand
{
protected function configure()
{
$this
->setName('db:create')
->setDescription('Create default schema')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$app = $this->getSilexApplication();
$db = $app['db'];
Schema::executeSchema($db);
$output->writeln("<info>Schema created</info>");
}
}

88
src/Poche/Schema.php Normal file
View File

@ -0,0 +1,88 @@
<?php
namespace Poche;
use Poche\Util\Token;
class Schema
{
public static function executeSchema($db) {
$db->query("
CREATE TABLE config (
name TEXT,
value TEXT
)
");
$db->query("
INSERT INTO config (name, value)
VALUES ('api_token', '". Token::generateToken()."')
");
$db->query("
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
username TEXT DEFAULT 'poche',
password TEXT,
email TEXT,
language TEXT DEFAULT 'en_US',
items_per_page INTEGER DEFAULT 100,
theme TEXT DEFAULT 'original',
items_sorting_direction TEXT DEFAULT 'desc',
api_token TEXT DEFAULT '". Token::generateToken()."',
feed_token TEXT DEFAULT '".Token::generateToken()."',
auth_google_token TEXT DEFAULT '',
auth_mozilla_token TEXT DEFAULT ''
)
");
//$db->query("
// INSERT INTO users
// (password)
// VALUES ('".\password_hash('poche', PASSWORD_BCRYPT)."')
//");
$db->query('
CREATE TABLE entries (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
url TEXT,
title TEXT,
content TEXT,
updated INTEGER,
status TEXT,
bookmark INTEGER DEFAULT 0,
fetched INTEGER DEFAULT 1,
user_id INTEGER,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
)
');
$db->query('CREATE INDEX idx_status ON entries(status)');
$db->query('
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
value TEXT
)
');
$db->query('
CREATE TABLE tags_entries (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
entry_id INTEGER,
tag_id INTEGER,
FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE
)
');
$db->query("
CREATE TABLE plugin_options (
name TEXT PRIMARY KEY,
value TEXT
)
");
}
}

22
src/Poche/Util/Token.php Normal file
View File

@ -0,0 +1,22 @@
<?php
namespace Poche\Util;
class Token
{
/**
* Generates a new token
*
* @return string a token generated with /dev/urandom or mt_rand()
*/
public static function generateToken()
{
if (ini_get('open_basedir') === '') {
return substr(base64_encode(file_get_contents('/dev/urandom', false, null, 0, 20)), 0, 15);
}
else {
return substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
}
}
}

View File

@ -13,3 +13,9 @@ $app->register(new ConsoleServiceProvider(), [
'console.project_directory' => __DIR__.'/..',
]);
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_sqlite',
'path' => __DIR__.'/../poche.db',
),
));