📄 cms.class.inc
字号:
<?php/*Copyright Intermesh 2003Author: Merijn Schering <mschering@intermesh.nl>Version: 1.0 Release date: 08 July 2003This program is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation; either version 2 of the License, or (at youroption) any later version.*/define('NORMAL_DISPLAY', 0);define('MULTIPAGE_DISPLAY', 1);class cms extends db{ function cms() { $this->db(); } function get_styles($style) { $styles = array(); $style_name = ''; $in_style = false; $style = str_replace("\r", '', $style); $style = str_replace("\n", '', $style); $style = str_replace(' ', '', $style); for ($i=0; $i<strlen($style); $i++) { $char = $style[$i]; if ($char == '{' || $char == ',') { $in_style = false; if (trim($style_name) != '') { $styles[] = $style_name; } $style_name = ''; }elseif($char == '.') { if ($style_name != '') { $style_name = ''; $in_style = false; }else { $in_style = true; } }elseif($char == ':') { $style_name = ''; $in_style = false; }elseif($char == '}') { $in_style = false; $style_name = ''; }else { if ($in_style) { $style_name .= $char; } } } return $styles; } function get_plugins() { global $GO_MODULES, $GO_CONFIG; $plugins = array(); require_once($GO_CONFIG->class_path.'filesystem.class.inc'); $fs = new filesystem(); $files = $fs->get_files($GO_MODULES->modules['cms']['path'].'plugins'); foreach($files as $file) { $plugins[] = str_replace('.class.inc', '', $file['name']); } return $plugins; } function get_settings($user_id) { $this->query("SELECT * FROM cms_settings WHERE user_id='$user_id'"); if ($this->next_record()) { return $this->Record; }else { $this->query("INSERT INTO cms_settings ". "(user_id, sort_field, sort_order) VALUES ". "('$user_id', 'cms_files.priority', 'ASC')"); return $this->get_settings($user_id); } } function set_sorting($user_id, $sort_field, $sort_order) { $sql = "UPDATE cms_settings SET sort_field='$sort_field' , ". "sort_order='$sort_order' WHERE user_id='$user_id'"; return $this->query($sql); } function resolve_url($path, $root_folder_id) { $path = explode('/', $path); $last_folder_id = $root_folder_id; $count = count($path); for($i=0;$i<$count;$i++) { if ($path[$i] != '') { if(!$new_folder_id = $this->folder_exists($last_folder_id, $path[$i])) { $file_id = $this->file_exists($last_folder_id, $path[$i]); if(!$file_id = $this->file_exists($last_folder_id, $path[$i])) { echo $i.': '.$path[$i].' last folder id: '.$last_folder_id.'<br />'; return false; } }else { $last_folder_id = $new_folder_id; } } } $path['folder_id'] = $last_folder_id; if (isset($file_id)) { $path['file_id'] = $file_id; } return $path; } function move_file($file_id, $new_folder_id) { //if the name exists add (1) behind it. if($file = $this->get_file($file_id)) { $name = $file['name']; $x=0; while ($this->file_exists($new_folder_id, $name)) { $x++; $name = strip_extension($file['name']).' ('.$x.').'.get_extension($file['name']); } $priority = $this->get_next_priority($new_folder_id); return $this->query("UPDATE cms_files SET folder_id='$new_folder_id', name='$name', priority='$priority' WHERE id='$file_id'"); } return false; } function move_folder($folder_id, $new_parent_id) { if ($folder = $this->get_folder($folder_id)) { if ($folder['parent_id'] != $new_parent_id) { //don't move folders into thier own path if (!$this->is_in_path($folder_id, $new_parent_id)) { //if the name exists add (1) behind it. $name = $folder['name']; $x=0; while ($this->folder_exists($new_parent_id, $name)) { $x++; $name = $folder['name'].' ('.$x.')'; } $priority = $this->get_next_priority($new_parent_id); return $this->query("UPDATE cms_folders SET parent_id='$new_parent_id', name='$name', priority='$priority' WHERE id='$folder_id'"); } } } return false; } function copy_file($file_id, $new_folder_id) { //if the name exists add (1) behind it. if($file = $this->get_file($file_id)) { $name = $file['name']; $x=0; while ($this->file_exists($new_folder_id, $name)) { $x++; $name = strip_extension($file['name']).' ('.$x.').'.get_extension($file['name']); } return $this->add_file($new_folder_id, addslashes($name), addslashes($file['content']), addslashes($file['title']), addslashes($file['description']), addslashes($file['keywords']), $file['template_item_id'], $file['auto_meta']); } return false; } function copy_folder($folder_id, $new_parent_id) { if ($folder = $this->get_folder($folder_id)) { //don't move folders into thier own path if (!$this->is_in_path($folder_id, $new_parent_id)) { //if the name exists add (1) behind it. $name = $folder['name']; $x=0; while ($this->folder_exists($new_parent_id, $name)) { $x++; $name = $folder['name'].' ('.$x.')'; } if($new_folder_id = $this->add_folder($new_parent_id, $name)) { $cms = new cms(); $this->get_files($folder_id); while($this->next_record()) { if(!$cms->copy_file($this->f('id'), $new_folder_id)) { return false; } } $this->get_folders($folder_id); while($this->next_record()) { if(!$this->copy_folder($this->f('id'),$new_folder_id)) { return false; } } return true; } } } return false; } /* Check if a folder is in the path of another folder. This is used to check if we can move a folder into another. */ function is_in_path($check_folder_id, $target_folder_id) { if($target_folder_id == 0) { return false; }elseif ($target_folder_id == $check_folder_id) { return true; }else { $folder = $this->get_folder($target_folder_id); return $this->is_in_path($check_folder_id, $folder['parent_id']); } } function file_exists($folder_id, $filename) { $this->query("SELECT id FROM cms_files WHERE folder_id='$folder_id' AND name='$filename'"); if ($this->next_record()) { return $this->f('id'); } return false; } //builds the full path to this directory with links function get_path($folder_id) { $path = ''; while($folder = $this->get_folder($folder_id)) { $path = '/'.$folder['name'].$path; $folder_id = $folder['parent_id']; } return $path; } //functions for personal sites function add_site($user_id, $name, $domain, $webmaster, $acl_write, $template_id,$language) { $template_item_id=0; $this->get_template_items($template_id, true); if($this->next_record()) { $template_item_id=$this->f('id'); } //create a root folder for the new site if ($root_folder_id = $this->add_folder(0, $domain, false, $template_item_id)) { $domain = $this->prepare_domain($domain); //create the site $site_id = $this->nextid('cms_sites'); if ($site_id > 0) { if($this->query("INSERT INTO cms_sites (id, user_id, name,domain, webmaster, acl_write, template_id,root_folder_id,language) ". "VALUES ('$site_id', '$user_id', '$name','$domain', '$webmaster', ". " '$acl_write', $template_id, $root_folder_id, '$language')")) { return $site_id; } } } return false; } function delete_site($site_id) { $cms = new cms(); if($site = $this->get_site($site_id)) { $this->delete_folder($site['root_folder_id']); if($this->query("DELETE FROM cms_sites WHERE id='$site_id'")) { global $GO_SECURITY; $GO_SECURITY->delete_acl($site['acl_write']); return true; } } return false; } function update_site($site_id,$name,$domain, $webmaster, $template_id, $start_file_id,$language) { $domain = $this->prepare_domain($domain); return $this->query("UPDATE cms_sites SET domain='$domain', ". "name='$name', ". "webmaster='$webmaster', ". "template_id=$template_id, ". "start_file_id='$start_file_id', ". "language='$language' ". "WHERE id='$site_id'"); } function set_publishing($site_id, $publish_style, $publish_path) { return $this->query("UPDATE cms_sites SET publish_style='$publish_style', publish_path='$publish_path' WHERE id='$site_id'"); } function get_site_by_publish_path($path) { $this->query("SELECT * FROM cms_sites WHERE publish_path='$path'"); if ($this->next_record()) { return $this->Record; }else { return false; } } function get_site($site_id) { $this->query("SELECT * FROM cms_sites WHERE id='$site_id'"); if ($this->next_record()) { return $this->Record; } return false; } function prepare_domain($domain) { $domain = preg_replace("/http(s?):\/\//i", '', $domain); if (substr($domain, -1)=='/') { $domain = substr($domain,0, -1); } return $domain; } function get_site_by_domain($domain, $recurse=false) { $domain = $this->prepare_domain($domain); $this->query("SELECT * FROM cms_sites WHERE domain='$domain'"); if ($this->next_record()) { return $this->Record; }elseif($recurse) { while($pos = strpos($domain,'.')) { $domain = substr($domain, $pos+1); return $this->get_site_by_domain($domain, true); } } return false; } function get_sites() { $this->query("SELECT * FROM cms_sites"); return $this->num_rows(); } function get_authorized_sites($user_id) { /*$sql = "SELECT DISTINCT cms_sites.* FROM cms_sites, acl, users_groups WHERE ". "cms_sites.acl_write = acl.acl_id". " AND (( acl.group_id = users_groups.group_id AND users_groups.user_id = ".$user_id." AND acl.user_id = 0 ) OR (". "acl.group_id = 0 AND acl.user_id = ".$user_id." ) ) ORDER BY cms_sites.domain ASC";*/ $sql = "SELECT DISTINCT cms_sites. *". "FROM cms_sites ". "INNER JOIN acl ON cms_sites.acl_write = acl.acl_id ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE acl.user_id=$user_id ". "OR users_groups.user_id=$user_id". " ORDER BY cms_sites.domain ASC"; $this->query($sql); return $this->num_rows(); } function get_subscribed_sites($user_id) { $this->query("SELECT cms_sites.* FROM cms_sites LEFT JOIN cms_subscribed ON (cms_subscribed.site_id=cms_sites.id) WHERE cms_subscribed.user_id='$user_id' ORDER BY cms_sites.domain ASC"); return $this->num_rows(); } function subscribe_site($user_id, $site_id) { return $this->query("INSERT INTO cms_subscribed (user_id, site_id) VALUES ('$user_id', '$site_id')"); } function unsubscribe_site($user_id, $site_id) { return $this->query("DELETE FROM cms_subscribed WHERE user_id='$user_id' AND site_id='$site_id'"); } function is_subscribed($user_id, $site_id) { $this->query("SELECT * FROM cms_subscribed WHERE user_id='$user_id' AND site_id='$site_id'"); return $this->next_record(); } //functions for files and folders of sites function get_files($folder_id, $sort = "priority", $direction = "ASC") { $sql = "SELECT * FROM cms_files WHERE folder_id='$folder_id' ORDER BY $sort $direction"; $this->query($sql); return $this->num_rows(); } function get_authorized_files($folder_id, $user_id, $hot_items=false) { global $GO_SECURITY; $files=array(); if($hot_items) { $this->get_hot_items($folder_id); }else { $this->get_files($folder_id); } while($this->next_record()) { if($this->f('acl')==0 || $GO_SECURITY->has_permission($user_id, $this->f('acl'))) { $files[]=$this->Record; } } return $files; } function get_hot_items($folder_id) { $sql = "SELECT * FROM cms_files WHERE folder_id='$folder_id' AND hot_item='1' ORDER BY priority ASC"; $this->query($sql); return $this->num_rows(); } function get_visible_folders($folder_id) { $this->query("SELECT * FROM cms_folders WHERE parent_id='$folder_id' AND disabled='0' ORDER BY priority ASC"); return $this->num_rows(); } function get_folders($folder_id, $sort = "priority", $direction = "ASC") { $this->query("SELECT * FROM cms_folders WHERE parent_id='$folder_id' ORDER BY '$sort' $direction"); return $this->num_rows(); } function get_authorized_folders($folder_id, $user_id, $only_visible=false) { global $GO_SECURITY; $folders=array(); if($only_visible) { $this->get_visible_folders($folder_id); }else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -