PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/application/models/settings_model.php

https://gitlab.com/fredec/ionizecms-1.0.8.x
PHP | 294 lines | 134 code | 67 blank | 93 comment | 13 complexity | b69fc561c0b15ba06ca24144047493e7 MD5 | raw file
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. /**
  3. * Ionize, creative CMS
  4. *
  5. * @package Ionize
  6. * @author Ionize Dev Team
  7. * @license http://doc.ionizecms.com/en/basic-infos/license-agreement
  8. * @link http://ionizecms.com
  9. * @since Version 0.9.0
  10. */
  11. // ------------------------------------------------------------------------
  12. /**
  13. * Ionize, creative CMS Settings Model
  14. *
  15. * @package Ionize
  16. * @subpackage Models
  17. * @category Settings
  18. * @author Ionize Dev Team
  19. */
  20. class Settings_Model extends Base_model
  21. {
  22. /**
  23. *
  24. */
  25. public function __construct()
  26. {
  27. parent::__construct();
  28. $this->set_table('setting');
  29. $this->set_pk_name('id_setting');
  30. self::$ci->load->helper('path_helper');
  31. }
  32. // ------------------------------------------------------------------------
  33. /**
  34. * Get languages from LANG table
  35. *
  36. * @return The lang array
  37. */
  38. function get_languages()
  39. {
  40. return $this->{$this->db_group}->from('lang')->order_by('ordering', 'ASC')->get()->result_array();
  41. }
  42. // ------------------------------------------------------------------------
  43. /**
  44. * Get one setting, from DB
  45. *
  46. * @param $name
  47. * @param null $lang
  48. *
  49. * @return mixed
  50. */
  51. public function get_setting($name, $lang=NULL)
  52. {
  53. $this->{$this->db_group}->where('name', $name);
  54. if ( ! is_null($lang))
  55. $this->{$this->db_group}->where('lang', $lang);
  56. $query = $this->{$this->db_group}->get($this->table);
  57. return $query->row_array();
  58. }
  59. // ------------------------------------------------------------------------
  60. public function get_setting_value($name, $lang=NULL)
  61. {
  62. $setting = $this->get_setting($name, $lang);
  63. if ( $setting && isset($setting['content']))
  64. return $setting['content'];
  65. return NULL;
  66. }
  67. // ------------------------------------------------------------------------
  68. /**
  69. * Get the settings
  70. * Don't retrieves the language depending settings
  71. *
  72. * @return The settings array
  73. */
  74. public function get_settings()
  75. {
  76. $this->{$this->db_group}->where("(lang is null or lang='')");
  77. $query = $this->{$this->db_group}->get($this->table);
  78. return $query->result_array();
  79. }
  80. // ------------------------------------------------------------------------
  81. /**
  82. * Get the language depending settings
  83. * Each setting depending on the lang is stored in the setting table with
  84. * the field 'lang' feeded with the according language code
  85. *
  86. * @param string Lang code
  87. *
  88. * @return The settings array
  89. */
  90. public function get_lang_settings($lang)
  91. {
  92. $this->{$this->db_group}->where('lang', $lang);
  93. $query = $this->{$this->db_group}->get($this->table);
  94. return $query->result_array();
  95. }
  96. // ------------------------------------------------------------------------
  97. /**
  98. * Get the admin lang codes from the language folder
  99. *
  100. * @return array Array of lang code
  101. *
  102. */
  103. public function get_admin_langs()
  104. {
  105. $path = set_realpath(APPPATH.'language/');
  106. $lang_dirs = array();
  107. if ($dirs = scandir($path))
  108. {
  109. foreach ($dirs as $dir)
  110. {
  111. if (is_dir($path.$dir))
  112. {
  113. $file_path = set_realpath($path.$dir).'admin_lang.php';
  114. if (is_file($file_path))
  115. $lang_dirs[] = $dir;
  116. }
  117. }
  118. }
  119. return $lang_dirs;
  120. }
  121. // ------------------------------------------------------------------------
  122. public function set_setting($name, $content, $lang=NULL)
  123. {
  124. // Check the setting
  125. $this->{$this->db_group}->from($this->table);
  126. $this->{$this->db_group}->where('name',$name);
  127. $where = array('name' => $name);
  128. $data = array(
  129. 'name' => $name,
  130. 'content' => $content
  131. );
  132. if ( ! is_null($lang))
  133. {
  134. $this->{$this->db_group}->where('lang', $lang);
  135. $where['lang'] = $lang;
  136. $data['lang'] = $lang;
  137. }
  138. if ($this->{$this->db_group}->count_all_results() > 0)
  139. {
  140. $this->{$this->db_group}->update($this->table, $data, $where);
  141. }
  142. else
  143. {
  144. $this->{$this->db_group}->insert($this->table, $data);
  145. }
  146. }
  147. // ------------------------------------------------------------------------
  148. /**
  149. * @param $data
  150. *
  151. */
  152. public function save_setting($data)
  153. {
  154. // Check the setting
  155. $this->{$this->db_group}->from($this->table);
  156. $this->{$this->db_group}->where('name', $data['name']);
  157. // Check if the setting depends on lang code
  158. $where = '';
  159. if ( isset($data['lang']) )
  160. {
  161. $this->{$this->db_group}->where('lang', $data['lang']);
  162. $where =" AND lang='".$data['lang']."'";
  163. }
  164. if ($this->{$this->db_group}->count_all_results() > 0)
  165. {
  166. $this->{$this->db_group}->update($this->table, $data, "name = '".$data['name']."' ".$where);
  167. }
  168. else
  169. {
  170. $this->{$this->db_group}->insert($this->table, $data);
  171. }
  172. }
  173. // ------------------------------------------------------------------------
  174. public function delete_by_name($name)
  175. {
  176. $this->{$this->db_group}->delete($this->table, array('name' => $name));
  177. }
  178. // ------------------------------------------------------------------------
  179. /**
  180. * Updates the media table
  181. * Replaces the old path by the new one in columns "path" and "base_path"
  182. * @param $old_path
  183. * @param $new_path
  184. */
  185. public function update_media_path($old_path, $new_path)
  186. {
  187. // Example of query :
  188. // update media set path = replace(path, 'files/', 'files_new_folder/');
  189. if ($new_path)
  190. {
  191. // Update media table
  192. $sql = "UPDATE media SET path = REPLACE(path, '" . $old_path . "/', '" . $new_path . "/'), base_path = REPLACE(base_path, '" . $old_path . "/', '" . $new_path . "/') ";
  193. $this->{$this->db_group}->query($sql);
  194. // Update articles table
  195. $sql = "UPDATE article_lang SET content = REPLACE(content, '/".$old_path."/', '/" . $new_path . "/')";
  196. $this->{$this->db_group}->query($sql);
  197. }
  198. }
  199. // ------------------------------------------------------------------------
  200. /**
  201. * Clean unused language depending settings -- Kochin
  202. *
  203. * When a language is deleted, language depending settings are left untouched.
  204. * This function cleans up any unused language depending settings.
  205. *
  206. * @return Int number of rows deleted
  207. */
  208. public function clean_lang_settings()
  209. {
  210. // Get the existing languages
  211. $languages = Settings::get_languages();
  212. $lang_codes = array();
  213. foreach ($languages as $lang)
  214. {
  215. $lang_codes[] = $lang['lang'];
  216. }
  217. // Execute the cleaning request
  218. $nb_affected_rows = 0;
  219. if ( ! empty($lang_codes))
  220. {
  221. $this->{$this->db_group}->where("NOT(lang IS NULL OR lang='')")
  222. ->where_not_in('lang', $lang_codes);
  223. $nb_affected_rows = $this->{$this->db_group}->delete($this->table);
  224. }
  225. return $nb_affected_rows;
  226. }
  227. }