Beispiel #1
0
 public function testGet_elemDefault()
 {
     Solar_Config::set('__TEST__', null, $this->_store);
     $expect = '*default*';
     $actual = Solar_Config::get('__TEST__', 'no-such-elem', $expect);
     $this->assertSame($actual, $expect);
 }
Beispiel #2
0
 /**
  * 
  * Starts Solar: loads configuration values and and sets up the environment.
  * 
  * Note that this method is overloaded; you can pass in different
  * value types for the $config parameter.
  * 
  * * `null|false` -- This will not load any new configuration values;
  *   you will get only the default [[Solar::$config]] array values defined
  *   in the Solar class.
  * 
  * * `string` -- The string is treated as a path to a Solar.config.php
  *   file; the return value from that file will be used for [[Solar_Config::load()]].
  * 
  * * `array` -- This will use the passed array for the [[Solar_Config::load()]]
  *   values.
  * 
  * * `object` -- The passed object will be cast as an array, and those
  *   values will be used for [[Solar_Config::load()]].
  * 
  * Here are some examples of starting with alternative configuration parameters:
  * 
  * {{code: php
  *     require_once 'Solar.php';
  * 
  *     // don't load any config values at all
  *     Solar::start();
  * 
  *     // point to a config file (which returns an array)
  *     Solar::start('/path/to/another/config.php');
  * 
  *     // use an array as the config source
  *     $config = array(
  *         'Solar' => array(
  *             'ini_set' => array(
  *                 'error_reporting' => E_ALL,
  *             ),
  *         ),
  *     );
  *     Solar::start($config);
  * 
  *     // use an object as the config source
  *     $config = new StdClass;
  *     $config->Solar = array(
  *         'ini_set' => array(
  *             'error_reporting' => E_ALL,
  *         ),
  *     );
  *     Solar::start($config);
  * }}
  *  
  * @param mixed $config The configuration source value.
  * 
  * @return void
  * 
  * @see Solar::cleanGlobals()
  * 
  */
 public static function start($config = null)
 {
     // don't re-start if we're already running.
     if (Solar::$_status) {
         return;
     }
     // make sure these classes are loaded
     $list = array('Base', 'Class', 'Config', 'File');
     $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Solar';
     foreach ($list as $name) {
         // don't use the autoloader when checking for existence
         if (!class_exists('Solar_' . $name, false)) {
             require $dir . DIRECTORY_SEPARATOR . "{$name}.php";
         }
     }
     // register autoloader
     spl_autoload_register(array('Solar_Class', 'autoload'));
     // clear out registered globals
     if (ini_get('register_globals')) {
         Solar::cleanGlobals();
     }
     // load config values
     Solar_Config::load($config);
     // make sure we have the Solar arch-class configs
     $arch_config = Solar_Config::get('Solar');
     if (!$arch_config) {
         Solar_Config::set('Solar', null, Solar::$_Solar);
     } else {
         Solar_Config::set('Solar', null, array_merge(Solar::$_Solar, (array) $arch_config));
     }
     // set the system directory
     Solar::$system = Solar_Config::get('Solar', 'system');
     // process ini settings from config file
     $settings = Solar_Config::get('Solar', 'ini_set', array());
     foreach ($settings as $key => $val) {
         ini_set($key, $val);
     }
     // user-defined registry entries
     $register = Solar_Config::get('Solar', 'registry_set', array());
     foreach ($register as $name => $list) {
         // make sure we have the class-name and a config
         $list = array_pad((array) $list, 2, null);
         list($spec, $config) = $list;
         // register the item
         Solar_Registry::set($name, $spec, $config);
     }
     // Solar itself needs these default objects registered ...
     $name_class = array('inflect' => 'Solar_Inflect', 'locale' => 'Solar_Locale', 'rewrite' => 'Solar_Uri_Rewrite', 'request' => 'Solar_Request', 'response' => 'Solar_Http_Response');
     // ... but only if not already registered by the user.
     foreach ($name_class as $name => $class) {
         if (!Solar_Registry::exists($name)) {
             Solar_Registry::set($name, $class);
         }
     }
     // run any 'start' hooks
     $hooks = Solar_Config::get('Solar', 'start', array());
     Solar::callbacks($hooks);
     // and we're done!
     Solar::$_status = true;
 }
Beispiel #3
0
 /**
  * ajax_blog_install
  * This ajax action handles blog installation
  *
  * @param $post_data
  * @return string
  */
 public function ajax_blog_install($post_data)
 {
     if ($this->installed) {
         return 'Blog is already installed!';
     }
     if (!empty($post_data['db_type'])) {
         $db_type = ucfirst($post_data['db_type']);
         $adapter = 'Solar_Sql_Adapter_' . $db_type;
     } else {
         return 'DB Type cannot be blank!';
     }
     Solar_Config::set('Solar_Sql', 'adapter', $adapter);
     Solar_Config::set($adapter, 'host', $post_data['db_host']);
     Solar_Config::set($adapter, 'user', $post_data['db_username']);
     Solar_Config::set($adapter, 'pass', $post_data['db_password']);
     Solar_Config::set($adapter, 'name', $post_data['db_name']);
     Solar_Config::set($adapter, 'prefix', $post_data['db_prefix']);
     $adapter = Solar::factory($adapter);
     try {
         $adapter->connect();
     } catch (Exception $e) {
         return 'Cannot connect to database! Please ensure valid DB info.';
     }
     $this->random_str = Foresmo::randomString(18);
     $config_file = Solar::$system . '/config/Solar.config.php';
     $config_content = $this->_getConfigContent($post_data);
     if (($handle = @fopen($config_file, 'w')) !== false) {
         if (@fwrite($handle, $config_content) === false) {
             fclose($handle);
             return "Cannot write to: {$config_file}. Please set the permissions to 777 for this file.";
         } else {
             fclose($handle);
         }
     } else {
         return "Could not open {$config_file}, please ensure that this file exists and is writable.";
     }
     $schema = Solar::$system . '/source/foresmo/Foresmo/Schemas/' . $db_type . '.php';
     $schema_sql = Solar_File::load($schema);
     $schema_sql = str_replace('[prefix]', $post_data['db_prefix'], $schema_sql);
     try {
         $adapter->query($schema_sql);
     } catch (Exception $e) {
         // tables already exist?
     }
     $errors = array();
     $matches = array();
     $ret_str = '';
     $post_data['blog_user'] = trim($post_data['blog_user']);
     if (empty($post_data['blog_password']) == true || empty($post_data['blog_password2']) == true || empty($post_data['blog_user']) == true || empty($post_data['blog_title']) == true || empty($post_data['blog_email']) == true) {
         $errors[] = 'No fields should be left blank!';
     }
     preg_match('/^([.0-9a-z_-]+)@(([0-9a-z-]+\\.)+[0-9a-z]{2,4})$/i', $post_data['blog_email'], $matches);
     if (count($matches) == 0) {
         $errors[] = 'Not a valid email address.';
     }
     if (strlen($post_data['blog_password']) < 7) {
         $errors[] = 'The user password must be seven characters or more';
     }
     if ($post_data['blog_password'] !== $post_data['blog_password2']) {
         $errors[] = 'The user password fields did not match!';
     }
     if (count($errors) > 0) {
         $ret_str .= '<p class="error"><b>Validation Errors:</b></p>';
         foreach ($errors as $error) {
             $ret_str .= '<span class="error">' . $error . '</span><br />';
         }
         return $ret_str;
     }
     $username = $post_data['blog_user'];
     $password = $post_data['blog_password'];
     $password = md5($this->random_str . $password);
     $email = trim($post_data['blog_email']);
     $table = $post_data['db_prefix'] . 'groups';
     $data = array('name' => 'Admin');
     $adapter->insert($table, $data);
     $last_insert_id = $adapter->lastInsertId($table, 'id');
     $permissions = array();
     $table = $post_data['db_prefix'] . 'permissions';
     $data = array('name' => 'create_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'edit_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'delete_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'create_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'edit_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'delete_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $table = $post_data['db_prefix'] . 'groups_permissions';
     foreach ($permissions as $permission) {
         $data = array('group_id' => $last_insert_id, 'permission_id' => (int) $permission);
         $adapter->insert($table, $data);
     }
     $table = $post_data['db_prefix'] . 'users';
     $data = array('group_id' => $last_insert_id, 'username' => $username, 'password' => $password, 'email' => strtolower($email));
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'options';
     $data = array('name' => 'blog_installed', 'type' => 1, 'value' => time());
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_theme', 'type' => 0, 'value' => 'default');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_title', 'type' => 0, 'value' => $post_data['blog_title']);
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_date_format', 'type' => 0, 'value' => 'F j, Y, g:ia');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_timezone', 'type' => 0, 'value' => '-4:00');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_posts_per_page', 'type' => 0, 'value' => 10);
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_comment_link_limit', 'type' => 0, 'value' => 3);
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'posts';
     $data = array('slug' => 'my-first-post', 'content_type' => 1, 'title' => 'My first post!', 'content' => "Welcome to {$post_data['blog_title']}. Look forward to new blog posts soon!", 'user_id' => 1, 'status' => 1, 'pubdate' => time(), 'modified' => time());
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'comments';
     $data = array('post_id' => 1, 'name' => 'Foresmo', 'email' => '*****@*****.**', 'url' => 'http://foresmo.com', 'ip' => sprintf("%u", ip2long('192.168.0.1')), 'content' => 'Congratulations!', 'status' => 1, 'date' => time(), 'type' => 0);
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'tags';
     $data = array('tag' => 'Foresmo', 'tag_slug' => 'foresmo');
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'posts_tags';
     $data = array('post_id' => 1, 'tag_id' => 1);
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'modules';
     $data = array('name' => 'Pages', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Search', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Calendar', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Tags', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Links', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Archives', 'enabled' => 1);
     $adapter->insert($table, $data);
     $data = array('name' => 'Flickr', 'enabled' => 0);
     $adapter->insert($table, $data);
     $data = array('name' => 'Twitter', 'enabled' => 0);
     $adapter->insert($table, $data);
     $data = array('name' => 'Sections', 'enabled' => 0);
     $adapter->insert($table, $data);
     $table = $post_data['db_prefix'] . 'module_info';
     $data = array('module_id' => 3, 'name' => 'start_of_week', 'type' => 0, 'value' => 0);
     $adapter->insert($table, $data);
     if ($db_type == 'Mysql') {
         $data = array('module_id' => 2, 'name' => 'search_adapter', 'type' => 0, 'value' => 'mysql');
     } else {
         $data = array('module_id' => 2, 'name' => 'search_adapter', 'type' => 0, 'value' => 'default');
     }
     $adapter->insert($table, $data);
     $data = array('module_id' => 2, 'name' => 'search_adapter_settings', 'type' => 0, 'value' => 'a:5:{s:7:"Default";a:0:{}s:6:"Google";a:0:{}s:5:"Mysql";a:0:{}s:6:"Lucene";a:0:{}s:5:"Sphinx";a:0:{}}');
     $adapter->insert($table, $data);
     return 'Foresmo installed! Click <a href="/">here</a> to check it out! Also, don\'t forget to change the permissions of the config back to read only.';
 }
Beispiel #4
0
 /**
  * _install
  * Install a new blog
  */
 public function _install()
 {
     $this->_post = $this->_request->post();
     if ($this->installed) {
         $this->error = 'Blog is already installed';
         $this->message = 'Blog is already installed';
         $this->success = false;
         return;
     }
     if (!empty($this->_post['db_type'])) {
         $db_type = ucfirst($this->_post['db_type']);
         $adapter = 'Solar_Sql_Adapter_' . $db_type;
     } else {
         $this->error = 'DB Type cannot be blank';
         $this->message = 'DB Type cannot be blank';
         $this->success = false;
         return;
     }
     Solar_Config::set('Solar_Sql', 'adapter', $adapter);
     Solar_Config::set($adapter, 'host', $this->_post['db_host']);
     Solar_Config::set($adapter, 'user', $this->_post['db_username']);
     Solar_Config::set($adapter, 'pass', $this->_post['db_password']);
     Solar_Config::set($adapter, 'name', $this->_post['db_name']);
     Solar_Config::set($adapter, 'prefix', $this->_post['db_prefix']);
     $adapter = Solar::factory($adapter);
     try {
         $adapter->connect();
     } catch (Exception $e) {
         $this->error = $e->getMessage();
         $this->message = 'Cannot connect to database! Please ensure valid DB info.';
         $this->success = false;
         return;
     }
     $config_file = Solar::$system . '/source/foresmo/config/default.php';
     $config_content = $this->_getConfigContent();
     if (($handle = @fopen($config_file, 'w')) !== false) {
         if (@fwrite($handle, $config_content) === false) {
             fclose($handle);
             $this->error = "Cannot write to: {$config_file}. Please set the permissions to 777 for this file.";
             $this->message = "Cannot write to: {$config_file}. Please set the permissions to 777 for this file.";
             $this->success = false;
             return;
         } else {
             fclose($handle);
         }
     } else {
         $this->error = "Could not open {$config_file}, please ensure that this file exists and is writable by the server.";
         $this->message = "Could not open {$config_file}, please ensure that this file exists and is writable by the server.";
         $this->success = false;
         return;
     }
     $schema = Solar::$system . '/source/foresmo/Foresmo/Schemas/' . $db_type . '.php';
     $schema_sql = Solar_File::load($schema);
     $schema_sql = str_replace('[prefix]', $this->_post['db_prefix'], $schema_sql);
     try {
         $adapter->query($schema_sql);
     } catch (Exception $e) {
         // tables already exist?
         $this->error = $e->getMessage();
         $this->message = 'Error creating database tables, do they already exist?';
         $this->success = false;
         return;
     }
     $errors = array();
     $matches = array();
     $ret_str = '';
     $this->_post['blog_user'] = trim($this->_post['blog_user']);
     if (empty($this->_post['blog_password']) == true || empty($this->_post['blog_password2']) == true || empty($this->_post['blog_user']) == true || empty($this->_post['blog_title']) == true || empty($this->_post['blog_email']) == true) {
         $errors[] = 'No fields should be left blank!';
     }
     preg_match('/^([.0-9a-z_-]+)@(([0-9a-z-]+\\.)+[0-9a-z]{2,4})$/i', $this->_post['blog_email'], $matches);
     if (count($matches) == 0) {
         $errors[] = 'Not a valid email address.';
     }
     if (strlen($this->_post['blog_password']) < 7) {
         $errors[] = 'The user password must be seven characters or more';
     }
     if ($this->_post['blog_password'] !== $this->_post['blog_password2']) {
         $errors[] = 'The user password fields did not match!';
     }
     if (count($errors) > 0) {
         $ret_str .= '<p class="error"><b>Validation Errors:</b></p>';
         foreach ($errors as $error) {
             $ret_str .= '<span class="error">' . $error . '</span><br />';
         }
         $this->error = $ret_str;
         $this->message = $ret_str;
         $this->success = false;
         return;
     }
     $username = $this->_post['blog_user'];
     $password = $this->_post['blog_password'];
     $hasher = new Foresmo_Hashing(8, false);
     $pwhash = $hasher->hashPassword($password);
     $email = trim($this->_post['blog_email']);
     $table = $this->_post['db_prefix'] . 'groups';
     $data = array('name' => 'Admin');
     $adapter->insert($table, $data);
     $last_insert_id = $adapter->lastInsertId($table, 'id');
     $permissions = array();
     $table = $this->_post['db_prefix'] . 'permissions';
     $data = array('name' => 'create_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'edit_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'delete_post');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'create_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'edit_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'delete_page');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'manage_modules');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'blog_settings');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $data = array('name' => 'manage_themes');
     $adapter->insert($table, $data);
     $permissions[] = $adapter->lastInsertId($table, 'id');
     $table = $this->_post['db_prefix'] . 'groups_permissions';
     foreach ($permissions as $permission) {
         $data = array('group_id' => $last_insert_id, 'permission_id' => (int) $permission);
         $adapter->insert($table, $data);
     }
     $table = $this->_post['db_prefix'] . 'users';
     $data = array('group_id' => $last_insert_id, 'username' => $username, 'password' => $pwhash, 'email' => strtolower($email));
     $adapter->insert($table, $data);
     $table = $this->_post['db_prefix'] . 'options';
     $data = array('name' => 'blog_installed', 'type' => 1, 'value' => time());
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_theme', 'type' => 0, 'value' => 'default');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_admin_theme', 'type' => 0, 'value' => 'default');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_admin_theme_options', 'type' => 0, 'value' => serialize(array()));
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_theme_options', 'type' => 0, 'value' => serialize(array()));
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_title', 'type' => 0, 'value' => $this->_post['blog_title']);
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_date_format', 'type' => 0, 'value' => 'F j, Y, g:ia');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_timezone', 'type' => 0, 'value' => 'America/New_York');
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_posts_per_page', 'type' => 0, 'value' => 10);
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_uid', 'type' => 0, 'value' => sha1($_SERVER['HTTP_HOST'] . substr(md5(uniqid(mt_rand(), TRUE)), 0, 12)));
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_comment_link_limit', 'type' => 0, 'value' => 3);
     $adapter->insert($table, $data);
     $data = array('name' => 'blog_comment_default_status', 'type' => 0, 'value' => 3);
     $adapter->insert($table, $data);
     $table = $this->_post['db_prefix'] . 'posts';
     $data = array('slug' => 'my-first-post', 'content_type' => 1, 'title' => 'My first post!', 'content' => "Welcome to {$this->_post['blog_title']}. Look forward to new blog posts soon!", 'excerpt' => "Welcome to {$this->_post['blog_title']}. Look forward to new blog posts soon!", 'user_id' => 1, 'status' => 1, 'pubdate' => time(), 'modified' => time());
     $adapter->insert($table, $data);
     $table = $this->_post['db_prefix'] . 'comments';
     $data = array('post_id' => 1, 'name' => 'Foresmo', 'email' => '*****@*****.**', 'url' => 'http://foresmo.com', 'ip' => sprintf("%u", ip2long('192.168.0.1')), 'content' => 'Congratulations!', 'status' => 1, 'date' => time(), 'type' => 0);
     $adapter->insert($table, $data);
     $table = $this->_post['db_prefix'] . 'tags';
     $data = array('tag' => 'Foresmo', 'tag_slug' => 'foresmo');
     $adapter->insert($table, $data);
     $table = $this->_post['db_prefix'] . 'posts_tags';
     $data = array('post_id' => 1, 'tag_id' => 1);
     $adapter->insert($table, $data);
     $this->success = true;
     $this->message = 'Foresmo installed! Click <a href="/">here</a> to check it out! Also, don\'t forget to change the permissions of the config back to read only.';
 }