Example #1
0
 public function __construct()
 {
     $this->db = new Database();
     if (isset($_SESSION['user_id'])) {
         $this->user = $this->db->query('SELECT `id`, `name` FROM users WHERE id=:id', ['id' => $_SESSION['user_id']])->fetch();
         $this->db->setCurrentUser($this->user->id);
     }
 }
Example #2
0
 public function testBasics()
 {
     $db = new Database();
     // Make sure the default records were created.
     $db->setCurrentUser(Users::ADMIN);
     $this->assertEquals(2, $db->getTable('users')->getRecordCount());
     $this->assertEquals(2, $db->getTable('groups')->getRecordCount());
     $this->assertEquals(2, $db->getTable('group_members')->getRecordCount());
     // The anon user can't see anything.
     $db->setCurrentUser(Users::ANON);
     $this->assertEquals(Users::ANON, $db->getCurrentUser());
     $this->assertEmpty($db->getTables());
     // The admin user can see everything.
     $db->setCurrentUser(Users::ADMIN);
     $expectedTables = ['changes', 'changesets', 'grants', 'group_members', 'groups', 'sessions', 'test_table', 'test_types', 'users', 'report_sources', 'reports'];
     $this->assertEquals($expectedTables, $db->getTableNames(), '', 0, 1, true, true);
 }
Example #3
0
 public function setUp()
 {
     parent::setUp();
     require_once __DIR__ . '/../bootstrap.php';
     // Install.
     $upgrade = new \Tabulate\Commands\UpgradeCommand();
     $upgrade->run();
     $this->db = new Tabulate\DB\Database();
     // Create some testing tables and link them together.
     $this->db->query('DROP TABLE IF EXISTS `test_table`');
     $this->db->query('CREATE TABLE `test_table` (' . ' id INT(10) AUTO_INCREMENT PRIMARY KEY,' . ' title VARCHAR(100) NOT NULL,' . ' description TEXT NULL,' . ' active BOOLEAN NULL DEFAULT TRUE,' . ' a_date DATE NULL,' . ' a_year YEAR NULL,' . ' type_id INT(10) NULL DEFAULT NULL,' . ' widget_size DECIMAL(10,2) NOT NULL DEFAULT 5.6,' . ' ranking INT(3) NULL DEFAULT NULL,' . ' a_numeric NUMERIC(7,2) NULL DEFAULT NULL COMMENT "NUMERIC is the same as DECIMAL."' . ');');
     $this->db->query('DROP TABLE IF EXISTS `test_types`');
     $this->db->query('CREATE TABLE `test_types` (' . ' id INT(10) AUTO_INCREMENT PRIMARY KEY,' . ' title VARCHAR(100) NOT NULL UNIQUE' . ');');
     $this->db->query('ALTER TABLE `test_table` ' . ' ADD FOREIGN KEY ( `type_id` )' . ' REFERENCES `test_types` (`id`)' . ' ON DELETE CASCADE ON UPDATE CASCADE;');
     $this->db->reset();
     $this->db->setCurrentUser(Users::ADMIN);
 }
Example #4
0
 protected function installData(\Tabulate\DB\Database $db)
 {
     $this->write("Confirming existance of administrative user, group, and grant");
     // Can't log changes without a user (admin, in this case). So we create a user manually.
     $pwd = password_hash('admin', PASSWORD_DEFAULT);
     $adminUserData = ['id' => Users::ADMIN, 'name' => 'Admin', 'email' => Config::siteEmail(), 'password' => $pwd];
     $adminSql = "INSERT IGNORE INTO `users` SET `id`=:id, `name`=:name, `email`=:email, `password`=:password";
     $db->query($adminSql, $adminUserData);
     // Then we want to create a second user (anon), but this time recording changes. The change-tracker needs to
     // know about permissions, so before creating the 2nd user that we need to grant permission to admin.
     // Permissions are granted to groups, not users, so we put admin in an admin group first (manually).
     $params2 = ['id' => Groups::ADMINISTRATORS, 'name' => 'Administrators'];
     $db->query("INSERT IGNORE INTO `groups` SET `id`=:id, `name`=:name", $params2);
     $params3 = ['user' => Users::ADMIN, 'group' => Groups::ADMINISTRATORS];
     $db->query("INSERT IGNORE INTO `group_members` SET `user`=:user, `group`=:group", $params3);
     // Now we can grant everything (on everything) to the admin group.
     $db->query("INSERT IGNORE INTO `grants` SET `group`=:group", ['group' => Groups::ADMINISTRATORS]);
     // And finally 'reset' the DB so it knows about the above new records.
     $db->reset();
     // Start tracking changes now that there's a user to attribute it to.
     $db->setCurrentUser(Users::ADMIN);
     $changeTracker = new \Tabulate\DB\ChangeTracker($db);
     $changeTracker->openChangeset('Installation', true);
     // Create remaining default users and groups.
     if (!$db->getTable('users')->getRecord(Users::ANON)) {
         $this->write("Inserting user 'Anonymous'");
         $db->getTable('users')->saveRecord(['id' => Users::ANON, 'name' => 'Anonymous']);
     }
     if (!$db->getTable('groups', false)->getRecord(Groups::GENERAL_PUBLIC)) {
         $this->write("Inserting group 'General Public'");
         $db->getTable('groups', false)->saveRecord(['id' => Groups::GENERAL_PUBLIC, 'name' => 'General Public']);
     }
     // Add Anon user to the General Public group.
     $groupMembers = $db->getTable('group_members', false);
     $groupMembers->addFilter('user', '=', Users::ANON);
     $groupMembers->addFilter('group', '=', Groups::GENERAL_PUBLIC);
     if ($groupMembers->getRecordCount() === 0) {
         $this->write("Adding user 'Anonymous' to group 'General Public'");
         $groupMembers->saveRecord(['group' => Groups::GENERAL_PUBLIC, 'user' => Users::ANON]);
     }
     // Add first report (to list reports).
     if (0 == $db->query("SELECT COUNT(*) FROM `" . Reports::reportsTableName() . "`")->fetchColumn()) {
         // Create the default report, to list all reports.
         $templateString = "<dl>\n" . "{% for report in reports %}\n" . "  <dt><a href='{{baseurl}}/reports/{{report.id}}'>{{report.title}}</a></dt>\n" . "  <dd>{{report.description}}</dd>\n" . "{% endfor %}\n" . "</dl>";
         $sql1 = "INSERT INTO `" . Reports::reportsTableName() . "` SET" . " id          = " . Reports::DEFAULT_REPORT_ID . ", " . " title       = 'Reports', " . " description = 'List of all Reports.'," . " template    = :template;";
         $db->query($sql1, ['template' => $templateString]);
         // And the query for the above report.
         $query = "SELECT * FROM " . Reports::reportsTableName();
         $sql2 = "INSERT INTO `" . Reports::reportSourcesTableName() . "` SET " . " report = " . Reports::DEFAULT_REPORT_ID . "," . " name   = 'reports'," . " query  = :query;";
         $db->query($sql2, ['query' => $query]);
     }
     // Finish up.
     $changeTracker->closeChangeset();
 }