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")); }
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"); }
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) { } }
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(); }
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 } } }
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); }
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; }
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); }
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);
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); } }
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; }
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; }