function xanth_db_install_user()
{
    //Users
    xanth_db_query("\r\n\t\tCREATE TABLE user (\r\n\t\tid INT UNSIGNED AUTO_INCREMENT NOT NULL,\r\n\t\tusername VARCHAR(32) NOT NULL,\r\n\t\tpassword VARCHAR(64) NOT NULL,\r\n\t\temail VARCHAR(128) NOT NULL,\r\n\t\tcookie_token VARCHAR(64) NOT NULL,\r\n\t\tPRIMARY KEY (id),\r\n\t\tUNIQUE(username),\r\n\t\tINDEX(username),\r\n\t\tUNIQUE(email)\r\n\t\t)TYPE=InnoDB");
    //User to role
    xanth_db_query("\r\n\t\tCREATE TABLE user_to_role (\r\n\t\tuserid INT UNSIGNED NOT NULL,\r\n\t\troleName VARCHAR(32) NOT NULL,\r\n\t\tUNIQUE(userid,roleName),\r\n\t\tINDEX(userid),\r\n\t\tINDEX(roleName),\r\n\t\tFOREIGN KEY (userid) REFERENCES user(id) ON DELETE CASCADE,\r\n\t\tFOREIGN KEY (roleName) REFERENCES role(name) ON DELETE CASCADE\r\n\t\t)TYPE=InnoDB");
    $user = new xUser('', 'admin', '*****@*****.**');
    $user->insert('pass');
    $user->add_in_role('administrator');
    //create a box for login
    $login_box = new xBox('login_box', 'Login', NULL, 'Full Html', 0, 'sidebar left');
    $login_box->insert();
}
 function render()
 {
     $theme = xTheme::get_default();
     //retrieve content
     $page_content = xanth_invoke_mono_hook(MONO_HOOK_PAGE_CONTENT_CREATE, $this->xanthpath->base_path, array($this->xanthpath->resource_id));
     if ($page_content === NULL) {
         $page_content = new xPageContent('Page not found', "<b>Page not found</b>");
     }
     $logs = '';
     $log_entries = xanth_get_screen_log();
     //display log messages
     if (!empty($log_entries)) {
         $logs .= '<table border="1" width="90%"><tr><td><ul>';
         foreach ($log_entries as $entry) {
             $logs .= '<li>' . $entry->level . ' ' . $entry->component . ' ' . htmlspecialchars($entry->message) . ' ' . $entry->filename . '@' . $entry->line . '</li>';
         }
         $logs .= '</ul></td></tr></table>' . "\n";
     }
     $page_content->body = $logs . $page_content->body;
     //retrieve areas
     $areas = xThemeArea::find_all();
     $this->areas = array();
     $this->boxes = array();
     //retrieve innermost elements
     foreach ($areas as $area) {
         $xboxes = xBox::find($area->name);
         $this->boxes[$area->name] = array();
         foreach ($xboxes as $xbox) {
             //retrieve box view
             $this->boxes[$area->name][] = $xbox->render();
         }
         //Generate area view (not using view mode)
         $this->areas[$area->name] = $area->render($this->boxes[$area->name], $page_content->body);
     }
     //construct metadata array
     $this->header = array();
     if (empty($page_content->description)) {
         $this->header['description'] = xSettings::get('site_description');
     } else {
         $this->header['description'] = $page_content->description;
     }
     if (empty($page_content->keywords)) {
         $this->header['keywords'] = xSettings::get('site_keywords');
     } else {
         $this->header['keywords'] = $page_content->keywords;
     }
     //retrieve the full page
     $this->header['title'] = xSettings::get('site_name') . ' | ' . $page_content->title;
     $page_ready_to_print = eval($theme->get_view_mode_procedure('page'));
     return $page_ready_to_print;
 }
function xanth_box_admin_box($hook_primary_id, $hook_secondary_id, $arguments)
{
    if (!xUser::check_current_user_access('manage box')) {
        return xSpecialPage::access_denied();
    }
    $boxes = xBox::find_all();
    $output = "<table>\n";
    $output .= "<tr><th>Name</th><th>Title</th><th>Content format</th><th>Area</th><th>Edit</th><th>Delete</th></tr>\n";
    foreach ($boxes as $box) {
        $output .= "<tr><td>" . $box->name . "</td><td>" . $box->title . "</td><td>" . $box->content_format . "</td>\r\n\t\t<td>" . $box->area . "</td><td>Edit</td><td>Delete</td></tr>";
    }
    $output .= "</table>\n";
    return new xPageContent('Admin Boxes', $output);
}
function xanth_db_install_admin()
{
    $box = new xBox('admin_menu', 'Admin', NULL, 'Full Html', FALSE, 'sidebar left');
    $box->insert();
}
 /**
  *
  */
 function find_all()
 {
     return xBox::find();
 }