Example #1
0
 public function delete($args)
 {
     $posttype = array_shift($args);
     $id = array_shift($args);
     $post = current(R::findOrDispense('post', 'id = :id', ['id' => $id]));
     if ($post->getID()) {
         R::trash($post);
     }
     $this->redirect(PACKAGE_URL . "posts/view/{$posttype}");
 }
Example #2
0
 function create_field($post_type, $field_name, $field_type, $show_on_front = false)
 {
     $post_meta = current(R::findOrDispense('postmeta', 'post_type = :posttype AND fieldname = :field', ['posttype' => $post_type, 'field' => $field_name]));
     if (!$post_meta->getID()) {
         $post_meta->post_type = $post_type;
         $post_meta->fieldname = $field_name;
     }
     $post_meta->type = $field_type;
     $post_meta->show_on_front = $show_on_front;
     R::store($post_meta);
 }
Example #3
0
 public function create($filename, \App_Config_Ini $config, $template, $mtime)
 {
     //Add the meta config to this config
     $meta_config = $this->get_meta_config();
     //First load the page that matches the slug
     $existing = current(R::findOrDispense('page', 'slug = :slug', ['slug' => $config->page->slug]));
     if ($existing->getID() && $existing->gen_filename != $filename) {
         throw new Exception("A page already exists inside the database with the same slug but built with the onscreen page creator");
         return false;
     }
     $page = current(R::findOrDispense('page', 'gen_filename = :file', ['file' => $filename]));
     /* @var $page \RedBeanPHP\OODBBean */
     /**
      * Creates the page database object
      */
     if (!$page->getID()) {
         // The Page does not exist
         $page->gen_filename = $filename;
         $page->title = $config->page->title;
         $page->description = $config->page->description;
     } else {
         $old_slug = $page->slug;
         $meta = new Meta_Generator($meta_config);
         $page->title = !empty($config->page->title) ? $config->page->title : $meta->get_title($page->slug);
         $page->description = !empty($config->page->description) ? $config->page->description : $meta->get_description($page->slug);
     }
     $page->slug = $config->page->slug;
     $page->layout = $this->theme->load_layout($config->page->layout ? $config->page->layout : 'layouts.default.twig', $this->theme->theme)->file;
     /*
      * Create the template file in the theme
      */
     $page->template = $this->theme->generate_template($filename, $template, $mtime);
     R::store($page);
     // Create a route for this page for loading
     $r_func = function ($slug) use($page) {
         //Load the front end instance loader
         $theme = Theme_Loader::get_instance();
         $theme->set_theme(THEME);
         G2_User::init();
         if (G()->logged_in()) {
             $theme->logged_in();
         }
         $_SESSION['theme'] = $theme;
         //Render the theme
         if ($theme->page_exists($page->slug)) {
             $theme->render($page->slug);
         }
     };
     $route = new Router();
     if (isset($old_slug)) {
         $route->delete_route($old_slug);
     }
     $route->create_route($page->slug, $r_func);
 }
Example #4
0
 function create_route($slug, $callable, $allow_params = false)
 {
     // Create the route in the database
     //Serialize the callable object
     $serializer = new Serializer();
     $s_closure = $serializer->serialize($callable);
     $hash = md5($s_closure);
     if (R::findOne('route', 'hash = :hash', ['hash' => $hash])) {
         return;
     }
     $route = current(R::findOrDispense('route', 'slug = :slug', ['slug' => $slug]));
     $route->hash = $hash;
     $route->slug = $slug;
     $route->closure = $s_closure;
     $route->allow_params = $allow_params;
     R::store($route);
     // Store
 }
Example #5
0
 function page_crud()
 {
     if (!empty($_POST)) {
         //Load an existing page if it exists
         $page = current(R::findOrDispense('page', 'id = :id', ['id' => $_POST['page_id']]));
         if (!$page->getID()) {
             $page->slug = $_POST['slug'];
         } else {
             $old = clone $page;
         }
         $page->description = $_POST['description'];
         $page->title = $_POST['title'];
         $page->template = $_POST['template'];
         $page->layout = $_POST['layout'];
         R::store($page);
         Audit::create($old, $page, 'Page details Saved');
         $this->redirect(BASE_URL . $page->slug);
     }
 }
Example #6
0
 function load()
 {
     $c = $this->c();
     if ($this->replace_content_only) {
         $starting_html = $c->html();
     } else {
         $starting_html = $c->saveHTML();
     }
     $page_id = $this->area->page->id;
     $area_name = $this->area->area_name;
     $field_type = $this->c()->getAttribute('mvc-type') ? $this->c()->getAttribute('mvc-type') : 'default';
     //$starting_html = $this->area->html;
     $this->area = current(R::findOrDispense('area', 'page_id = :page AND area_name = :field AND type = :type', ['page' => $page_id, 'field' => $area_name, 'type' => $field_type]));
     if (!$this->area->getID()) {
         $this->area->area_name = $area_name;
         $this->area->html = $starting_html;
         $this->area->type = $field_type;
         $this->area->page = R::load('page', $page_id);
         $this->save();
     }
     return $this->area;
 }
Example #7
0
 public function create_pages()
 {
     //Load Page files
     $files = Mvc_Functions::directoryToArray($this->theme . "/pages", true);
     //		var_dump($files);exit;
     //Loop throught the files and read theme seperately
     foreach ($files as $file) {
         if (is_dir($file)) {
             continue;
         }
         $id = $file . "-" . BASE_URL;
         //Check file last modified before loading
         $file_mod_time = current(R::findOrDispense('filem', 'filename = :file', ['file' => $id]));
         if (!$file_mod_time->getID()) {
             $file_mod_time->filename = $id;
             $file_mod_time->last_modified = filemtime($file);
             R::store($file_mod_time);
         } else {
             //				debug($file . ' === ' . filemtime($file) . ' ' . $file_mod_time->last_modified);
             if (filemtime($file) > $file_mod_time->last_modified) {
                 $file_mod_time->last_modified = filemtime($file);
                 R::store($file_mod_time);
             } else {
                 continue;
             }
         }
         list($config, $template) = explode("==", file_get_contents($file));
         list($config, $template) = preg_split('/(==\\n)|(==\\r)/', file_get_contents($file));
         //						parent::$lines = preg_split('/\r\n|\n|\r/', trim(file_get_contents('file.txt')));
         $config = new App_Config_Ini($config);
         if ($config->type) {
             $classname = "Theme_Type_" . ucfirst($config->type);
             if (class_exists($classname)) {
                 $class = new $classname($this);
                 if ($class instanceof Theme_Type) {
                     $class->create($file, $config, $template, filemtime($file));
                 }
             }
         } else {
             $class = new Theme_Type_Page($this);
             $class->create($file, $config, $template, filemtime($file));
         }
     }
     //Remove all pages saved in database that does not exist inside the pages folder
     $this->remove_old_pages();
 }
Example #8
0
 function load_area_oild($id, $area_name, $field_type, $starting_html)
 {
     $bean = current(R::findOrDispense('area', 'layout_id = :layout AND area_name = :field', ['layout' => $id, 'field' => $area_name]));
     if (!$bean->getID()) {
         $bean->area_name = $area_name;
         $bean->html = $starting_html;
         $bean->type = $field_type;
         $bean->page_id = $this->page->id;
         $this->layout->ownArea[] = $bean;
         R::store($this->layout);
     }
     return $bean;
 }
 /**
  * Begin testing.
  * This method runs the actual test pack.
  * 
  * @return void
  */
 public function testFinding()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     $a = new RedBean_AssociationManager($toolbox);
     $page = $redbean->dispense("page");
     $page->name = "John's page";
     $idpage = $redbean->store($page);
     $page2 = $redbean->dispense("page");
     $page2->name = "John's second page";
     $idpage2 = $redbean->store($page2);
     $a->associate($page, $page2);
     $pageOne = $redbean->dispense("page");
     $pageOne->name = "one";
     $pageMore = $redbean->dispense("page");
     $pageMore->name = "more";
     $pageEvenMore = $redbean->dispense("page");
     $pageEvenMore->name = "evenmore";
     $pageOther = $redbean->dispense("page");
     $pageOther->name = "othermore";
     set1toNAssoc($a, $pageOther, $pageMore);
     set1toNAssoc($a, $pageOne, $pageMore);
     set1toNAssoc($a, $pageOne, $pageEvenMore);
     asrt(count($redbean->find("page", array(), " name LIKE '%more%' ", array())), 3);
     asrt(count($redbean->find("page", array(), " name LIKE :str ", array(":str" => '%more%'))), 3);
     asrt(count($redbean->find("page", array(), array(" name LIKE :str ", array(":str" => '%more%')))), 3);
     asrt(count($redbean->find("page", array(), " name LIKE :str ", array(":str" => '%mxore%'))), 0);
     asrt(count($redbean->find("page", array("id" => array(2, 3)))), 2);
     $bean = $redbean->dispense("wine");
     $bean->name = "bla";
     for ($i = 0; $i < 10; $i++) {
         $redbean->store($bean);
     }
     $redbean->find("wine", array("id" => 5));
     //  Finder:where call RedBean_OODB::convertToBeans
     $bean2 = $redbean->load("anotherbean", 5);
     asrt($bean2->id, 0);
     $keys = $adapter->getCol("SELECT id FROM page WHERE " . $writer->esc('name') . " LIKE '%John%'");
     asrt(count($keys), 2);
     $pages = $redbean->batch("page", $keys);
     asrt(count($pages), 2);
     $p = R::findLast('page');
     pass();
     $row = R::getRow('select * from page ');
     asrt(is_array($row), TRUE);
     asrt(isset($row['name']), TRUE);
     // Test findAll -- should not throw an exception
     asrt(count(R::findAll('page')) > 0, TRUE);
     asrt(count(R::findAll('page', ' ORDER BY id ')) > 0, TRUE);
     $beans = R::findOrDispense("page");
     asrt(count($beans), 6);
     asrt(is_null(R::findLast('nothing')), TRUE);
     try {
         R::find('bean', ' id > 0 ', 'invalid bindings argument');
         fail();
     } catch (RedBean_Exception_Security $exception) {
         pass();
     }
 }
Example #10
0
try {
    R::exec("select * from job limit ? ", array(1));
    pass();
} catch (Exception $e) {
    fail();
}
try {
    R::exec("select * from job limit :l ", array(":l" => 1));
    pass();
} catch (Exception $e) {
    fail();
}
testpack("Test findOrDispense");
$person = R::findOrDispense("person", " job = ? ", array("developer"));
asrt(count($person) > 0, true);
$person = R::findOrDispense("person", " job = ? ", array("musician"));
asrt(count($person) > 0, true);
$musician = array_pop($person);
asrt(intval($musician->id), 0);
testpack("Test count and wipe");
$page = R::dispense("page");
$page->name = "ABC";
R::store($page);
$n1 = R::count("page");
$page = R::dispense("page");
$page->name = "DEF";
R::store($page);
$n2 = R::count("page");
asrt($n1 + 1, $n2);
R::wipe("page");
asrt(R::count("page"), 0);
 /**
  * Test parameter binding with PDO.
  * 
  * @return void
  */
 public function testPDOParameterBinding()
 {
     $toolbox = R::$toolbox;
     $adapter = $toolbox->getDatabaseAdapter();
     $writer = $toolbox->getWriter();
     $redbean = $toolbox->getRedBean();
     $pdo = $adapter->getDatabase();
     R::$adapter->getDatabase()->setUseStringOnlyBinding(TRUE);
     try {
         R::getAll("select * from job limit ? ", array(1));
         fail();
     } catch (Exception $e) {
         pass();
     }
     try {
         R::getAll("select * from job limit :l ", array(":l" => 1));
         fail();
     } catch (Exception $e) {
         pass();
     }
     try {
         R::exec("select * from job limit ? ", array(1));
         fail();
     } catch (Exception $e) {
         pass();
     }
     try {
         R::exec("select * from job limit :l ", array(":l" => 1));
         fail();
     } catch (Exception $e) {
         pass();
     }
     R::$adapter->getDatabase()->setUseStringOnlyBinding(FALSE);
     try {
         R::getAll("select * from job limit ? ", array(1));
         pass();
     } catch (Exception $e) {
         print_r($e);
         fail();
     }
     try {
         R::getAll("select * from job limit :l ", array(":l" => 1));
         pass();
     } catch (Exception $e) {
         fail();
     }
     try {
         R::exec("select * from job limit ? ", array(1));
         pass();
     } catch (Exception $e) {
         fail();
     }
     try {
         R::exec("select * from job limit :l ", array(":l" => 1));
         pass();
     } catch (Exception $e) {
         fail();
     }
     testpack("Test findOrDispense");
     $person = R::findOrDispense("person", " job = ? ", array("developer"));
     asrt(count($person) > 0, TRUE);
     $person = R::findOrDispense("person", " job = ? ", array("musician"));
     asrt(count($person) > 0, TRUE);
     $musician = array_pop($person);
     asrt(intval($musician->id), 0);
     try {
         $adapter->exec("an invalid query");
         fail();
     } catch (RedBean_Exception_SQL $e) {
         pass();
     }
     asrt((int) $adapter->getCell("SELECT 123"), 123);
     asrt((int) $adapter->getCell("SELECT ?", array("987")), 987);
     asrt((int) $adapter->getCell("SELECT ?+?", array("987", "2")), 989);
     asrt((int) $adapter->getCell("SELECT :numberOne+:numberTwo", array(":numberOne" => 42, ":numberTwo" => 50)), 92);
     $pair = $adapter->getAssoc("SELECT 'thekey','thevalue' ");
     asrt(is_array($pair), TRUE);
     asrt(count($pair), 1);
     asrt(isset($pair["thekey"]), TRUE);
     asrt($pair["thekey"], "thevalue");
     testpack('Test whether we can properly bind and receive NULL values');
     asrt($adapter->getCell('SELECT :nil ', array(':nil' => 'NULL')), 'NULL');
     asrt($adapter->getCell('SELECT :nil ', array(':nil' => NULL)), NULL);
     asrt($adapter->getCell('SELECT ? ', array('NULL')), 'NULL');
     asrt($adapter->getCell('SELECT ? ', array(NULL)), NULL);
 }