Exemple #1
1
 private function _send_reset($form)
 {
     $user_name = $form->reset->inputs["name"]->value;
     $user = user::lookup_by_name($user_name);
     if ($user && !empty($user->email)) {
         $user->hash = random::hash();
         $user->save();
         $message = new View("reset_password.html");
         $message->confirm_url = url::abs_site("password/do_reset?key={$user->hash}");
         $message->user = $user;
         Sendmail::factory()->to($user->email)->subject(t("Password Reset Request"))->header("Mime-Version", "1.0")->header("Content-type", "text/html; charset=UTF-8")->message($message->render())->send();
         log::success("user", t("Password reset email sent for user %name", array("name" => $user->name)));
     } else {
         if (!$user) {
             // Don't include the username here until you're sure that it's XSS safe
             log::warning("user", t("Password reset email requested for user %user_name, which does not exist.", array("user_name" => $user_name)));
         } else {
             log::warning("user", t("Password reset failed for %user_name (has no email address on record).", array("user_name" => $user->name)));
         }
     }
     // Always pretend that an email has been sent to avoid leaking
     // information on what user names are actually real.
     message::success(t("Password reset email sent"));
     json::reply(array("result" => "success"));
 }
Exemple #2
0
 static function random_tag()
 {
     $tag = ORM::factory("tag");
     $tag->name = random::string(6);
     // Reload so that ORM coerces all fields into strings.
     return $tag->save()->reload();
 }
 public function reset_private_key()
 {
     // Generate a new (random) private key.
     module::set_var("fotomotorw", "fotomoto_private_key", md5(random::hash() . access::private_key()));
     message::success(t("Your Photomoto private key has been reset."));
     url::redirect("admin/fotomotorw");
 }
Exemple #4
0
 public static function startNewSession($username, $password, $gcm_id)
 {
     $success = true;
     //test if the username and password are correct
     if (user::isLogin($username, $password)) {
         //retrieve user info
         $user_info = user::getUserByUsername($username);
         $e = user::setGCM($user_info['id'], $gcm_id);
         $success = $success && $e;
         //check if user has existing session:
         if (session::does_user_have_session($user_info['id'])) {
             //remove the session
             $session_info = session::get_last_session_for_user_id($user_info['id']);
             session::delete_session_by_id($session_info['id']);
         }
         //generate a unique hash
         $newHash = md5(random::generateString(10));
         while (!session::is_unique_hash($newHash)) {
             $newHash = md5(random::generateString(10));
         }
         //create a session
         $res = session::add_new_session($user_info['id'], $newHash, "0");
         $success = $success && $res;
         if (!$success) {
             Execute::$lastErrorMessage = "failed to add new changes to database";
             Report::error(__METHOD__ . "," . __LINE__, "failed to new cahnges to database");
         }
         return $success;
     } else {
         Execute::$lastErrorMessage = "trying to login with an incorrect username or password";
         Report::warning(__METHOD__ . "," . __LINE__, "trying to login with an incorrect username or password");
         return false;
         //trying to log in with an incorrect username or password
     }
 }
 /**
  * {@inheritdoc}
  */
 public function apply(base $appbox, Application $app)
 {
     $dql = 'SELECT u FROM Phraseanet:User u WHERE u.nonce IS NULL';
     $q = $app['EM']->createQuery($dql);
     $q->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
     $users = $q->getResult();
     $n = 0;
     foreach ($users as $user) {
         $user->setNonce(random::generatePassword(16));
         $app['EM']->persist($user);
         $n++;
         if ($n % 100 === 0) {
             $app['EM']->flush();
         }
     }
     $app['EM']->flush();
     $sql = 'SELECT task_id, `class` FROM task2';
     $stmt = $appbox->get_connection()->prepare($sql);
     $stmt->execute();
     $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $sql = 'UPDATE task2 SET `class` = :class WHERE task_id = :task_id';
     $stmt = $appbox->get_connection()->prepare($sql);
     foreach ($rs as $row) {
         if (strpos($row['class'], 'task_period_') !== false) {
             continue;
         }
         $params = [':task_id' => $row['task_id'], ':class' => str_replace('task_', 'task_period_', $row['class'])];
         $stmt->execute($params);
     }
     $stmt->closeCursor();
     return true;
 }
 public function testGeneratePassword()
 {
     $this->assertRegExp('/[a-zA-Z]{4}/', random::generatePassword(4, random::LETTERS));
     $this->assertRegExp('/[a-zA-Z]{8}/', random::generatePassword(8, random::LETTERS));
     $this->assertRegExp('/[a-zA-Z]{16}/', random::generatePassword(16, random::LETTERS));
     $this->assertRegExp('/[a-zA-Z]{32}/', random::generatePassword(32, random::LETTERS));
     $this->assertRegExp('/[a-zA-Z]{64}/', random::generatePassword(64, random::LETTERS));
     $this->assertRegExp('/[a-zA-Z0-9]{4}/', random::generatePassword(4, random::LETTERS_AND_NUMBERS));
     $this->assertRegExp('/[a-zA-Z0-9]{8}/', random::generatePassword(8, random::LETTERS_AND_NUMBERS));
     $this->assertRegExp('/[a-zA-Z0-9]{16}/', random::generatePassword(16, random::LETTERS_AND_NUMBERS));
     $this->assertRegExp('/[a-zA-Z0-9]{32}/', random::generatePassword(32, random::LETTERS_AND_NUMBERS));
     $this->assertRegExp('/[a-zA-Z0-9]{64}/', random::generatePassword(64, random::LETTERS_AND_NUMBERS));
     $this->assertRegExp('/[0-9]{4}/', random::generatePassword(4, random::NUMBERS));
     $this->assertRegExp('/[0-9]{8}/', random::generatePassword(8, random::NUMBERS));
     $this->assertRegExp('/[0-9]{16}/', random::generatePassword(16, random::NUMBERS));
     $this->assertRegExp('/[0-9]{32}/', random::generatePassword(32, random::NUMBERS));
     $this->assertRegExp('/[0-9]{64}/', random::generatePassword(64, random::NUMBERS));
     try {
         random::generatePassword('gros caca', random::NUMBERS);
         $this->fail('An invalid argument exception should have been triggered');
     } catch (Exception_InvalidArgument $e) {
     }
     try {
         random::generatePassword('012', random::NUMBERS);
         $this->fail('An invalid argument exception should have been triggered');
     } catch (Exception_InvalidArgument $e) {
     }
     try {
         random::generatePassword('caca007', random::NUMBERS);
         $this->fail('An invalid argument exception should have been triggered');
     } catch (Exception_InvalidArgument $e) {
     }
 }
Exemple #7
0
 public function index()
 {
     $session = Session::instance();
     // Make sure we have an upgrade token
     if (!($upgrade_token = $session->get("upgrade_token", null))) {
         $session->set("upgrade_token", $upgrade_token = random::hash());
     }
     // If the upgrade token exists, then bless this session
     if (file_exists(TMPPATH . $upgrade_token)) {
         $session->set("can_upgrade", true);
         @unlink(TMPPATH . $upgrade_token);
     }
     $available_upgrades = 0;
     foreach (module::available() as $module) {
         if ($module->version && $module->version != $module->code_version) {
             $available_upgrades++;
         }
     }
     $failed = Input::instance()->get("failed");
     $view = new View("upgrader.html");
     $view->can_upgrade = identity::active_user()->admin || $session->get("can_upgrade");
     $view->upgrade_token = $upgrade_token;
     $view->available = module::available();
     $view->failed = $failed ? explode(",", $failed) : array();
     $view->done = $available_upgrades == 0;
     print $view;
 }
 /**
  * @covers Alchemy\Phrasea\Border\Checker\Sha256::check
  */
 public function testCheckNoFile()
 {
     $mock = $this->getMock('\\Alchemy\\Phrasea\\Border\\File', ['getSha256'], [self::$DI['app'], $this->media, self::$DI['collection']]);
     $mock->expects($this->once())->method('getSha256')->will($this->returnValue(\random::generatePassword(3)));
     $response = $this->object->check(self::$DI['app']['EM'], $mock);
     $this->assertInstanceOf('\\Alchemy\\Phrasea\\Border\\Checker\\Response', $response);
     $this->assertTrue($response->isOk());
 }
 /**
  * Return true if it's time to auto check.
  */
 static function should_auto_check()
 {
     if (upgrade_checker::auto_check_enabled() && random::int(1, 100) == 1) {
         $version_info = upgrade_checker::version_info();
         return !$version_info || time() - $version_info->timestamp > AUTO_CHECK_INTERVAL;
     }
     return false;
 }
 public function setUp()
 {
     parent::setUp();
     $this->account = API_OAuth2_Account::load_with_user(self::$DI['app'], self::$DI['oauth2-app-user'], self::$DI['user']);
     $expires = time() + 100;
     $this->code = random::generatePassword(8);
     $this->object = API_OAuth2_AuthCode::create(self::$DI['app'], $this->account, $this->code, $expires);
 }
 public function testValidTokenIsValid()
 {
     $random = $this->getMockBuilder('random')->disableOriginalConstructor()->setMethods(['helloToken'])->getMock();
     $token = \random::generatePassword();
     $random->expects($this->once())->method('helloToken')->with($token)->will($this->returnValue(['usr_id' => mt_rand(), 'type' => \random::TYPE_PASSWORD]));
     $constraint = new PasswordToken($random);
     $this->assertTrue($constraint->isValid($token));
 }
 public function setUp()
 {
     parent::setUp();
     $this->account = API_OAuth2_Account::load_with_user(self::$DI['app'], self::$DI['oauth2-app-user'], self::$DI['user']);
     $expires = time() + 100;
     $this->token = random::generatePassword(8);
     $this->scope = 'scopidou';
     $this->object = API_OAuth2_RefreshToken::create(self::$DI['app'], $this->account, $expires, $this->token, $this->scope);
 }
 private function _get_proxy()
 {
     $album = test::random_album();
     $photo = test::random_photo($album);
     access::deny(identity::everybody(), "view_full", $album);
     access::deny(identity::registered_users(), "view_full", $album);
     $proxy = ORM::factory("digibug_proxy");
     $proxy->uuid = random::hash();
     $proxy->item_id = $photo->id;
     return $proxy->save();
 }
Exemple #14
0
    function short_form()
    {
        if (!isset($_GET['shortsubmit'])) {
            ?>
			<form class="shortform" method="GET" autocomplete="off">
			<input class="shortform_url" text="Test" placeholder="Paste a URL to short it" name="urltoshort" >
			<input class="shortform_submit" type="submit" name="shortsubmit" value="Short!">
			</form>
	<?php 
        } elseif (isset($_GET['shortsubmit'])) {
            $siteurl = $_GET["urltoshort"];
            if (!preg_match("/\\b(?:(?:https?|ftp):\\/\\/|www\\.)[-a-z0-9+&@#\\/%?=~_|!:,.;]*[-a-z0-9+&@#\\/%=~_|]/i", $siteurl)) {
                ?>
      		<form class="shortform" method="GET" autocomplete="off">
			<input class="shortform_url" text="Test" placeholder="Please insert a valid URL." name="urltoshort">
			<input class="shortform_submit" type="submit" name="shortsubmit" value="Short!">
			</form>	
			<?php 
            } else {
                $long_url = $_GET['urltoshort'];
                $r_string = new random();
                $short_string = $r_string->rand_string(8);
                //if isn't in db:
                $dbaction = new mysql_code();
                if ($dbaction->is_in_db($short_string) == "ne") {
                    $shortenurl = $dbaction->string_in_db($short_string, $long_url);
                } elseif ($dbaction->is_in_db($short_string) == "e") {
                    echo 'An Error occurred. Please try again.';
                }
                ?>
			<form class="shortform" method="GET" autocomplete="off">
			<input class="shortform_url" text="Test" value="<?php 
                echo $shortenurl;
                ?>
" name="urltoshort">
			<input class="shortform_submit" type="submit" name="shortsubmit" value="Short!">
			</form>		
			<?php 
            }
        }
    }
Exemple #15
0
 public function testDeleteSetMailToNullAndRemovesSessions()
 {
     if (null === ($user = self::$DI['app']['manipulator.user']->getRepository()->findByLogin('test_phpunit_sessions'))) {
         $user = self::$DI['app']['manipulator.user']->createUser('test_phpunit_sessions', \random::generatePassword());
     }
     $session = new \Alchemy\Phrasea\Model\Entities\Session();
     $session->setUser($user)->setUserAgent('');
     self::$DI['app']['EM']->persist($session);
     self::$DI['app']['EM']->flush();
     self::$DI['app']['manipulator.user']->delete($user);
     $repo = self::$DI['app']['EM']->getRepository('Phraseanet:Session');
     $this->assertCount(0, $repo->findByUser($user));
 }
 static function install()
 {
     // Set up some default values.
     module::set_var("fotomotorw", "fotomoto_site_key", '');
     module::set_var("fotomotorw", "fotomoto_private_key", md5(random::hash() . access::private_key()));
     module::set_var("fotomotorw", "fotomoto_buy_prints", 1);
     module::set_var("fotomotorw", "fotomoto_buy_cards", 1);
     module::set_var("fotomotorw", "fotomoto_buy_download", 1);
     module::set_var("fotomotorw", "fotomoto_share_ecard", 1);
     module::set_var("fotomotorw", "fotomoto_share_facebook", 1);
     module::set_var("fotomotorw", "fotomoto_share_twitter", 1);
     module::set_var("fotomotorw", "fotomoto_share_digg", 1);
     module::set_version("fotomotorw", 1);
 }
 public function move_conflicts_result_in_a_rename_test()
 {
     $rand = random::int();
     $photo1 = test::random_photo_unsaved(item::root());
     $photo1->name = "{$rand}.jpg";
     $photo1->slug = (string) $rand;
     $photo1->save();
     $src_album = test::random_album();
     $photo2 = test::random_photo_unsaved($src_album);
     $photo2->name = "{$rand}.jpg";
     $photo2->slug = (string) $rand;
     $photo2->save();
     item::move($photo2, item::root());
     $this->assert_same(item::root()->id, $photo2->parent_id);
     $this->assert_not_same("{$rand}.jpg", $photo2->name);
     $this->assert_not_same($rand, $photo2->slug);
 }
Exemple #18
0
 public function testIs_valid()
 {
     for ($i = 0; $i < 1000; $i++) {
         $uuid = uuid::generate_v4();
         if (!uuid::is_valid($uuid)) {
             $this->fail('Generation d\'un uuid v4 invalide');
         }
         $uuid = uuid::generate_v5($uuid, random::generatePassword(12));
         if (!uuid::is_valid($uuid)) {
             $this->fail('Generation d\'un uuid v5 invalide');
         }
         $uuid = uuid::generate_v3($uuid, random::generatePassword(12));
         if (!uuid::is_valid($uuid)) {
             $this->fail('Generation d\'un uuid v3 invalide');
         }
         unset($uuid);
     }
 }
 public function print_photo($id)
 {
     access::verify_csrf();
     $item = ORM::factory("item", $id);
     access::required("view", $item);
     if (access::group_can(identity::everybody(), "view_full", $item)) {
         $full_url = $item->file_url(true);
         $thumb_url = $item->thumb_url(true);
     } else {
         $proxy = ORM::factory("digibug_proxy");
         $proxy->uuid = random::hash();
         $proxy->item_id = $item->id;
         $proxy->save();
         $full_url = url::abs_site("digibug/print_proxy/full/{$proxy->uuid}/{$item->id}");
         $thumb_url = url::abs_site("digibug/print_proxy/thumb/{$proxy->uuid}/{$item->id}");
     }
     $v = new View("digibug_form.html");
     $v->order_params = array("digibug_api_version" => "100", "company_id" => module::get_var("digibug", "company_id"), "event_id" => module::get_var("digibug", "event_id"), "cmd" => "addimg", "partner_code" => "69", "return_url" => url::abs_site("digibug/close_window"), "num_images" => "1", "image_1" => $full_url, "thumb_1" => $thumb_url, "image_height_1" => $item->height, "image_width_1" => $item->width, "thumb_height_1" => $item->thumb_height, "thumb_width_1" => $item->thumb_width, "title_1" => html::purify($item->title));
     print $v;
 }
Exemple #20
0
 static function show_user_profile($data)
 {
     // Guests can't see a REST key
     if (identity::active_user()->guest) {
         return;
     }
     // Only logged in users can see their own REST key
     if (identity::active_user()->id != $data->user->id) {
         return;
     }
     $view = new View("user_profile_rest.html");
     $key = ORM::factory("user_access_key")->where("user_id", "=", $data->user->id)->find();
     if (!$key->loaded()) {
         $key->user_id = $data->user->id;
         $key->access_key = random::hash();
         $key->save();
     }
     $view->rest_key = $key->access_key;
     $data->content[] = (object) array("title" => t("REST API"), "view" => $view);
 }
 /**
  * @covers Alchemy\Phrasea\SearchEngine\SearchEngineLogger::log
  * @todo   Implement testLog().
  */
 public function testLog()
 {
     $databox = self::$DI['collection']->get_databox();
     $coll_ids = [self::$DI['collection']->get_coll_id()];
     $answers = 42;
     $query = \random::generatePassword();
     $object = new SearchEngineLogger(self::$DI['app']);
     $object->log($databox, $query, $answers, $coll_ids);
     $conn = $databox->get_connection();
     $sql = 'SELECT date, search, results, coll_id
             FROM log_search
             ORDER BY id DESC
             LIMIT 1';
     $stmt = $conn->prepare($sql);
     $stmt->execute();
     $row = $stmt->fetch(\PDO::FETCH_ASSOC);
     $stmt->closeCursor();
     $this->assertEquals($query, $row['search']);
     $this->assertEquals($answers, $row['results']);
     $this->assertEquals(self::$DI['collection']->get_coll_id(), $row['coll_id']);
 }
 public function change_album_test()
 {
     $controller = new Albums_Controller();
     $album = test::random_album();
     // Randomize to avoid conflicts.
     $new_name = "new_name_" . random::string(6);
     $_POST["name"] = $new_name;
     $_POST["title"] = "new title";
     $_POST["description"] = "new description";
     $_POST["column"] = "weight";
     $_POST["direction"] = "ASC";
     $_POST["csrf"] = access::csrf_token();
     $_POST["slug"] = "new-name";
     access::allow(identity::everybody(), "edit", item::root());
     ob_start();
     $controller->update($album->id);
     $album->reload();
     $results = ob_get_contents();
     ob_end_clean();
     $this->assert_equal(json_encode(array("result" => "success")), $results);
     $this->assert_equal($new_name, $album->name);
     $this->assert_equal("new title", $album->title);
     $this->assert_equal("new description", $album->description);
 }
Exemple #23
0
session_start();
try {
    include 'loader.php';
    $questions = new Question();
    if ($is_get_ok = isset($_GET['category'])) {
        $category = $_GET['category'];
        $ile_pytan = $questions->checkQuantity($category);
    } else {
        $category = "html";
        $ile_pytan = $questions->checkQuantity($category);
    }
    $ile_wylosowac = 5;
    //ile pytań wylosować?
    $ile_juz_wylosowano = 0;
    //zmienna pomocnicza
    $random = new random();
    $wylosowane = null;
    for ($i = 1; $i <= $ile_wylosowac; $i++) {
        do {
            $liczba = $random->getRandom($ile_pytan);
            $losowanie_ok = true;
            $losowanie_ok = $random->checkRandom($liczba, $ile_juz_wylosowano, $wylosowane);
            if ($losowanie_ok == true) {
                $ile_juz_wylosowano++;
                $wylosowane[$ile_juz_wylosowano] = $liczba;
            }
        } while ($losowanie_ok != true);
    }
    echo '<form action="check.php?category=' . $category . '" method="post" role="form">';
    for ($i = 1; $i <= $ile_wylosowac; $i++) {
        $question = $questions->getQuestion($wylosowane[$i], $category);
Exemple #24
0
 public function basic_validation_test()
 {
     $item = ORM::factory("item");
     $item->album_cover_item_id = random::int();
     // invalid
     $item->description = str_repeat("x", 70000);
     // invalid
     $item->name = null;
     $item->parent_id = random::int();
     $item->slug = null;
     $item->sort_column = "bogus";
     $item->sort_order = "bogus";
     $item->title = null;
     $item->type = "bogus";
     try {
         $item->save();
     } catch (ORM_Validation_Exception $e) {
         $this->assert_same(array("description" => "length", "name" => "required", "title" => "required", "album_cover_item_id" => "invalid_item", "parent_id" => "invalid", "sort_column" => "invalid", "sort_order" => "invalid", "type" => "invalid"), $e->validation->errors());
         return;
     }
     $this->assert_false(true, "Shouldn't get here");
 }
 static function upgrade($version)
 {
     $db = Database::instance();
     if ($version == 1) {
         module::set_var("gallery", "date_format", "Y-M-d");
         module::set_var("gallery", "date_time_format", "Y-M-d H:i:s");
         module::set_var("gallery", "time_format", "H:i:s");
         module::set_version("gallery", $version = 2);
     }
     if ($version == 2) {
         module::set_var("gallery", "show_credits", 1);
         module::set_version("gallery", $version = 3);
     }
     if ($version == 3) {
         $db->query("CREATE TABLE {caches} (\n                 `id` varchar(255) NOT NULL,\n                 `tags` varchar(255),\n                 `expiration` int(9) NOT NULL,\n                 `cache` text,\n                 PRIMARY KEY (`id`),\n                 KEY (`tags`))\n                 DEFAULT CHARSET=utf8;");
         module::set_version("gallery", $version = 4);
     }
     if ($version == 4) {
         Cache::instance()->delete_all();
         $db->query("ALTER TABLE {caches} MODIFY COLUMN `cache` LONGBLOB");
         module::set_version("gallery", $version = 5);
     }
     if ($version == 5) {
         Cache::instance()->delete_all();
         $db->query("ALTER TABLE {caches} DROP COLUMN `id`");
         $db->query("ALTER TABLE {caches} ADD COLUMN `key` varchar(255) NOT NULL");
         $db->query("ALTER TABLE {caches} ADD COLUMN `id` int(9) NOT NULL auto_increment PRIMARY KEY");
         module::set_version("gallery", $version = 6);
     }
     if ($version == 6) {
         module::clear_var("gallery", "version");
         module::set_version("gallery", $version = 7);
     }
     if ($version == 7) {
         $groups = identity::groups();
         $permissions = ORM::factory("permission")->find_all();
         foreach ($groups as $group) {
             foreach ($permissions as $permission) {
                 // Update access intents
                 $db->query("ALTER TABLE {access_intents} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) DEFAULT NULL");
                 // Update access cache
                 if ($permission->name === "view") {
                     $db->query("ALTER TABLE {items} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) DEFAULT FALSE");
                 } else {
                     $db->query("ALTER TABLE {access_caches} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) NOT NULL DEFAULT FALSE");
                 }
             }
         }
         module::set_version("gallery", $version = 8);
     }
     if ($version == 8) {
         $db->query("ALTER TABLE {items} CHANGE COLUMN `left`  `left_ptr`  INT(9) NOT NULL;");
         $db->query("ALTER TABLE {items} CHANGE COLUMN `right` `right_ptr` INT(9) NOT NULL;");
         module::set_version("gallery", $version = 9);
     }
     if ($version == 9) {
         $db->query("ALTER TABLE {items} ADD KEY `weight` (`weight` DESC);");
         module::set_version("gallery", $version = 10);
     }
     if ($version == 10) {
         module::set_var("gallery", "image_sharpen", 15);
         module::set_version("gallery", $version = 11);
     }
     if ($version == 11) {
         $db->query("ALTER TABLE {items} ADD COLUMN `relative_url_cache` varchar(255) DEFAULT NULL");
         $db->query("ALTER TABLE {items} ADD COLUMN `slug` varchar(255) DEFAULT NULL");
         // This is imperfect since some of the slugs may contain invalid characters, but it'll do
         // for now because we don't want a lengthy operation here.
         $db->query("UPDATE {items} SET `slug` = `name`");
         // Flush all path caches because we're going to start urlencoding them.
         $db->query("UPDATE {items} SET `relative_url_cache` = NULL, `relative_path_cache` = NULL");
         module::set_version("gallery", $version = 12);
     }
     if ($version == 12) {
         if (module::get_var("gallery", "active_site_theme") == "default") {
             module::set_var("gallery", "active_site_theme", "wind");
         }
         if (module::get_var("gallery", "active_admin_theme") == "admin_default") {
             module::set_var("gallery", "active_admin_theme", "admin_wind");
         }
         module::set_version("gallery", $version = 13);
     }
     if ($version == 13) {
         // Add rules for generating our thumbnails and resizes
         Database::instance()->query("UPDATE {graphics_rules} SET `operation` = CONCAT('gallery_graphics::', `operation`);");
         module::set_version("gallery", $version = 14);
     }
     if ($version == 14) {
         $sidebar_blocks = block_manager::get_active("site_sidebar");
         if (empty($sidebar_blocks)) {
             $available_blocks = block_manager::get_available_site_blocks();
             foreach (array_keys(block_manager::get_available_site_blocks()) as $id) {
                 $sidebar_blocks[] = explode(":", $id);
             }
             block_manager::set_active("site_sidebar", $sidebar_blocks);
         }
         module::set_version("gallery", $version = 15);
     }
     if ($version == 15) {
         module::set_var("gallery", "identity_provider", "user");
         module::set_version("gallery", $version = 16);
     }
     // Convert block keys to an md5 hash of the module and block name
     if ($version == 16) {
         foreach (array("dashboard_sidebar", "dashboard_center", "site_sidebar") as $location) {
             $blocks = block_manager::get_active($location);
             $new_blocks = array();
             foreach ($blocks as $block) {
                 $new_blocks[md5("{$block[0]}:{$block[1]}")] = $block;
             }
             block_manager::set_active($location, $new_blocks);
         }
         module::set_version("gallery", $version = 17);
     }
     // We didn't like md5 hashes so convert block keys back to random keys to allow duplicates.
     if ($version == 17) {
         foreach (array("dashboard_sidebar", "dashboard_center", "site_sidebar") as $location) {
             $blocks = block_manager::get_active($location);
             $new_blocks = array();
             foreach ($blocks as $block) {
                 $new_blocks[random::int()] = $block;
             }
             block_manager::set_active($location, $new_blocks);
         }
         module::set_version("gallery", $version = 18);
     }
     // Rename blocks_site.sidebar to blocks_site_sidebar
     if ($version == 18) {
         $blocks = block_manager::get_active("site.sidebar");
         block_manager::set_active("site_sidebar", $blocks);
         module::clear_var("gallery", "blocks_site.sidebar");
         module::set_version("gallery", $version = 19);
     }
     // Set a default for the number of simultaneous uploads
     // Version 20 was reverted in 57adefc5baa7a2b0dfcd3e736e80c2fa86d3bfa2, so skip it.
     if ($version == 19 || $version == 20) {
         module::set_var("gallery", "simultaneous_upload_limit", 5);
         module::set_version("gallery", $version = 21);
     }
     // Update the graphics rules table so that the maximum height for resizes is 640 not 480.
     // Fixes ticket #671
     if ($version == 21) {
         $resize_rule = ORM::factory("graphics_rule")->where("id", "=", "2")->find();
         // make sure it hasn't been changed already
         $args = unserialize($resize_rule->args);
         if ($args["height"] == 480 && $args["width"] == 640) {
             $args["height"] = 640;
             $resize_rule->args = serialize($args);
             $resize_rule->save();
         }
         module::set_version("gallery", $version = 22);
     }
     // Update slug values to be legal.  We should have done this in the 11->12 upgrader, but I was
     // lazy.  Mea culpa!
     if ($version == 22) {
         foreach (db::build()->from("items")->select("id", "slug")->where(db::expr("`slug` REGEXP '[^_A-Za-z0-9-]'"), "=", 1)->execute() as $row) {
             $new_slug = item::convert_filename_to_slug($row->slug);
             if (empty($new_slug)) {
                 $new_slug = random::int();
             }
             db::build()->update("items")->set("slug", $new_slug)->set("relative_url_cache", null)->where("id", "=", $row->id)->execute();
         }
         module::set_version("gallery", $version = 23);
     }
     if ($version == 23) {
         $db->query("CREATE TABLE {failed_logins} (\n                  `id` int(9) NOT NULL auto_increment,\n                  `count` int(9) NOT NULL,\n                  `name` varchar(255) NOT NULL,\n                  `time` int(9) NOT NULL,\n                  PRIMARY KEY (`id`))\n                  DEFAULT CHARSET=utf8;");
         module::set_version("gallery", $version = 24);
     }
     if ($version == 24) {
         foreach (array("logs", "tmp", "uploads") as $dir) {
             self::_protect_directory(VARPATH . $dir);
         }
         module::set_version("gallery", $version = 25);
     }
     if ($version == 25) {
         db::build()->update("items")->set("title", db::expr("`name`"))->and_open()->where("title", "IS", null)->or_where("title", "=", "")->close()->execute();
         module::set_version("gallery", $version = 26);
     }
     if ($version == 26) {
         if (in_array("failed_logins", Database::instance()->list_tables())) {
             $db->query("RENAME TABLE {failed_logins} TO {failed_auths}");
         }
         module::set_version("gallery", $version = 27);
     }
     if ($version == 27) {
         // Set the admin area timeout to 90 minutes
         module::set_var("gallery", "admin_area_timeout", 90 * 60);
         module::set_version("gallery", $version = 28);
     }
     if ($version == 28) {
         module::set_var("gallery", "credits", "Powered by <a href=\"%url\">%gallery_version</a>");
         module::set_version("gallery", $version = 29);
     }
     if ($version == 29) {
         $db->query("ALTER TABLE {caches} ADD KEY (`key`);");
         module::set_version("gallery", $version = 30);
     }
     if ($version == 30) {
         module::set_var("gallery", "maintenance_mode", 0);
         module::set_version("gallery", $version = 31);
     }
     if ($version == 31) {
         $db->query("ALTER TABLE {modules} ADD COLUMN `weight` int(9) DEFAULT NULL");
         $db->query("ALTER TABLE {modules} ADD KEY (`weight`)");
         db::update("modules")->set("weight", db::expr("`id`"))->execute();
         module::set_version("gallery", $version = 32);
     }
     if ($version == 32) {
         $db->query("ALTER TABLE {items} ADD KEY (`left_ptr`)");
         module::set_version("gallery", $version = 33);
     }
     if ($version == 33) {
         $db->query("ALTER TABLE {access_caches} ADD KEY (`item_id`)");
         module::set_version("gallery", $version = 34);
     }
     if ($version == 34) {
         module::set_var("gallery", "visible_title_length", 15);
         module::set_version("gallery", $version = 35);
     }
     if ($version == 35) {
         module::set_var("gallery", "favicon_url", "lib/images/favicon.ico");
         module::set_version("gallery", $version = 36);
     }
     if ($version == 36) {
         module::set_var("gallery", "email_from", "*****@*****.**");
         module::set_var("gallery", "email_reply_to", "*****@*****.**");
         module::set_var("gallery", "email_line_length", 70);
         module::set_var("gallery", "email_header_separator", serialize("\n"));
         module::set_version("gallery", $version = 37);
     }
     // Changed our minds and decided that the initial value should be empty
     // But don't just reset it blindly, only do it if the value is version 37 default
     if ($version == 37) {
         $email = module::get_var("gallery", "email_from", "");
         if ($email == "*****@*****.**") {
             module::set_var("gallery", "email_from", "");
         }
         $email = module::get_var("gallery", "email_reply_to", "");
         if ($email == "*****@*****.**") {
             module::set_var("gallery", "email_reply_to", "");
         }
         module::set_version("gallery", $version = 38);
     }
     if ($version == 38) {
         module::set_var("gallery", "show_user_profiles_to", "registered_users");
         module::set_version("gallery", $version = 39);
     }
     if ($version == 39) {
         module::set_var("gallery", "extra_binary_paths", "/usr/local/bin:/opt/local/bin:/opt/bin");
         module::set_version("gallery", $version = 40);
     }
     if ($version == 40) {
         module::clear_var("gallery", "_cache");
         module::set_version("gallery", $version = 41);
     }
     if ($version == 41) {
         $db->query("TRUNCATE TABLE {caches}");
         $db->query("ALTER TABLE {caches} DROP INDEX `key`, ADD UNIQUE `key` (`key`)");
         module::set_version("gallery", $version = 42);
     }
     if ($version == 42) {
         $db->query("ALTER TABLE {items} CHANGE `description` `description` text DEFAULT NULL");
         module::set_version("gallery", $version = 43);
     }
     if ($version == 43) {
         $db->query("ALTER TABLE {items} CHANGE `rand_key` `rand_key` DECIMAL(11, 10)");
         module::set_version("gallery", $version = 44);
     }
     if ($version == 44) {
         $db->query("ALTER TABLE {messages} CHANGE `value` `value` text default NULL");
         module::set_version("gallery", $version = 45);
     }
     if ($version == 45) {
         // Splice the upgrade_checker block into the admin dashboard at the top
         // of the page, but under the welcome block if it's in the first position.
         $blocks = block_manager::get_active("dashboard_center");
         $index = count($blocks) && current($blocks) == array("gallery", "welcome") ? 1 : 0;
         array_splice($blocks, $index, 0, array(random::int() => array("gallery", "upgrade_checker")));
         block_manager::set_active("dashboard_center", $blocks);
         module::set_var("gallery", "upgrade_checker_auto_enabled", true);
         module::set_version("gallery", $version = 46);
     }
     if ($version == 46) {
         module::set_var("gallery", "apple_touch_icon_url", "lib/images/apple-touch-icon.png");
         module::set_version("gallery", $version = 47);
     }
     if ($version == 47 || $version == 48) {
         // Add configuration variable to set timezone.  Defaults to the currently
         // used timezone (from PHP configuration).  Note that in v48 we were
         // setting this value incorrectly, so we're going to stomp this value for v49.
         module::set_var("gallery", "timezone", null);
         module::set_version("gallery", $version = 49);
     }
     if ($version == 49) {
         // In v49 we changed the Item_Model validation code to disallow files with two dots in them,
         // but we didn't rename any files which fail to validate, so as soon as you do anything to
         // change those files (eg. as a side effect of getting the url or file path) it fails to
         // validate.  Fix those here.  This might be slow, but if it times out it can just pick up
         // where it left off.
         foreach (db::build()->from("items")->select("id")->where("type", "<>", "album")->where(db::expr("`name` REGEXP '\\\\..*\\\\.'"), "=", 1)->order_by("id", "asc")->execute() as $row) {
             set_time_limit(30);
             $item = ORM::factory("item", $row->id);
             $item->name = legal_file::smash_extensions($item->name);
             $item->save();
         }
         module::set_version("gallery", $version = 50);
     }
     if ($version == 50) {
         // In v51, we added a lock_timeout variable so that administrators could edit the time out
         // from 1 second to a higher variable if their system runs concurrent parallel uploads for
         // instance.
         module::set_var("gallery", "lock_timeout", 1);
         module::set_version("gallery", $version = 51);
     }
     if ($version == 51) {
         // In v52, we added functions to the legal_file helper that map photo and movie file
         // extensions to their mime types (and allow extension of the list by other modules).  During
         // this process, we correctly mapped m4v files to video/x-m4v, correcting a previous error
         // where they were mapped to video/mp4.  This corrects the existing items.
         db::build()->update("items")->set("mime_type", "video/x-m4v")->where("name", "REGEXP", "\\.m4v\$")->execute();
         module::set_version("gallery", $version = 52);
     }
     if ($version == 52) {
         // In v53, we added the ability to change the default time used when extracting frames from
         // movies.  Previously we hard-coded this at 3 seconds, so we use that as the default.
         module::set_var("gallery", "movie_extract_frame_time", 3);
         module::set_version("gallery", $version = 53);
     }
     if ($version == 53) {
         // In v54, we changed how we check for name and slug conflicts in Item_Model.  Previously,
         // we checked the whole filename.  As a result, "foo.jpg" and "foo.png" were not considered
         // conflicting if their slugs were different (a rare case in practice since server_add and
         // uploader would give them both the same slug "foo").  Now, we check the filename without its
         // extension.  This upgrade stanza fixes any conflicts where they were previously allowed.
         // This might be slow, but if it times out it can just pick up where it left off.
         // Find and loop through each conflict (e.g. "foo.jpg", "foo.png", and "foo.flv" are one
         // conflict; "bar.jpg", "bar.png", and "bar.flv" are another)
         foreach (db::build()->select_distinct(array("parent_base_name" => db::expr("CONCAT(`parent_id`, ':', LOWER(SUBSTR(`name`, 1, LOCATE('.', `name`) - 1)))")))->select(array("C" => "COUNT(\"*\")"))->from("items")->where("type", "<>", "album")->having("C", ">", 1)->group_by("parent_base_name")->execute() as $conflict) {
             list($parent_id, $base_name) = explode(":", $conflict->parent_base_name, 2);
             $base_name_escaped = Database::escape_for_like($base_name);
             // Loop through the items for each conflict
             foreach (db::build()->from("items")->select("id")->where("type", "<>", "album")->where("parent_id", "=", $parent_id)->where("name", "LIKE", "{$base_name_escaped}.%")->limit(1000000)->offset(1)->execute() as $row) {
                 set_time_limit(30);
                 $item = ORM::factory("item", $row->id);
                 $item->name = $item->name;
                 // this will force Item_Model to check for conflicts on save
                 $item->save();
             }
         }
         module::set_version("gallery", $version = 54);
     }
     if ($version == 54) {
         $db->query("ALTER TABLE {items} ADD KEY `relative_path_cache` (`relative_path_cache`)");
         module::set_version("gallery", $version = 55);
     }
     if ($version == 55) {
         // In v56, we added the ability to change the default behavior regarding movie uploads.  It
         // can be set to "always", "never", or "autodetect" to match the previous behavior where they
         // are allowed only if FFmpeg is found.
         module::set_var("gallery", "movie_allow_uploads", "autodetect");
         module::set_version("gallery", $version = 56);
     }
     if ($version == 56) {
         // Cleanup possible instances where resize_dirty of albums or movies was set to 0.  This is
         // unlikely to have occurred, and doesn't currently matter much since albums and movies don't
         // have resize images anyway.  However, it may be useful to be consistent here going forward.
         db::build()->update("items")->set("resize_dirty", 1)->where("type", "<>", "photo")->execute();
         module::set_version("gallery", $version = 57);
     }
     if ($version == 57) {
         // In v58 we changed the Item_Model validation code to disallow files or directories with
         // backslashes in them, and we need to fix any existing items that have them.  This is
         // pretty unlikely, as having backslashes would have probably already caused other issues for
         // users, but we should check anyway.  This might be slow, but if it times out it can just
         // pick up where it left off.
         foreach (db::build()->from("items")->select("id")->where(db::expr("`name` REGEXP '\\\\\\\\'"), "=", 1)->order_by("id", "asc")->execute() as $row) {
             set_time_limit(30);
             $item = ORM::factory("item", $row->id);
             $item->name = str_replace("\\", "_", $item->name);
             $item->save();
         }
         module::set_version("gallery", $version = 58);
     }
 }
Exemple #26
0
 public function create_template()
 {
     $name = $this->request->get('value');
     if (trim($name) === '') {
         throw new \Exception_InvalidArgument('Invalid template name');
     }
     $created_user = $this->app['manipulator.user']->getRepository()->find($name, \random::generatePassword(16));
     $created_user->setModelOf($this->app['authentication']->getUser());
     $this->usr_id = $this->app['authentication']->getUser()->getId();
     return $created_user;
 }
Exemple #27
0
 static function upgrade($version)
 {
     $db = Database::instance();
     if ($version == 1) {
         module::set_var("gallery", "date_format", "Y-M-d");
         module::set_var("gallery", "date_time_format", "Y-M-d H:i:s");
         module::set_var("gallery", "time_format", "H:i:s");
         module::set_version("gallery", $version = 2);
     }
     if ($version == 2) {
         module::set_var("gallery", "show_credits", 1);
         module::set_version("gallery", $version = 3);
     }
     if ($version == 3) {
         $db->query("CREATE TABLE {caches} (\n                 `id` varchar(255) NOT NULL,\n                 `tags` varchar(255),\n                 `expiration` int(9) NOT NULL,\n                 `cache` text,\n                 PRIMARY KEY (`id`),\n                 KEY (`tags`))\n                 DEFAULT CHARSET=utf8;");
         module::set_version("gallery", $version = 4);
     }
     if ($version == 4) {
         Cache::instance()->delete_all();
         $db->query("ALTER TABLE {caches} MODIFY COLUMN `cache` LONGBLOB");
         module::set_version("gallery", $version = 5);
     }
     if ($version == 5) {
         Cache::instance()->delete_all();
         $db->query("ALTER TABLE {caches} DROP COLUMN `id`");
         $db->query("ALTER TABLE {caches} ADD COLUMN `key` varchar(255) NOT NULL");
         $db->query("ALTER TABLE {caches} ADD COLUMN `id` int(9) NOT NULL auto_increment PRIMARY KEY");
         module::set_version("gallery", $version = 6);
     }
     if ($version == 6) {
         module::clear_var("gallery", "version");
         module::set_version("gallery", $version = 7);
     }
     if ($version == 7) {
         $groups = identity::groups();
         $permissions = ORM::factory("permission")->find_all();
         foreach ($groups as $group) {
             foreach ($permissions as $permission) {
                 // Update access intents
                 $db->query("ALTER TABLE {access_intents} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) DEFAULT NULL");
                 // Update access cache
                 if ($permission->name === "view") {
                     $db->query("ALTER TABLE {items} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) DEFAULT FALSE");
                 } else {
                     $db->query("ALTER TABLE {access_caches} MODIFY COLUMN {$permission->name}_{$group->id} BINARY(1) NOT NULL DEFAULT FALSE");
                 }
             }
         }
         module::set_version("gallery", $version = 8);
     }
     if ($version == 8) {
         $db->query("ALTER TABLE {items} CHANGE COLUMN `left`  `left_ptr`  INT(9) NOT NULL;");
         $db->query("ALTER TABLE {items} CHANGE COLUMN `right` `right_ptr` INT(9) NOT NULL;");
         module::set_version("gallery", $version = 9);
     }
     if ($version == 9) {
         $db->query("ALTER TABLE {items} ADD KEY `weight` (`weight` DESC);");
         module::set_version("gallery", $version = 10);
     }
     if ($version == 10) {
         module::set_var("gallery", "image_sharpen", 15);
         module::set_version("gallery", $version = 11);
     }
     if ($version == 11) {
         $db->query("ALTER TABLE {items} ADD COLUMN `relative_url_cache` varchar(255) DEFAULT NULL");
         $db->query("ALTER TABLE {items} ADD COLUMN `slug` varchar(255) DEFAULT NULL");
         // This is imperfect since some of the slugs may contain invalid characters, but it'll do
         // for now because we don't want a lengthy operation here.
         $db->query("UPDATE {items} SET `slug` = `name`");
         // Flush all path caches becuase we're going to start urlencoding them.
         $db->query("UPDATE {items} SET `relative_url_cache` = NULL, `relative_path_cache` = NULL");
         module::set_version("gallery", $version = 12);
     }
     if ($version == 12) {
         if (module::get_var("gallery", "active_site_theme") == "default") {
             module::set_var("gallery", "active_site_theme", "wind");
         }
         if (module::get_var("gallery", "active_admin_theme") == "admin_default") {
             module::set_var("gallery", "active_admin_theme", "admin_wind");
         }
         module::set_version("gallery", $version = 13);
     }
     if ($version == 13) {
         // Add rules for generating our thumbnails and resizes
         Database::instance()->query("UPDATE {graphics_rules} SET `operation` = CONCAT('gallery_graphics::', `operation`);");
         module::set_version("gallery", $version = 14);
     }
     if ($version == 14) {
         $sidebar_blocks = block_manager::get_active("site_sidebar");
         if (empty($sidebar_blocks)) {
             $available_blocks = block_manager::get_available_site_blocks();
             foreach (array_keys(block_manager::get_available_site_blocks()) as $id) {
                 $sidebar_blocks[] = explode(":", $id);
             }
             block_manager::set_active("site_sidebar", $sidebar_blocks);
         }
         module::set_version("gallery", $version = 15);
     }
     if ($version == 15) {
         module::set_var("gallery", "identity_provider", "user");
         module::set_version("gallery", $version = 16);
     }
     // Convert block keys to an md5 hash of the module and block name
     if ($version == 16) {
         foreach (array("dashboard_sidebar", "dashboard_center", "site_sidebar") as $location) {
             $blocks = block_manager::get_active($location);
             $new_blocks = array();
             foreach ($blocks as $block) {
                 $new_blocks[md5("{$block[0]}:{$block[1]}")] = $block;
             }
             block_manager::set_active($location, $new_blocks);
         }
         module::set_version("gallery", $version = 17);
     }
     // We didn't like md5 hashes so convert block keys back to random keys to allow duplicates.
     if ($version == 17) {
         foreach (array("dashboard_sidebar", "dashboard_center", "site_sidebar") as $location) {
             $blocks = block_manager::get_active($location);
             $new_blocks = array();
             foreach ($blocks as $block) {
                 $new_blocks[random::int()] = $block;
             }
             block_manager::set_active($location, $new_blocks);
         }
         module::set_version("gallery", $version = 18);
     }
     // Rename blocks_site.sidebar to blocks_site_sidebar
     if ($version == 18) {
         $blocks = block_manager::get_active("site.sidebar");
         block_manager::set_active("site_sidebar", $blocks);
         module::clear_var("gallery", "blocks_site.sidebar");
         module::set_version("gallery", $version = 19);
     }
     // Set a default for the number of simultaneous uploads
     // Version 20 was reverted in 57adefc5baa7a2b0dfcd3e736e80c2fa86d3bfa2, so skip it.
     if ($version == 19 || $version == 20) {
         module::set_var("gallery", "simultaneous_upload_limit", 5);
         module::set_version("gallery", $version = 21);
     }
     // Update the graphics rules table so that the maximum height for resizes is 640 not 480.
     // Fixes ticket #671
     if ($version == 21) {
         $resize_rule = ORM::factory("graphics_rule")->where("id", "=", "2")->find();
         // make sure it hasn't been changed already
         $args = unserialize($resize_rule->args);
         if ($args["height"] == 480 && $args["width"] == 640) {
             $args["height"] = 640;
             $resize_rule->args = serialize($args);
             $resize_rule->save();
         }
         module::set_version("gallery", $version = 22);
     }
     // Update slug values to be legal.  We should have done this in the 11->12 upgrader, but I was
     // lazy.  Mea culpa!
     if ($version == 22) {
         foreach (db::build()->from("items")->select("id", "slug")->where(db::expr("`slug` REGEXP '[^_A-Za-z0-9-]'"), "=", 1)->execute() as $row) {
             $new_slug = item::convert_filename_to_slug($row->slug);
             if (empty($new_slug)) {
                 $new_slug = random::int();
             }
             db::build()->update("items")->set("slug", $new_slug)->set("relative_url_cache", null)->where("id", "=", $row->id)->execute();
         }
         module::set_version("gallery", $version = 23);
     }
     if ($version == 23) {
         $db->query("CREATE TABLE {failed_logins} (\n                  `id` int(9) NOT NULL auto_increment,\n                  `count` int(9) NOT NULL,\n                  `name` varchar(255) NOT NULL,\n                  `time` int(9) NOT NULL,\n                  PRIMARY KEY (`id`))\n                  DEFAULT CHARSET=utf8;");
         module::set_version("gallery", $version = 24);
     }
     if ($version == 24) {
         foreach (array("logs", "tmp", "uploads") as $dir) {
             self::_protect_directory(VARPATH . $dir);
         }
         module::set_version("gallery", $version = 25);
     }
     if ($version == 25) {
         db::build()->update("items")->set("title", db::expr("`name`"))->and_open()->where("title", "IS", null)->or_where("title", "=", "")->close()->execute();
         module::set_version("gallery", $version = 26);
     }
     if ($version == 26) {
         if (in_array("failed_logins", Database::instance()->list_tables())) {
             $db->query("RENAME TABLE {failed_logins} TO {failed_auths}");
         }
         module::set_version("gallery", $version = 27);
     }
     if ($version == 27) {
         // Set the admin area timeout to 90 minutes
         module::set_var("gallery", "admin_area_timeout", 90 * 60);
         module::set_version("gallery", $version = 28);
     }
     if ($version == 28) {
         module::set_var("gallery", "credits", "Powered by <a href=\"%url\">%gallery_version</a>");
         module::set_version("gallery", $version = 29);
     }
     if ($version == 29) {
         $db->query("ALTER TABLE {caches} ADD KEY (`key`);");
         module::set_version("gallery", $version = 30);
     }
     if ($version == 30) {
         module::set_var("gallery", "maintenance_mode", 0);
         module::set_version("gallery", $version = 31);
     }
     if ($version == 31) {
         $db->query("ALTER TABLE {modules} ADD COLUMN `weight` int(9) DEFAULT NULL");
         $db->query("ALTER TABLE {modules} ADD KEY (`weight`)");
         db::update("modules")->set("weight", db::expr("`id`"))->execute();
         module::set_version("gallery", $version = 32);
     }
     if ($version == 32) {
         $db->query("ALTER TABLE {items} ADD KEY (`left_ptr`)");
         module::set_version("gallery", $version = 33);
     }
     if ($version == 33) {
         $db->query("ALTER TABLE {access_caches} ADD KEY (`item_id`)");
         module::set_version("gallery", $version = 34);
     }
     if ($version == 34) {
         module::set_var("gallery", "visible_title_length", 15);
         module::set_version("gallery", $version = 35);
     }
     if ($version == 35) {
         module::set_var("gallery", "favicon_url", "lib/images/favicon.ico");
         module::set_version("gallery", $version = 36);
     }
     if ($version == 36) {
         module::set_var("gallery", "email_from", "*****@*****.**");
         module::set_var("gallery", "email_reply_to", "*****@*****.**");
         module::set_var("gallery", "email_line_length", 70);
         module::set_var("gallery", "email_header_separator", serialize("\n"));
         module::set_version("gallery", $version = 37);
     }
     // Changed our minds and decided that the initial value should be empty
     // But don't just reset it blindly, only do it if the value is version 37 default
     if ($version == 37) {
         $email = module::get_var("gallery", "email_from", "");
         if ($email == "*****@*****.**") {
             module::set_var("gallery", "email_from", "");
         }
         $email = module::get_var("gallery", "email_reply_to", "");
         if ($email == "*****@*****.**") {
             module::set_var("gallery", "email_reply_to", "");
         }
         module::set_version("gallery", $version = 38);
     }
     if ($version == 38) {
         module::set_var("gallery", "show_user_profiles_to", "registered_users");
         module::set_version("gallery", $version = 39);
     }
     if ($version == 39) {
         module::set_var("gallery", "extra_binary_paths", "/usr/local/bin:/opt/local/bin:/opt/bin");
         module::set_version("gallery", $version = 40);
     }
     if ($version == 40) {
         module::clear_var("gallery", "_cache");
         module::set_version("gallery", $version = 41);
     }
     if ($version == 41) {
         $db->query("TRUNCATE TABLE {caches}");
         $db->query("ALTER TABLE {caches} DROP INDEX `key`, ADD UNIQUE `key` (`key`)");
         module::set_version("gallery", $version = 42);
     }
     if ($version == 42) {
         $db->query("ALTER TABLE {items} CHANGE `description` `description` text DEFAULT NULL");
         module::set_version("gallery", $version = 43);
     }
     if ($version == 43) {
         $db->query("ALTER TABLE {items} CHANGE `rand_key` `rand_key` DECIMAL(11, 10)");
         module::set_version("gallery", $version = 44);
     }
     if ($version == 44) {
         $db->query("ALTER TABLE {messages} CHANGE `value` `value` text default NULL");
         module::set_version("gallery", $version = 45);
     }
     if ($version == 45) {
         // Splice the upgrade_checker block into the admin dashboard at the top
         // of the page, but under the welcome block if it's in the first position.
         $blocks = block_manager::get_active("dashboard_center");
         $index = count($blocks) && current($blocks) == array("gallery", "welcome") ? 1 : 0;
         array_splice($blocks, $index, 0, array(random::int() => array("gallery", "upgrade_checker")));
         block_manager::set_active("dashboard_center", $blocks);
         module::set_var("gallery", "upgrade_checker_auto_enabled", true);
         module::set_version("gallery", $version = 46);
     }
 }
 public function getUserNotAdmin()
 {
     if (null === ($user = $this->container['manipulator.user']->getRepository()->findByLogin('test_phpunit_not_admin'))) {
         $user = $this->container['manipulator.user']->createUser('test_phpunit_not_admin', \random::generatePassword(), '*****@*****.**', false);
     }
     return $user;
 }
 /**
  * @covers \caption_record::serializeYAML
  */
 public function testSerializeYAML()
 {
     foreach (self::$DI['record_1']->get_databox()->get_meta_structure() as $databox_field) {
         $n = $databox_field->is_multi() ? 3 : 1;
         for ($i = 0; $i < $n; $i++) {
             \caption_Field_Value::create(self::$DI['app'], $databox_field, self::$DI['record_1'], \random::generatePassword());
         }
     }
     $parser = new Yaml();
     $yaml = $parser->parse(self::$DI['app']['serializer.caption']->serialize($this->object, CaptionSerializer::SERIALIZE_YAML));
     foreach (self::$DI['record_1']->get_caption()->get_fields() as $field) {
         if ($field->get_databox_field()->is_multi()) {
             $tagname = $field->get_name();
             $retrieved = [];
             foreach ($yaml["record"]["description"][$tagname] as $value) {
                 $retrieved[] = (string) $value;
             }
             $values = $field->get_values();
             $this->assertEquals(count($values), count($retrieved));
             foreach ($values as $val) {
                 $this->assertTrue(in_array($val->getValue(), $retrieved));
             }
         } else {
             $tagname = $field->get_name();
             $data = $field->get_values();
             $value = array_pop($data);
             $this->assertEquals($value->getValue(), (string) $yaml["record"]["description"][$tagname]);
         }
     }
 }
 /**
  *
  * @param  Application            $app
  * @param  User                   $user
  * @param  type                   $name
  * @return API_OAuth2_Application
  */
 public static function create(Application $app, User $user = null, $name)
 {
     $sql = '
         INSERT INTO api_applications (
             application_id, creator, created_on, name, last_modified,
             nonce, client_id, client_secret, activated, grant_password
         )
         VALUES (
             null, :usr_id, NOW(), :name, NOW(), :nonce, :client_id,
             :client_secret, :activated, :grant_password
         )';
     $nonce = random::generatePassword(6);
     $client_secret = API_OAuth2_Token::generate_token();
     $client_token = API_OAuth2_Token::generate_token();
     $params = [':usr_id' => $user ? $user->getId() : null, ':name' => $name, ':client_id' => $client_token, ':client_secret' => $client_secret, ':nonce' => $nonce, ':activated' => 1, ':grant_password' => 0];
     $stmt = $app['phraseanet.appbox']->get_connection()->prepare($sql);
     $stmt->execute($params);
     $stmt->closeCursor();
     $application_id = $app['phraseanet.appbox']->get_connection()->lastInsertId();
     $application = new self($app, $application_id);
     if ($user) {
         API_OAuth2_Account::create($app, $user, $application);
     }
     return $application;
 }