Added data/basic add functionality
This commit is contained in:
parent
844d37ad58
commit
e91625300f
@ -30,14 +30,35 @@ abstract class Controller extends \miniMVC\Controller {
|
||||
parent::__construct();
|
||||
$this->load_model('meta\model');
|
||||
$this->load_model('meta\user_model');
|
||||
|
||||
$this->session =& \miniMVC\Session::get_instance();
|
||||
|
||||
// Check if user is logged in
|
||||
$this->check_login_status();
|
||||
|
||||
$this->page->build_header();
|
||||
}
|
||||
|
||||
/**
|
||||
* Require user login for access
|
||||
*/
|
||||
private function check_login_status()
|
||||
{
|
||||
if ( ! isset($this->session->uid))
|
||||
{
|
||||
// Redirect to login
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Destruct controller and build page footer
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
$this->page->set_foot_js_group('js');
|
||||
$this->page->build_footer();
|
||||
}
|
||||
|
||||
|
@ -134,4 +134,14 @@ define('DEFAULT_JS_GROUP', "js");
|
||||
*/
|
||||
define('SHOW_DEBUG_BACKTRACE', TRUE);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Gzip compress
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Whether or not use gzip compression on page output
|
||||
|
|
||||
*/
|
||||
define('GZ_COMPRESS', FALSE);
|
||||
|
||||
// End of config.php
|
@ -31,17 +31,18 @@
|
||||
|
||||
return array(
|
||||
// Default Paths
|
||||
'default_controller' => 'welcome',
|
||||
'default_module' => 'meta',
|
||||
'genre' => 'meta/genre/index',
|
||||
'genre/add' => 'meta/genre/add',
|
||||
'category' => 'meta/category/index',
|
||||
'category/add' => 'meta/category/add',
|
||||
'category/detail' => 'meta/category/detail',
|
||||
'section' => 'meta/section/index',
|
||||
'section/add' => 'meta/section/add',
|
||||
'section/detail' => 'meta/section/detail',
|
||||
'404_route' => '',
|
||||
'default_controller' => 'welcome',
|
||||
'default_module' => 'meta',
|
||||
'genre' => 'meta/genre/index',
|
||||
'genre/add' => 'meta/genre/add',
|
||||
'category' => 'meta/category/index',
|
||||
'category/add' => 'meta/category/add',
|
||||
'category/detail' => 'meta/category/detail',
|
||||
'section' => 'meta/section/index',
|
||||
'section/add' => 'meta/section/add',
|
||||
'data/add' => 'meta/data/add',
|
||||
'data/update' => 'meta/data/update',
|
||||
'404_route' => '',
|
||||
);
|
||||
|
||||
// End of routes.php
|
@ -58,7 +58,7 @@ class category extends meta\controller {
|
||||
}
|
||||
|
||||
// Render the basic page
|
||||
$this->detail(-1);
|
||||
$this->detail($this->model->get_last_id('category'));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,7 +78,8 @@ class category extends meta\controller {
|
||||
|
||||
$data = array(
|
||||
'category' => $this->model->get_category_by_id($id),
|
||||
'sections' => $this->model->get_sections($id),
|
||||
'sections' => $this->model->get_category_outline_data($id),
|
||||
'genre' => $this->model->get_genre_by_category($id),
|
||||
'category_id' => $id
|
||||
);
|
||||
|
||||
|
66
app/modules/meta/controllers/data.php
Normal file
66
app/modules/meta/controllers/data.php
Normal file
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* meta
|
||||
*
|
||||
* Hierarchial data tool
|
||||
*
|
||||
* @package meta
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012
|
||||
* @link https://github.com/aviat4ion/meta
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Data Controller
|
||||
*
|
||||
* @package meta
|
||||
*/
|
||||
class data extends meta\controller {
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* View section data
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Add data
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
$section_id = (int) $_POST['section_id'];
|
||||
//$old_data = $this->model->get_data($section_id);
|
||||
|
||||
|
||||
$keys = filter_var_array($_POST['name'], FILTER_SANITIZE_STRING);
|
||||
$vals = filter_var_array($_POST['val'], FILTER_SANITIZE_STRING);
|
||||
|
||||
//echo miniMVC\to_string($_POST);
|
||||
|
||||
$data = array_combine($keys, $vals);
|
||||
|
||||
$res = /*(empty($old_data))
|
||||
?*/ $this->model->add_data($section_id, $data);
|
||||
//: FALSE;
|
||||
|
||||
($res)
|
||||
? $this->page->set_message('success', 'Added data')
|
||||
: $this->page->set_message('error', 'Data already exists');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// End of data.php
|
@ -31,9 +31,26 @@ class section extends meta\controller {
|
||||
/**
|
||||
* Default controller method
|
||||
*/
|
||||
public function index()
|
||||
public function index($id=0)
|
||||
{
|
||||
$this->detail();
|
||||
if ($id === 0)
|
||||
{
|
||||
$id = (int) miniMVC\get_last_segment();
|
||||
}
|
||||
|
||||
if ($id === 0)
|
||||
{
|
||||
miniMVC\show_404();
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'section' => $this->model->get_section_by_id($id),
|
||||
'sdata' => $this->model->get_data($id),
|
||||
'p' => $this->model->get_path_by_section($id),
|
||||
'section_id' => $id
|
||||
);
|
||||
|
||||
$this->load_view('section_detail', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,33 +75,8 @@ class section extends meta\controller {
|
||||
}
|
||||
|
||||
// Render the basic page
|
||||
$this->detail(-1);
|
||||
$this->index($this->model->get_last_id('section'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the sections / editing options for a category
|
||||
*/
|
||||
public function detail($id = 0)
|
||||
{
|
||||
if ($id === 0)
|
||||
{
|
||||
$id = (int) miniMVC\get_last_segment();
|
||||
}
|
||||
|
||||
if ($id === 0)
|
||||
{
|
||||
miniMVC\show_404();
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'section' => $this->model->get_section_by_id($id),
|
||||
'data' => $this->model->get_data($id),
|
||||
'section_id' => $id
|
||||
);
|
||||
|
||||
$this->load_view('section_detail', $data);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// End of section.php
|
@ -57,6 +57,16 @@ class welcome extends \meta\controller {
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Logout
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Display an outline of the data for a table of contents
|
||||
*/
|
||||
|
@ -47,6 +47,8 @@ class model extends \miniMVC\Model {
|
||||
$this->db =& \miniMVC\db::get_instance();
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Data Manipulation
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
@ -104,7 +106,7 @@ class model extends \miniMVC\Model {
|
||||
// for databases that do not support
|
||||
// grabbing result counts (SQLite / Firebird)
|
||||
$array = $query->fetchAll();
|
||||
if (count($array) === 0)
|
||||
if (count($array)< 1)
|
||||
{
|
||||
$this->db->set('genre', $genre)
|
||||
->insert('genre');
|
||||
@ -118,21 +120,6 @@ class model extends \miniMVC\Model {
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Rename a genre
|
||||
*
|
||||
* @param int
|
||||
* @param string
|
||||
*/
|
||||
public function update_genre($genre_id, $genre)
|
||||
{
|
||||
$this->db->set('genre', $genre)
|
||||
->where('id', $genre_id)
|
||||
->update('genre');
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Add category to genre
|
||||
*
|
||||
@ -146,13 +133,14 @@ class model extends \miniMVC\Model {
|
||||
$query = $this->db->from('category')
|
||||
->where('genre_id', $genre_id)
|
||||
->where('category', $cat)
|
||||
->limit(1)
|
||||
->get();
|
||||
|
||||
// Fetch the data as a workaround
|
||||
// for databases that do not support
|
||||
// grabbing result counts (SQLite / Firebird)
|
||||
$array = $query->fetchAll();
|
||||
if (count($array) === 0)
|
||||
if (count($array)< 1)
|
||||
{
|
||||
$this->db->set('category', $cat)
|
||||
->set('genre_id', $genre_id)
|
||||
@ -166,21 +154,6 @@ class model extends \miniMVC\Model {
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Rename a category
|
||||
*
|
||||
* @param int
|
||||
* @param string
|
||||
*/
|
||||
public function update_category($cat_id, $category)
|
||||
{
|
||||
$this->db->set('category', $category)
|
||||
->where('id', (int) $cat_id)
|
||||
->update('category');
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Add a section to a category
|
||||
*
|
||||
@ -189,24 +162,27 @@ class model extends \miniMVC\Model {
|
||||
*/
|
||||
public function add_section($section, $category_id)
|
||||
{
|
||||
$this->db->set('section', $section)
|
||||
->set('category_id', (int) $category_id)
|
||||
->insert('section');
|
||||
}
|
||||
// Check if the section exists
|
||||
$q = $this->db->from('section')
|
||||
->where('category_id', $category_id)
|
||||
->where('section', $section)
|
||||
->limit(1)
|
||||
->get();
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// Fetch the data as a workaround
|
||||
// for databases that do not support
|
||||
// grabbing result counts (SQLite / Firebird)
|
||||
$array = $q->fetchAll();
|
||||
if (count($array) < 1)
|
||||
{
|
||||
$this->db->set('section', $section)
|
||||
->set('category_id', (int) $category_id)
|
||||
->insert('section');
|
||||
|
||||
/**
|
||||
* Rename a section
|
||||
*
|
||||
* @param int
|
||||
* @param string
|
||||
*/
|
||||
public function update_section($section_id, $section)
|
||||
{
|
||||
$this->db->set('section', $section)
|
||||
->where('id', (int) $section_id)
|
||||
->update('section');
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
@ -219,13 +195,40 @@ class model extends \miniMVC\Model {
|
||||
*/
|
||||
public function add_data($section_id, $data)
|
||||
{
|
||||
// Convert the data to json for storage
|
||||
$data_str = json_encode($data);
|
||||
foreach($data as $key => $val)
|
||||
{
|
||||
// See if the data exists
|
||||
$q = $this->db->from('data')
|
||||
->where('section_id', $section_id)
|
||||
->where('key', $key)
|
||||
->get();
|
||||
|
||||
// Save the data
|
||||
$this->db->set('data', $data_str)
|
||||
->set('section_id', (int) $section_id)
|
||||
->insert('data');
|
||||
if ($this->db->num_rows() > 0) return FALSE;
|
||||
|
||||
// Save the data
|
||||
$this->db->set('key', $key)
|
||||
->set('value', $val)
|
||||
->set('section_id', (int) $section_id)
|
||||
->insert('data');
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Rename a genre/category/section
|
||||
*
|
||||
* @param string
|
||||
* @param int
|
||||
* @param string
|
||||
*/
|
||||
public function update($type, $id, $name)
|
||||
{
|
||||
$this->db->set($type, $name)
|
||||
->where('id', (int) $id)
|
||||
->update('genre');
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
@ -248,6 +251,49 @@ class model extends \miniMVC\Model {
|
||||
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// ! Data Retrieval
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the id of the last item of the type
|
||||
*
|
||||
* @param string $type
|
||||
* @return int
|
||||
*/
|
||||
public function get_last_id($type)
|
||||
{
|
||||
$query = $this->db->select('id')
|
||||
->from($type)
|
||||
->order_by('id', 'DESC')
|
||||
->limit(1)
|
||||
->get();
|
||||
|
||||
$r = $query->fetch(\PDO::FETCH_ASSOC);
|
||||
|
||||
return $r['id'];
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get breadcrumb data for section
|
||||
*
|
||||
* @param section_id
|
||||
* @return array
|
||||
*/
|
||||
public function get_path_by_section($section_id)
|
||||
{
|
||||
$query = $this->db->select('genre, genre_id, category, category_id')
|
||||
->from('section s')
|
||||
->join('category c', 'c.id=s.category_id')
|
||||
->join('genre g', 'g.id=c.genre_id')
|
||||
->where('s.id', $section_id)
|
||||
->get();
|
||||
|
||||
return $query->fetch(\PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
@ -313,6 +359,27 @@ class model extends \miniMVC\Model {
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the genre name by category id
|
||||
*
|
||||
* @param int
|
||||
* @return array
|
||||
*/
|
||||
public function get_genre_by_category($cat_id)
|
||||
{
|
||||
$query = $this->db->select('g.id, genre')
|
||||
->from('genre g')
|
||||
->join('category c', 'c.genre_id=g.id', 'inner')
|
||||
->where('c.id', (int)$cat_id)
|
||||
->get();
|
||||
|
||||
$row = $query->fetch(\PDO::FETCH_ASSOC);
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Gets the name of the section from its id
|
||||
*
|
||||
@ -393,14 +460,64 @@ class model extends \miniMVC\Model {
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$query = $this->db->select('id, data')
|
||||
$query = $this->db->select('id, key, value')
|
||||
->from('data')
|
||||
->where('section_id', (int) $section_id)
|
||||
->get();
|
||||
|
||||
while($row = $query->fetch(\PDO::FETCH_ASSOC))
|
||||
{
|
||||
$data[$row['id']] = json_decode($row['data'], TRUE);
|
||||
$data[$row['id']] = array($row['key'] => str_replace("\n", "<br />", $row['value']));
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get sections and data for a general data outline
|
||||
*
|
||||
* @param int $category_id
|
||||
* @return array
|
||||
*/
|
||||
public function get_category_outline_data($category_id)
|
||||
{
|
||||
// Get the sections
|
||||
$s_query = $this->db->from('section')
|
||||
->where('category_id', (int) $category_id)
|
||||
->get();
|
||||
|
||||
$sections = array();
|
||||
|
||||
while($row = $s_query->fetch(\PDO::FETCH_ASSOC))
|
||||
{
|
||||
$sections[$row['id']] = $row['section'];
|
||||
}
|
||||
|
||||
// Get the data for the sections
|
||||
$d_array = array();
|
||||
|
||||
if ( ! empty($sections))
|
||||
{
|
||||
$d_query = $this->db->from('data')
|
||||
->where_in('section_id', array_keys($sections))
|
||||
->get();
|
||||
|
||||
while($row = $d_query->fetch(\PDO::FETCH_ASSOC))
|
||||
{
|
||||
$d_array[$row['section_id']][$row['key']] = str_replace("\n", "<br />", $row['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// Reorganize the data
|
||||
$data = array();
|
||||
|
||||
foreach($sections as $section_id => $section)
|
||||
{
|
||||
$data[$section_id] = (isset($d_array[$section_id]))
|
||||
? array($section, $d_array[$section_id])
|
||||
: $section;
|
||||
}
|
||||
|
||||
return $data;
|
||||
|
@ -66,7 +66,27 @@ class user_model extends \miniMVC\Model {
|
||||
*/
|
||||
public function add_user($username, $pass1, $pass2)
|
||||
{
|
||||
// Check for the existing username
|
||||
$query = $this->db->select('username')
|
||||
->from('user')
|
||||
->where('username', $username)
|
||||
->get();
|
||||
|
||||
$res = $query->fetch(\PDO::FETCH_ASSOC);
|
||||
|
||||
if (empty($res)) return FALSE;
|
||||
|
||||
// Verify that passwords match
|
||||
if ($pass1 !== $pass2) return FALSE;
|
||||
|
||||
// Add user
|
||||
$hashed = $this->bcrypt->hash($pass1);
|
||||
|
||||
$this->db->set('username', $username)
|
||||
->set('hash', $hashed)
|
||||
->insert('user');
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
@ -1,15 +1,12 @@
|
||||
<h3><?= $category ?></h3>
|
||||
<h2><?= $category ?></h2>
|
||||
|
||||
<h4>Category Sections</h4>
|
||||
<ul class="list">
|
||||
<?php foreach($sections as $id => $section): ?>
|
||||
<li><a href="<?= miniMVC\site_url("section/detail/{$id}") ?>"><?= $section ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<p class="breadcrumbs">
|
||||
<a href="<?= miniMVC\site_url('') ?>">Genres</a> > <a href="<?= miniMVC\site_url('genres/detail/'.$genre['id']) ?>"><?= $genre['genre'] ?></a> > <?= $category ?>
|
||||
</p>
|
||||
|
||||
<form action="<?= miniMVC\site_url("section/add") ?>" method="post">
|
||||
<fieldset>
|
||||
<lengend>Add Section</lengend>
|
||||
<legend>Add Section</legend>
|
||||
<dl>
|
||||
<!-- Weird tag wrapping is intentional for display: inline-block -->
|
||||
<dt><label for="section">Section name:</label></dt><dd>
|
||||
@ -20,3 +17,29 @@
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul class="list">
|
||||
<?php foreach($sections as $id => $section): ?>
|
||||
<?php if (is_array($section)) list($section, $d) = $section ?>
|
||||
<li>
|
||||
<h4><a href="<?= miniMVC\site_url("section/detail/{$id}") ?>"><?= $section ?></a></h4>
|
||||
|
||||
<?php if ( ! empty($d)): ?>
|
||||
|
||||
<?php foreach($d as $k => $v): ?>
|
||||
<?php $class = (strpos($v, "<br />") !== FALSE) ? 'multiline' : 'pair' ?>
|
||||
<dl class="<?= $class ?>">
|
||||
|
||||
<dt><?= $k ?></dt>
|
||||
<dd><?= $v ?></dd>
|
||||
|
||||
</dl>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php endif ?>
|
||||
|
||||
<?php $d = array(); // Don't let data linger ?>
|
||||
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
19
app/modules/meta/views/edit_form.php
Normal file
19
app/modules/meta/views/edit_form.php
Normal file
@ -0,0 +1,19 @@
|
||||
<form method="post" action="<?= $action ?>">
|
||||
<fieldset>
|
||||
<legend>Edit <?= ucfirst($type) ?></legend>
|
||||
<dl>
|
||||
<?php if ($type != 'data'): ?>
|
||||
<dt><label for="<?= $field_name ?>"><?= $type ?></label></dt>
|
||||
<dd><input type="text" value="<?= $field_val ?>" name="<?= $field_name ?>" id="<?= $field_name ?>" /></dd>
|
||||
<?php else: ?>
|
||||
<dt><label for="key">Name:</label></dt>
|
||||
<dd><input type="text" value="<?= $name ?>" id="name" name="name" /></dd>
|
||||
|
||||
<dt><label for="val">Value:</label></dt>
|
||||
<dd><textarea name="val" rows="5" cols="40"><?= $val ?></textarea></dd>
|
||||
<?php endif ?>
|
||||
<dt><input type="hidden" name="<?= $type ?>_id" value="<?= $field_id ?>" /></dt>
|
||||
<dd><button type="submit">Save Changes</button></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
@ -1,15 +1,12 @@
|
||||
<h3><?= $genre ?></h3>
|
||||
<h2><?= $genre ?></h2>
|
||||
|
||||
<h4>Genre Categories</h4>
|
||||
<ul class="list">
|
||||
<?php foreach($categories as $id => $cat): ?>
|
||||
<li><a href="<?= miniMVC\site_url("category/detail/{$id}") ?>"><?= $cat ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<p class="breadcrumbs">
|
||||
<a href="<?= miniMVC\site_url('') ?>">Genres</a> > <?= $genre ?>
|
||||
</p>
|
||||
|
||||
<form action="<?= miniMVC\site_url("category/add") ?>" method="post">
|
||||
<fieldset>
|
||||
<lengend>Add Category</lengend>
|
||||
<legend>Add Category</legend>
|
||||
<dl>
|
||||
<!-- Weird tag wrapping is intentional for display: inline-block -->
|
||||
<dt><label for="category">Category name:</label></dt><dd>
|
||||
@ -20,3 +17,10 @@
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul>
|
||||
<?php foreach($categories as $id => $cat): ?>
|
||||
<li><a href="<?= miniMVC\site_url("category/detail/{$id}") ?>"><?= $cat ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
|
||||
|
@ -1,14 +1,8 @@
|
||||
<h3>Genres</h3>
|
||||
|
||||
<ul class="list">
|
||||
<?php foreach($genres as $id => $name): ?>
|
||||
<li><a href="<?= miniMVC\site_url("genre/{$id}") ?>"><?= $name ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<h2>Genres</h2>
|
||||
|
||||
<form action="<?= miniMVC\site_url("genre/add") ?>" method="post">
|
||||
<fieldset>
|
||||
<lengend>Add Genre</lengend>
|
||||
<legend>Add Genre</legend>
|
||||
<dl>
|
||||
<!-- Weird tag wrapping is intentional for display: inline-block -->
|
||||
<dt><label for="genre">Genre name:</label></dt><dd>
|
||||
@ -19,3 +13,9 @@
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul>
|
||||
<?php foreach($genres as $id => $name): ?>
|
||||
<li><a href="<?= miniMVC\site_url("genre/{$id}") ?>"><?= $name ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
@ -1,39 +1,47 @@
|
||||
<h3>Data Outline</h3>
|
||||
<h2>Outline</h2>
|
||||
|
||||
<ul class="outline">
|
||||
<dl class="outline">
|
||||
<?php if (isset($outline)): ?>
|
||||
<?php foreach($outline as $genre_id => $genre_array): ?>
|
||||
|
||||
<?php foreach($outline as $genre_id => $genre_array): ?>
|
||||
<?php foreach($genre_array as $genre => $cat_array): ?>
|
||||
<li>
|
||||
<a href="<?= \miniMVC\site_url("genre/{$genre_id}") ?>"><?= $genre ?></a>
|
||||
<!-- Genres -->
|
||||
<?php foreach($genre_array as $genre => $cat_array): ?>
|
||||
<dt>
|
||||
<a href="<?= \miniMVC\site_url("genre/{$genre_id}") ?>"><?= $genre ?></a>
|
||||
</dt>
|
||||
<dd>
|
||||
|
||||
<?php foreach($cat_array as $cat_id => $cname_array): ?>
|
||||
<ul>
|
||||
<?php foreach($cname_array as $category => $sect_array): ?>
|
||||
<li>
|
||||
<a href="<?= \miniMVC\site_url("category/{$cat_id}") ?>"><?= $category ?></a>
|
||||
<?php foreach($cat_array as $cat_id => $cname_array): ?>
|
||||
<ul>
|
||||
<!-- Categories -->
|
||||
<?php foreach($cname_array as $category => $sect_array): ?>
|
||||
<li>
|
||||
<a href="<?= \miniMVC\site_url("category/{$cat_id}") ?>"><?= $category ?></a>
|
||||
|
||||
<?php if ( ! empty($sect_array)): ?>
|
||||
<ul>
|
||||
<?php foreach($sect_array as $section_id => $section): ?>
|
||||
<li>
|
||||
<a href="<?= \miniMVC\site_url("section/{$section_id}") ?>">
|
||||
<?= $section ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
<?php if ( ! empty($sect_array)): ?>
|
||||
<ul>
|
||||
<!-- Sections -->
|
||||
<?php foreach($sect_array as $section_id => $section): ?>
|
||||
<li>
|
||||
<a href="<?= \miniMVC\site_url("section/{$section_id}") ?>">
|
||||
<?= $section ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
<!-- / Sections -->
|
||||
</ul>
|
||||
<?php endif ?>
|
||||
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</ul>
|
||||
<?php endforeach; ?>
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
<!-- / Categories -->
|
||||
</ul>
|
||||
<?php endforeach; ?>
|
||||
|
||||
</li>
|
||||
<?php endforeach ?>
|
||||
</dd>
|
||||
<?php endforeach ?>
|
||||
<!-- / Genres -->
|
||||
|
||||
<?php endforeach ?>
|
||||
<?php endif ?>
|
||||
</ul>
|
||||
</dl>
|
@ -1,8 +1,41 @@
|
||||
<h3><?= $section ?></h3>
|
||||
<h2><?= $section ?></h2>
|
||||
|
||||
<h4>Section Data</h4>
|
||||
<?php /*<ul class="list">
|
||||
<?php foreach($data as $id => $d): ?>
|
||||
<li><a href="<?= miniMVC\site_url("section/detail/{$id}") ?>"><?= $section ?></a></li>
|
||||
<?php endforeach ?>
|
||||
</ul> */ ?>
|
||||
<p class="breadcrumbs">
|
||||
<a href="<?= miniMVC\site_url('') ?>">Genres</a> >
|
||||
<a href="<?= miniMVC\site_url('genres/detail/'.$p['genre_id']) ?>"><?= $p['genre'] ?></a> >
|
||||
<a href="<?= miniMVC\site_url('category/detail/'.$p['category_id']) ?>"><?= $p['category'] ?></a> >
|
||||
<?= $section ?>
|
||||
</p>
|
||||
|
||||
<form action="<?= miniMVC\site_url("data/add") ?>" method="post">
|
||||
<fieldset>
|
||||
<legend>Add Data</legend>
|
||||
<dl>
|
||||
<!-- Weird tag wrapping is intentional for display: inline-block -->
|
||||
<dt><label for="name">Name:</label></dt><dd>
|
||||
<input type="text" name="name[]" id="section" /></dd>
|
||||
|
||||
<dt><label for="val">Value:</label></dt><dd>
|
||||
<textarea name="val[]" rows="5" cols="40"></textarea></dd>
|
||||
|
||||
<dt><input type="hidden" name="section_id" value="<?= $section_id ?>" /></dt><dd>
|
||||
<button type="submit">Save Data</button></dd>
|
||||
</dl>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<?php if ( ! empty($sdata)): ?>
|
||||
|
||||
<?php foreach($sdata as $d): ?>
|
||||
<?php foreach($d as $k => $v): ?>
|
||||
<?php $class = (strpos($v, "<br />") !== FALSE) ? 'multiline' : 'pair' ?>
|
||||
<dl class="<?= $class ?>">
|
||||
|
||||
<dt><?= $k ?></dt>
|
||||
<dd><?= $v ?></dd>
|
||||
|
||||
</dl>
|
||||
<?php endforeach ?>
|
||||
<?php endforeach ?>
|
||||
|
||||
<?php endif ?>
|
33
app/modules/setup/controllers/setup.php
Normal file
33
app/modules/setup/controllers/setup.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* meta
|
||||
*
|
||||
* Hierarchial data tool
|
||||
*
|
||||
* @package meta
|
||||
* @author Timothy J. Warren
|
||||
* @copyright Copyright (c) 2012
|
||||
* @link https://github.com/aviat4ion/meta
|
||||
* @license http://philsturgeon.co.uk/code/dbad-license
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Setup Controller
|
||||
*
|
||||
* @package meta
|
||||
*/
|
||||
class setup extends \meta\controller {
|
||||
|
||||
/**
|
||||
* Constuctor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// End of setup.php
|
@ -9,4 +9,4 @@
|
||||
<?= $head_js ?>
|
||||
</head>
|
||||
<body<?= (!empty($body_class)) ? "class=\"" . $body_class . "\"" : ""; ?><?= (!empty($body_id)) ? " id=\"" . $body_id . "\"" : ""; ?>>
|
||||
<h1>Meta</h1>
|
||||
<h1><a href="<?= miniMVC\site_url('') ?>">Meta</a></h1>
|
@ -73,4 +73,4 @@ $path_to = '';
|
||||
| The folder where javascript files exist, in relation to the document root
|
||||
|
|
||||
*/
|
||||
$js_root = $document_root. '/js/';
|
||||
$js_root = $document_root. 'js/';
|
@ -16,8 +16,8 @@
|
||||
/**
|
||||
* This is the config array for javascript files to concatenate and minify
|
||||
*/
|
||||
return [
|
||||
/*
|
||||
return array(
|
||||
/*=
|
||||
For each group create an array like so
|
||||
|
||||
'my_group' => array(
|
||||
@ -25,4 +25,9 @@ return [
|
||||
'path/to/css/file2.css'
|
||||
),
|
||||
*/
|
||||
];
|
||||
|
||||
'js' => array(
|
||||
'kis-lite-dom-min.js',
|
||||
'meta.js'
|
||||
),
|
||||
);
|
@ -6,6 +6,11 @@ html, body {
|
||||
font-weight:200;
|
||||
max-width:800px;
|
||||
margin: 0 auto;
|
||||
color:#312;
|
||||
}
|
||||
|
||||
button {
|
||||
color:#312;
|
||||
}
|
||||
|
||||
a {
|
||||
@ -16,6 +21,26 @@ a:hover {
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
legend {
|
||||
display:block;
|
||||
}
|
||||
|
||||
legend:hover {
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
h1,h2 {
|
||||
display:-moz-inline-box;
|
||||
display:inline-block;
|
||||
vertical-align:middle;
|
||||
width:25%;
|
||||
}
|
||||
|
||||
/* Hide forms by default */
|
||||
fieldset dl {
|
||||
display:none;
|
||||
}
|
||||
|
||||
/* form styles */
|
||||
form dt, form dd {
|
||||
display:-moz-inline-box; /* For older versions of Mozilla/Firefox */
|
||||
@ -35,3 +60,52 @@ form dd {
|
||||
padding-left:.25em;
|
||||
}
|
||||
|
||||
/* Outline styles */
|
||||
.list {
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.list dl {
|
||||
margin-left:0.5em;
|
||||
}
|
||||
|
||||
.list li {
|
||||
list-style:none;
|
||||
}
|
||||
|
||||
/* Data listing styles */
|
||||
dl.multiline, dl.pair {
|
||||
border-bottom:1px dotted #312;
|
||||
}
|
||||
|
||||
dl.multiline dt {
|
||||
font-weight:bold;
|
||||
line-height:1.5;
|
||||
font-size:1em;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
dl.multiline dd {
|
||||
margin:1em;
|
||||
margin-right:0;
|
||||
}
|
||||
|
||||
dl.pair dt, dl.pair dd {
|
||||
display:-moz-inline-block;
|
||||
display:inline-block;
|
||||
padding:0.25em 0;
|
||||
}
|
||||
|
||||
dl.pair dt {
|
||||
width:35%;
|
||||
}
|
||||
|
||||
dl.pair dd {
|
||||
width:64%;
|
||||
margin-left:0;
|
||||
padding-left:0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
*/
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
error_reporting(-1);
|
||||
|
||||
/**
|
||||
* JS Minifier and Cacher
|
||||
@ -45,7 +46,7 @@ function get_files()
|
||||
|
||||
$js = '';
|
||||
|
||||
foreach ($groups[$_GET['g']] as &$file)
|
||||
foreach ($groups[$_GET['g']] as $file)
|
||||
{
|
||||
$new_file = realpath($js_root.$file);
|
||||
$js .= file_get_contents($new_file);
|
||||
@ -69,9 +70,13 @@ function google_min($new_file)
|
||||
$ch = curl_init('http://closure-compiler.appspot.com/compile');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_POST, 1);
|
||||
//curl_setopt($ch, CURLOPT_HEADER, 1);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, 'output_info=compiled_code&output_format=text&compilation_level=SIMPLE_OPTIMIZATIONS&js_code=' . urlencode($new_file));
|
||||
$output = curl_exec($ch);
|
||||
|
||||
//die(curl_getinfo($ch, CURLINFO_HTTP_CODE));
|
||||
curl_close($ch);
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
@ -150,7 +155,8 @@ if ($last_modified === $requested_time)
|
||||
//Determine what to do: rebuild cache, send files as is, or send cache.
|
||||
if ($cache_modified < $last_modified)
|
||||
{
|
||||
$js = google_min(get_files());
|
||||
$js = get_files();
|
||||
$js = google_min($js);
|
||||
$cs = file_put_contents($cache_file, $js);
|
||||
|
||||
//Make sure cache file gets created/updated
|
||||
@ -174,7 +180,7 @@ else
|
||||
|
||||
//This GZIPs the js for transmission to the user
|
||||
//making file size smaller and transfer rate quicker
|
||||
ob_start("ob_gzhandler");
|
||||
//ob_start("ob_gzhandler");
|
||||
|
||||
header("Content-Type: text/javascript; charset=utf8");
|
||||
header("Cache-control: public, max-age=691200, must-revalidate");
|
||||
@ -183,6 +189,6 @@ header("Expires: ".gmdate('D, d M Y H:i:s', (filemtime($this_file) + 691200))."
|
||||
|
||||
echo $js;
|
||||
|
||||
ob_end_flush();
|
||||
//ob_end_flush();
|
||||
|
||||
//end of js.php
|
17
assets/js/cache/js
vendored
Normal file
17
assets/js/cache/js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
(function(){if("undefined"!==typeof document.querySelector){var d,e,b,c;d=function(a){c="undefined"===typeof a?"undefined"!==typeof d.el?d.el:document.documentElement:"object"!==typeof a?e(a):a;d.prototype.el=c;var a=b(d),f;for(f in a)"object"===typeof a[f]&&(a[f].el=c);a.el=c;return a};e=function(a,f){var b;if("string"!=typeof a||"undefined"===typeof a)return a;b=null!=f&&1===f.nodeType?f:document;if(a.match(/^#([\w\-]+$)/))return document.getElementById(a.split("#")[1]);b=b.querySelectorAll(a);
|
||||
return 1===b.length?b[0]:b};b=function(a){var f;if("undefined"!==typeof a){if("undefined"!==typeof Object.create)return Object.create(a);f=typeof a;if(!("object"!==f&&"function"!==f))return f=function(){},f.prototype=a,new f}};d.ext=function(a,f){f.el=c;d[a]=f};d.ext("each",function(a){if("undefined"!==typeof c.length&&c!==window)if("undefined"!==typeof Array.prototype.forEach)[].forEach.call(c,a);else{var f=c.length;if(0!==f)for(var b,d=0;d<f;d++)b=c.item(d)?c.item(d):c[d],a.call(b,b)}else a.call(c,
|
||||
c)});d.type=function(a){return function(){return a&&a!==this}.call(a)?(typeof a).toLowerCase():{}.toString.call(a).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()};d=window.$_=window.$_||d;d.$=e}})();"undefined"===typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")});
|
||||
"undefined"===typeof Event.preventDefault&&"undefined"!==typeof window.event&&(Event.prototype.preventDefault=function(){window.event.returnValue=!1},Event.prototype.stopPropagation=function(){window.event.cancelBubble=!0});"undefined"===typeof Array.isArray&&(Array.isArray=function(d){return"[object Array]"===Object.prototype.toString.apply(d)});
|
||||
(function(){if("undefined"!==typeof window.XMLHttpRequest){var d={_do:function(d,b,c,a,f){var g=new XMLHttpRequest;"undefined"===typeof c&&(c=function(){});f=f?"POST":"GET";d+="GET"===f?"?"+this._serialize(b):"";g.open(f,d);g.onreadystatechange=function(){4===g.readyState&&(200===g.status?c.call(g.responseText,g.responseText):"undefined"!==typeof a&&a.call(g.status,g.status))};"POST"===f?(g.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),g.send(this._serialize(b))):g.send(null)},
|
||||
_serialize:function(d){var b,c,a=[];for(b in d)d.hasOwnProperty(b)&&"function"!==typeof d[b]&&(c=d[b].toString(),b=encodeURIComponent(b),c=encodeURIComponent(c),a.push(b+"="+c));return a.join("&")}};$_.ext("get",function(e,b,c,a){d._do(e,b,c,a,!1)});$_.ext("post",function(e,b,c,a){d._do(e,b,c,a,!0)});$_.ext("sse",function(d,b){var c;"undefined"!==typeof EventSource&&(c=new EventSource(d),c.onmessage=function(a){b.call(a.data,a.data)})})}})();
|
||||
(function(){var d,e,b,c;"undefined"!==typeof document.addEventListener?(d=function(a,b,c){"undefined"!==typeof a.addEventListener&&a.addEventListener(b,c,!1)},e=function(a,b,c){"undefined"!==typeof a.removeEventListener&&a.removeEventListener(b,c,!1)}):"undefined"!==typeof document.attachEvent&&(d=function(a,b,c){function d(a){c.apply(a)}"undefined"!==typeof a.attachEvent&&(e(b,c),a.attachEvent("on"+b,d),a=a.KIS_0_6_0=a.KIS_0_6_0||{},a.listeners=a.listeners||{},a.listeners[b]=a.listeners[b]||[],a.listeners[b].push({callback:c,
|
||||
_listener:d}))},e=function(a,b,c){if("undefined"!==typeof a.detachEvent){var d=a.KIS_0_6_0;if(d&&d.listeners&&d.listeners[b])for(var e=d.listeners[b],k=e.length,i=0;i<k;i++)if(e[i].callback===c){a.detachEvent("on"+b,e[i]._listener);e.splice(i,1);0===e.length&&delete d.listeners[b];break}}});b=function(a,c,g,h){var j,k;if(typeof a==="undefined")return null;if(c.match(/^([\w\-]+)$/))h===true?d(a,c,g):e(a,c,g);else{c=c.split(" ");k=c.length;for(j=0;j<k;j++)b(a,c[j],g,h)}};c=function(a,c,d,e){b(a,d,function(b){var d,
|
||||
i,g,b=b||window.event;i=$_.$(c,a);for(d in i){g=b.target||b.srcElement;if(g==i[d]){e.call(i[d],b);b.stopPropagation()}}},true)};$_.ext("event",{add:function(a,c){$_.each(function(d){b(d,a,c,true)})},remove:function(a,c){$_.each(function(d){b(d,a,c,false)})},live:function(a,b,d){c(document.documentElement,a,b,d)},delegate:function(a,b,d){$_.each(function(e){c(e,a,b,d)})}})})();
|
||||
"undefined"!==typeof document&&!("classList"in document.createElement("a"))&&function(d){var d=(d.HTMLElement||d.Element).prototype,e=Object,b=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1},a=function(a,b){this.name=a;this.code=DOMException[a];this.message=b},f=function(b,d){if(""===d)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(d))throw new a("INVALID_CHARACTER_ERR",
|
||||
"String contains an invalid character");return c.call(b,d)},g=function(a){for(var c=b.call(a.className),c=c?c.split(/\s+/):[],d=0,f=c.length;d<f;d++)this.push(c[d]);this._updateClassName=function(){a.className=this.toString()}},h=g.prototype=[],j=function(){return new g(this)};a.prototype=Error.prototype;h.item=function(a){return this[a]||null};h.contains=function(a){return-1!==f(this,a+"")};h.add=function(a){a+="";-1===f(this,a)&&(this.push(a),this._updateClassName())};h.remove=function(a){a=f(this,
|
||||
a+"");-1!==a&&(this.splice(a,1),this._updateClassName())};h.toggle=function(a){a+="";-1===f(this,a)?this.add(a):this.remove(a)};h.toString=function(){return this.join(" ")};if(e.defineProperty){h={get:j,enumerable:!0,configurable:!0};try{e.defineProperty(d,"classList",h)}catch(k){-2146823252===k.number&&(h.enumerable=!1,e.defineProperty(d,"classList",h))}}else e.prototype.__defineGetter__&&d.__defineGetter__("classList",j)}(self);
|
||||
(function(){function d(b,c,a){var d,e;"undefined"!==typeof b.hasAttribute?(b.hasAttribute(c)&&(d=b.getAttribute(c)),e=!0):"undefined"!==typeof b[c]?(d=b[c],e=!1):"class"===c&&"undefined"!==typeof b.className&&(c="className",d=b.className,e=!1);if("undefined"===typeof d&&("undefined"===typeof a||null===a))return null;if("undefined"===typeof a)return d;"undefined"!==typeof a&&null!==a?!0===e?b.setAttribute(c,a):b[c]=a:null===a&&(!0===e?b.removeAttribute(c):delete b[c]);return"undefined"!==typeof a?
|
||||
a:d}function e(b,c,a){var d,c=c.replace(/(\-[a-z])/g,function(a){return a.toUpperCase().replace("-","")});d={outerHeight:"offsetHeight",outerWidth:"offsetWidth",top:"posTop"};if("undefined"===typeof a&&"undefined"!==b.style[c])return b.style[c];if("undefined"===typeof a&&"undefined"!==b.style[d[c]])return b.style[d[c]];if("undefined"!==typeof b.style[c])return b.style[c]=a,null;if(b.style[d[c]])return b.style[d[c]]=a,null}$_.ext("dom",{addClass:function(b){$_.each(function(c){c.classList.add(b)})},
|
||||
removeClass:function(b){$_.each(function(c){c.classList.remove(b)})},hide:function(){this.css("display","none")},show:function(b){"undefined"===typeof b&&(b="block");this.css("display",b)},attr:function(b,c){var a=this.el;if(1<a.length&&"undefined"===typeof c)return null;if(1<a.length&&"undefined"!==typeof c)$_.each(function(a){return d(a,b,c)});else return d(a,b,c)},text:function(b){var c,a,d;d=this.el;a="undefined"!==typeof d.textContent?"textContent":"undefined"!==typeof d.innerText?"innerText":
|
||||
"innerHTML";c=d[a];return"undefined"!==typeof b?d[a]=b:c},css:function(b,c){if("undefined"===typeof c)return e(this.el,b);$_.each(function(a){e(a,b,c)})},append:function(b){"undefined"!==typeof document.insertAdjacentHTML?this.el.insertAdjacentHTML("beforeend",b):this.el.innerHTML+=b},prepend:function(b){"undefined"!==typeof document.insertAdjacentHTML?this.el.insertAdjacentHTML("afterbegin",b):this.el.innerHTML=b+this.el.innerHTML},html:function(b){"undefined"!==typeof b&&(this.el.innerHTML=b);return this.el.innerHTML}})})();
|
||||
(function(){$_("fieldset dl").dom.hide();$_("fieldset legend").event.add("click",function(){var d=$_("fieldset dl").dom;"none"==d.css("display").trim()?d.show():d.hide()})})();
|
17
assets/js/kis-lite-dom-min.js
vendored
Executable file
17
assets/js/kis-lite-dom-min.js
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
(function(){if("undefined"!==typeof document.querySelector){var d,e,b,c;d=function(a){c="undefined"===typeof a?"undefined"!==typeof d.el?d.el:document.documentElement:"object"!==typeof a?e(a):a;d.prototype.el=c;var a=b(d),f;for(f in a)"object"===typeof a[f]&&(a[f].el=c);a.el=c;return a};e=function(a,f){var b;if("string"!=typeof a||"undefined"===typeof a)return a;b=null!=f&&1===f.nodeType?f:document;if(a.match(/^#([\w\-]+$)/))return document.getElementById(a.split("#")[1]);b=b.querySelectorAll(a);
|
||||
return 1===b.length?b[0]:b};b=function(a){var f;if("undefined"!==typeof a){if("undefined"!==typeof Object.create)return Object.create(a);f=typeof a;if(!("object"!==f&&"function"!==f))return f=function(){},f.prototype=a,new f}};d.ext=function(a,f){f.el=c;d[a]=f};d.ext("each",function(a){if("undefined"!==typeof c.length&&c!==window)if("undefined"!==typeof Array.prototype.forEach)[].forEach.call(c,a);else{var f=c.length;if(0!==f)for(var b,h=0;h<f;h++)b=c.item(h)?c.item(h):c[h],a.call(b,b)}else a.call(c,
|
||||
c)});d.type=function(a){return function(){return a&&a!==this}.call(a)?(typeof a).toLowerCase():{}.toString.call(a).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()};d=window.$_=window.$_||d;d.$=e}})();"undefined"===typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g,"")});
|
||||
"undefined"===typeof Event.preventDefault&&"undefined"!==typeof window.event&&(Event.prototype.preventDefault=function(){window.event.returnValue=false},Event.prototype.stopPropagation=function(){window.event.cancelBubble=true});"undefined"===typeof Array.isArray&&(Array.isArray=function(d){return Object.prototype.toString.apply(d)==="[object Array]"});
|
||||
(function(){if(typeof window.XMLHttpRequest!=="undefined"){var d={_do:function(d,b,c,a,f){var g=new XMLHttpRequest;typeof c==="undefined"&&(c=function(){});f=f?"POST":"GET";d=d+(f==="GET"?"?"+this._serialize(b):"");g.open(f,d);g.onreadystatechange=function(){g.readyState===4&&(g.status===200?c.call(g.responseText,g.responseText):typeof a!=="undefined"&&a.call(g.status,g.status))};if(f==="POST"){g.setRequestHeader("Content-Type","application/x-www-form-urlencoded");g.send(this._serialize(b))}else g.send(null)},
|
||||
_serialize:function(d){var b,c,a=[];for(b in d)if(d.hasOwnProperty(b)&&typeof d[b]!=="function"){c=d[b].toString();b=encodeURIComponent(b);c=encodeURIComponent(c);a.push(b+"="+c)}return a.join("&")}};$_.ext("get",function(e,b,c,a){d._do(e,b,c,a,false)});$_.ext("post",function(e,b,c,a){d._do(e,b,c,a,true)});$_.ext("sse",function(d,b){var c;if(typeof EventSource!=="undefined"){c=new EventSource(d);c.onmessage=function(a){b.call(a.data,a.data)}}})}})();
|
||||
(function(){var d,e,b,c;if(typeof document.addEventListener!=="undefined"){d=function(a,b,c){typeof a.addEventListener!=="undefined"&&a.addEventListener(b,c,false)};e=function(a,b,c){typeof a.removeEventListener!=="undefined"&&a.removeEventListener(b,c,false)}}else if(typeof document.attachEvent!=="undefined"){d=function(a,b,c){function d(a){c.apply(a)}if(typeof a.attachEvent!=="undefined"){e(b,c);a.attachEvent("on"+b,d);a=a.KIS_0_6_0=a.KIS_0_6_0||{};a.listeners=a.listeners||{};a.listeners[b]=a.listeners[b]||
|
||||
[];a.listeners[b].push({callback:c,_listener:d})}};e=function(a,b,c){if(typeof a.detachEvent!=="undefined"){var d=a.KIS_0_6_0;if(d&&d.listeners&&d.listeners[b])for(var e=d.listeners[b],k=e.length,i=0;i<k;i++)if(e[i].callback===c){a.detachEvent("on"+b,e[i]._listener);e.splice(i,1);e.length===0&&delete d.listeners[b];break}}}}b=function(a,c,g,h){var j,k;if(typeof a==="undefined")return null;if(c.match(/^([\w\-]+)$/))h===true?d(a,c,g):e(a,c,g);else{c=c.split(" ");k=c.length;for(j=0;j<k;j++)b(a,c[j],
|
||||
g,h)}};c=function(a,c,d,e){b(a,d,function(b){var d,i,g,b=b||window.event;i=$_.$(c,a);for(d in i){g=b.target||b.srcElement;if(g==i[d]){e.call(i[d],b);b.stopPropagation()}}},true)};$_.ext("event",{add:function(a,c){$_.each(function(d){b(d,a,c,true)})},remove:function(a,c){$_.each(function(d){b(d,a,c,false)})},live:function(a,b,d){c(document.documentElement,a,b,d)},delegate:function(a,b,d){$_.each(function(e){c(e,a,b,d)})}})})();
|
||||
"undefined"!==typeof document&&!("classList"in document.createElement("a"))&&function(d){var d=(d.HTMLElement||d.Element).prototype,e=Object,b=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")},c=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(b in this&&this[b]===a)return b;return-1},a=function(a,b){this.name=a;this.code=DOMException[a];this.message=b},f=function(b,d){if(d==="")throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(d))throw new a("INVALID_CHARACTER_ERR",
|
||||
"String contains an invalid character");return c.call(b,d)},g=function(a){for(var c=b.call(a.className),c=c?c.split(/\s+/):[],d=0,f=c.length;d<f;d++)this.push(c[d]);this._updateClassName=function(){a.className=this.toString()}},h=g.prototype=[],j=function(){return new g(this)};a.prototype=Error.prototype;h.item=function(a){return this[a]||null};h.contains=function(a){return f(this,a+"")!==-1};h.add=function(a){a=a+"";if(f(this,a)===-1){this.push(a);this._updateClassName()}};h.remove=function(a){a=
|
||||
f(this,a+"");if(a!==-1){this.splice(a,1);this._updateClassName()}};h.toggle=function(a){a=a+"";f(this,a)===-1?this.add(a):this.remove(a)};h.toString=function(){return this.join(" ")};if(e.defineProperty){h={get:j,enumerable:true,configurable:true};try{e.defineProperty(d,"classList",h)}catch(k){if(k.number===-2146823252){h.enumerable=false;e.defineProperty(d,"classList",h)}}}else e.prototype.__defineGetter__&&d.__defineGetter__("classList",j)}(self);
|
||||
(function(){function d(b,c,a){var d,e;if(typeof b.hasAttribute!=="undefined"){b.hasAttribute(c)&&(d=b.getAttribute(c));e=true}else if(typeof b[c]!=="undefined"){d=b[c];e=false}else if(c==="class"&&typeof b.className!=="undefined"){c="className";d=b.className;e=false}if(typeof d==="undefined"&&(typeof a==="undefined"||a===null))return null;if(typeof a==="undefined")return d;typeof a!=="undefined"&&a!==null?e===true?b.setAttribute(c,a):b[c]=a:a===null&&(e===true?b.removeAttribute(c):delete b[c]);return typeof a!==
|
||||
"undefined"?a:d}function e(b,c,a){var d,c=c.replace(/(\-[a-z])/g,function(a){return a.toUpperCase().replace("-","")});d={outerHeight:"offsetHeight",outerWidth:"offsetWidth",top:"posTop"};if(typeof a==="undefined"&&b.style[c]!=="undefined")return b.style[c];if(typeof a==="undefined"&&b.style[d[c]]!=="undefined")return b.style[d[c]];if(typeof b.style[c]!=="undefined"){b.style[c]=a;return null}if(b.style[d[c]]){b.style[d[c]]=a;return null}}$_.ext("dom",{addClass:function(b){$_.each(function(c){c.classList.add(b)})},
|
||||
removeClass:function(b){$_.each(function(c){c.classList.remove(b)})},hide:function(){this.css("display","none")},show:function(b){typeof b==="undefined"&&(b="block");this.css("display",b)},attr:function(b,c){var a=this.el;if(a.length>1&&typeof c==="undefined")return null;if(a.length>1&&typeof c!=="undefined")$_.each(function(a){return d(a,b,c)});else return d(a,b,c)},text:function(b){var c,a,d;d=this.el;a=typeof d.textContent!=="undefined"?"textContent":typeof d.innerText!=="undefined"?"innerText":
|
||||
"innerHTML";c=d[a];if(typeof b!=="undefined")return d[a]=b;return c},css:function(b,c){if(typeof c==="undefined")return e(this.el,b);$_.each(function(a){e(a,b,c)})},append:function(b){typeof document.insertAdjacentHTML!=="undefined"?this.el.insertAdjacentHTML("beforeend",b):this.el.innerHTML=this.el.innerHTML+b},prepend:function(b){typeof document.insertAdjacentHTML!=="undefined"?this.el.insertAdjacentHTML("afterbegin",b):this.el.innerHTML=b+this.el.innerHTML},html:function(b){if(typeof b!=="undefined")this.el.innerHTML=
|
||||
b;return this.el.innerHTML}})})();
|
@ -1,14 +1,15 @@
|
||||
var meta = (function (){
|
||||
"use strict";
|
||||
(function() {
|
||||
|
||||
var meta = window.meta || {};
|
||||
"use strict";
|
||||
|
||||
meta.addItem = function() {
|
||||
// Show/hide forms based on use
|
||||
$_("fieldset dl").dom.hide();
|
||||
$_("fieldset legend").event.add('click', function(e){
|
||||
var form = $_("fieldset dl").dom;
|
||||
|
||||
};
|
||||
(form.css('display').trim() == 'none')
|
||||
? form.show()
|
||||
: form.hide();
|
||||
});
|
||||
|
||||
|
||||
// Return the object to the global scope
|
||||
return meta;
|
||||
|
||||
)());
|
||||
}());
|
@ -156,7 +156,7 @@ class Page {
|
||||
|
||||
if ( ! empty($this->buffer))
|
||||
{
|
||||
//ob_start('ob_gzhandler');
|
||||
(GZ_COMPRESS) ? ob_start('ob_gzhandler') : ob_start();
|
||||
|
||||
echo $this->buffer;
|
||||
|
||||
|
2
sys/db
2
sys/db
@ -1 +1 @@
|
||||
Subproject commit 90c676019652341836edd7bf71dfc70979341810
|
||||
Subproject commit 4c546ed3e90aa371053290ed4842fd9cad7f175c
|
@ -44,9 +44,12 @@ class Session {
|
||||
{
|
||||
session_start();
|
||||
|
||||
// Create a re-generatable id using a hash of the user's ip address and user agent
|
||||
$session_id = sha1($_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
|
||||
|
||||
// Save a reference to the session for later access
|
||||
$_SESSION['MM_SESSION'] = (isset($_SESSION['MM_SESSION'])) ?: array();
|
||||
$this->sess =& $_SESSION['MM_SESSION'];
|
||||
$_SESSION[$session_id] = (isset($_SESSION[$session_id])) ?: array();
|
||||
$this->sess =& $_SESSION[$session_id];
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user