Files
www-medidate-org/cms/plugins/pluginloader/page_data/page_data_router.php
2025-02-28 08:45:43 +01:00

367 lines
8.0 KiB
PHP

<?php
if (!defined('CMSIMPLE_VERSION') || preg_match('#/pluginloader/page_data/page_data_router.php#i',$_SERVER['SCRIPT_NAME']))
{
die('no direct access');
}
/* utf8-marker = äöüß */
/**
* Page-Data - Module page_data_router
* Part of the Pluginloader V.2.1.x
*
* Handles all the data that has to be
* collected to generate tha page-data-array.
*
* @author Martin Damken
* @link http://www.zeichenkombinat.de
* @version 1.0.00
* @package pluginloader
* @subpackage page_data
*/
/**
* PL_Page_Data_Router
*
* @access public
*/
class PL_Page_Data_Router{
var $model, $current_page;
/**
* PL_Page_Data_Router::PL_Page_Data_Router()
*
* @param mixed $data_file
* @param mixed $h
* @return
*/
function __construct($data_file, $h){
$this -> model = new PL_Page_Data_Model($h);
}
/**
* PL_Page_Data_Router::add_interest()
*
* @param mixed $field
* @return
*/
function add_interest($field){
if(!in_array($field, $this -> model -> params)){
$this -> model -> add_param($field);
}
}
/**
* PL_Page_Data_Router::add_tab()
*
* @param mixed $tab_name
* @param mixed $tab_view
* @return
*/
function add_tab($tab_name, $tab_view){
$this -> model -> add_tab($tab_name, $tab_view);
}
/**
* PL_Page_Data_Router::find_page()
*
* @param mixed $id
* @return
*/
function find_page($id){
$page = $this -> model -> find_key($id);
return $page;
}
/**
* PL_Page_Data_Router::find_all()
*
* @return
*/
function find_all(){
return $this->model->data;
}
/**
* PL_Page_Data_Router::new_page()
*
* @param mixed $params
* @return
*/
function new_page($params = null){
$page = $this -> model -> create($params);
return $page;
}
/**
* PL_Page_Data_Router::insert()
*
* @param mixed $pages
* @param mixed $index
* @return
*/
function insert($pages, $index){
$this -> model -> replace($pages, $index);
}
/**
* PL_Page_Data_Router::destroy()
*
* @param mixed $key
* @return
*/
function destroy($key){
$this -> model -> delete($key);
}
/**
* Returns an array of all pages containing $value in $field.
* If $separator is given the $field will be translated to an array
* - explode($separator, $value) - before the search.
*
* @param string $field
* @param string $value
* @param string $separator
* @return array
*/
function find_field_value($field, $value, $separator = null){
if($separator){
$results = $this -> model -> find_arrayfield_value($field, $value, $separator);
return $results;
}
$results = $this -> model -> find_field_value($field, $value);
return $results;
}
/**
* PL_Page_Data_Router::find_field_value_sortkey()
*
* @param mixed $field
* @param mixed $value
* @param mixed $sort_key
* @param mixed $sort_flag
* @param mixed $separator
* @return
*/
function find_field_value_sortkey($field, $value, $sort_key, $sort_flag = null, $separator = null){
$results = $this -> model -> find_field_value_sortkey($field, $value, $sort_key, $sort_flag, $separator);
return $results;
}
/**
* PL_Page_Data_Router::refresh_from_texteditor()
*
* @param mixed $headings
* @param mixed $index
* @return
*/
function refresh_from_texteditor($headings, $index){
if(count($headings) == 0){
/**
* Current page has been deleted:
* Store it temporary, maybe the user
* wants to paste it in somewhere again,
* and remove it from the page infos
*/
$this -> keep_in_mind($index);
$this -> destroy($index);
}
if(count($headings) > 1){
/**
* At least one page was inserted:
* Create an array of the new pages
* and insert it into the page data
*/
$new_pages = array();
$current_page = $this -> find_page($index);
foreach($headings as $key => $heading){
$url = preg_replace('/\s+/isu', ' ', trim(strip_tags($heading)));
$url = uenc($url);
switch ($url) {
case $current_page['url']:
/**
* Keeping the current page data:
* this attempt fails, if NEW pages are
* added AND current heading was CHANGED
*/
foreach($current_page as $field => $value){
$params[$field] = $value;
}
break;
case $this -> model -> temp_data['url']:
/**
* This is the 'url' of the recently deleted
* page. Most probably it was just pasted in
* again. So don't be shy, get the old infos
* for this new page
*/
foreach($this -> model -> temp_data as $field => $value){
$params[$field] = $value;
}
break;
default:
/**
* The 'url' is used for ... look right above
*/
$params['url'] = $url;
break;
}
$params['last_edit'] = time();
$new_pages[] = $params;
$params = array();
}
$this -> model -> replace($new_pages, $index);
}
if(count($headings) == 1){
/**
* The heading may have changed, stay up to date.
*/
$url = preg_replace('/\s+/isu', ' ', trim(strip_tags($headings[0])));
$params['url'] = uenc($url);
$params['last_edit'] = time();
$this -> update($index, $params);
}
}
/**
* PL_Page_Data_Router::refresh_from_menu_manager()
*
* @param mixed $changes
* @return
*/
function refresh_from_menu_manager($changes){
$changes = explode(',', $changes);
/**
* Create an up-to-date page data array ...
*/
$new_data = array();
/**
* index counter is needed for changed headings
*/
$i = 0;
foreach($changes as $temp){
$infos = explode('^', $temp);
$old_position = $infos[0];
if($old_position == 'New'){
/**
* Page was added: create a new record
* These informations are created by default
*/
$params = array();
$title = trim(strip_tags($infos[2]));
$url = uenc(strip_tags($title));
$params['url'] = $url;
$new_data[] = $this -> new_page($params);
} else{
/**
* Get the old record
*/
$new_data[] = $this -> find_page($old_position);
}
if(isset($infos[3])){
/**
* if the heading has changed:
* update 'url'
*/
$url = uenc(trim(strip_tags($infos[3])));
$new_data[$i]['url'] = $url;
}
$i++;
}
/**
* Replace the old data with the new array
*/
$this -> model -> refresh($new_data);
}
/**
* PL_Page_Data_Router::update()
*
* @param mixed $s
* @param mixed $params
* @return
*/
function update($s, $params){
$update_params = array();
foreach($params as $field => $update){
if(in_array($field, $this -> model -> params)){
$update_params[$field] = $update;
}
}
$this -> model -> update_key($s, $params);
}
/**
* PL_Page_Data_Router::edit()
*
* @param mixed $pd_s
* @return
*/
function edit($pd_s){
$page = $this -> find_page($pd_s);
$view_provider = new PL_Page_Data_View($page, $this -> model -> tabs);
return $view_provider->edit_view($page);
}
/**
* PL_Page_Data_Router::create_tabs()
*
* @param mixed $s
* @return string Returns views of installed plugins
*/
function create_tabs($s){
global $edit, $f, $o, $su;
if(is_array($this -> model -> tabs) && count($this -> model ->tabs) > 0 && $edit == true){
if ($s == -1 && !$f && $o == '' && $su == ''){
$pd_s = 0;
} else {
$pd_s = $s;
}
$page = $this -> find_page($pd_s);
if($pd_s > -1){
$view_provider = new PL_Page_Data_View($page, $this -> model -> tabs);
return $view_provider->pd_forms();
}
}
return '';
}
/**
* PL_Page_Data_Router::keep_in_mind()
*
* @param mixed $pd_s
* @return
*/
function keep_in_mind($pd_s){
$page = $this->find_page($pd_s);
$this -> model -> store_temp($page);
}
/**
* PL_Page_Data_Router::check_temp()
*
* @param mixed $url
* @return
*/
function check_temp($url){
$temp = $this -> model -> find_key('temp');
$test = explode(PL_URI_SEPARATOR, $url);
if($test[count($test)-1] == $temp['url']){
$params = array();
foreach($temp as $field => $value){
if($field !== 'url'){
$params[$field] = $value;
}
}
$this -> model -> delete('temp');
$this -> model -> update_key($url, $params);
return TRUE;
}
return FALSE;
}
}
?>