PageRenderTime 24ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/application/models/phonebook_model.php

https://github.com/alimashuri/custom_kalkun
PHP | 404 lines | 247 code | 51 blank | 106 comment | 34 complexity | 266d8ba15d245662e4aa2bdd782fb861 MD5 | raw file
  1. <?php
  2. /**
  3. * Kalkun
  4. * An open source web based SMS Management
  5. *
  6. * @package Kalkun
  7. * @author Kalkun Dev Team
  8. * @license http://kalkun.sourceforge.net/license.php
  9. * @link http://kalkun.sourceforge.net
  10. */
  11. // ------------------------------------------------------------------------
  12. /**
  13. * Phonebook_model Class
  14. *
  15. * Handle all phonebook database activity
  16. *
  17. * @package Kalkun
  18. * @subpackage Phonebook
  19. * @category Models
  20. */
  21. class Phonebook_model extends Model {
  22. /**
  23. * Constructor
  24. *
  25. * @access public
  26. */
  27. function Phonebook_model()
  28. {
  29. parent::Model();
  30. }
  31. // --------------------------------------------------------------------
  32. /**
  33. * Get Phonebook
  34. *
  35. * @access public
  36. * @param mixed $param
  37. * @return object
  38. */
  39. function get_phonebook($param)
  40. {
  41. if( isset($param['id_user']) && !empty($param['id_user']) ) $user_id = $param['id_user'];
  42. else $user_id = $this->session->userdata('id_user') ;
  43. switch($param['option'])
  44. {
  45. case 'all':
  46. $this->db->select('*');
  47. $this->db->select_as('pbk.ID','id_pbk');
  48. $this->db->select_as('pbk_groups.Name', 'GroupName');
  49. $this->db->from('pbk');
  50. $this->db->where('pbk.id_user', $user_id);
  51. $this->db->join('user_group', 'user_group.id_pbk=pbk.ID', 'left');
  52. $this->db->join('pbk_groups', 'pbk_groups.ID=user_group.id_pbk_groups', 'left');
  53. $this->db->order_by('pbk.Name');
  54. break;
  55. case 'paginate':
  56. $this->db->select('*');
  57. $this->db->select_as('ID', 'id_pbk');
  58. $this->db->from('pbk');
  59. if(isset($param['public']) && $param['public']) $this->db->where('is_public', 'true');
  60. else $this->db->where('id_user',$user_id);
  61. $this->db->order_by('Name');
  62. $this->db->limit($param['limit'], $param['offset']);
  63. break;
  64. case 'by_idpbk':
  65. $this->db->select('pbk.*');
  66. $this->db->select_as('pbk.ID','id_pbk');
  67. $this->db->select_as('pbk.Name', 'Name');
  68. $this->db->select_as('pbk_groups.Name', 'GroupName');
  69. $this->db->from('pbk');
  70. $this->db->where('pbk.id_user', $user_id);
  71. $this->db->join('user_group', 'user_group.id_pbk=pbk.ID', 'left');
  72. $this->db->join('pbk_groups', 'pbk_groups.ID=user_group.id_pbk_groups', 'left');
  73. $this->db->where('pbk.ID', $param['id_pbk']);
  74. break;
  75. case 'group':
  76. $this->db->select('*');
  77. $this->db->select_as('Name','GroupName');
  78. $this->db->from('pbk_groups');
  79. if(isset($param['public']) && $param['public']) $this->db->where('is_public', 'true');
  80. else $this->db->where('id_user',$user_id);
  81. $this->db->order_by('Name');
  82. break;
  83. case 'group_paginate':
  84. $this->db->select('*');
  85. $this->db->select_as('Name', 'GroupName');
  86. $this->db->from('pbk_groups');
  87. if(isset($param['public']) && $param['public']) $this->db->where('is_public', 'true');
  88. else $this->db->where('id_user',$user_id);
  89. $this->db->order_by('Name');
  90. $this->db->limit($param['limit'], $param['offset']);
  91. break;
  92. case 'groupname':
  93. $this->db->select('ID');
  94. $this->db->select_as('Name', 'GroupName');
  95. $this->db->from('pbk_groups');
  96. $this->db->where('id_user', $user_id);
  97. $this->db->or_where('is_public', 'true');
  98. $this->db->having('ID', $param['id']);
  99. break;
  100. case 'bynumber':
  101. $this->db->select('*');
  102. $this->db->select_as('ID', 'id_pbk');
  103. $this->db->from('pbk');
  104. $this->db->where("(`id_user` = '$user_id' or `is_public` = 'true' ) AND `Number` = '{$param['number']}'");
  105. break;
  106. case 'bygroup':
  107. $this->db->select('*');
  108. $this->db->from('pbk');
  109. $this->db->select_as('pbk.Name', 'Name');
  110. $this->db->select_as('pbk_groups.Name', 'GroupName');
  111. $this->db->join('user_group', 'user_group.id_pbk=pbk.ID');
  112. $this->db->join('pbk_groups', 'pbk_groups.ID=user_group.id_pbk_groups');
  113. $this->db->where('pbk_groups.id_user', $user_id);
  114. $this->db->or_where('pbk_groups.is_public', 'true');
  115. $this->db->having('user_group.id_pbk_groups', $param['group_id']);
  116. $this->db->order_by("pbk.Name", "asc");
  117. if(isset($param['limit']) && isset($param['offset'])) $this->db->limit($param['limit'], $param['offset']);
  118. break;
  119. case 'search':
  120. $this->db->select('*');
  121. $this->db->select_as('ID', 'id_pbk');
  122. $this->db->from('pbk');
  123. $this->db->or_like(array('Name' => $this->input->post('search_name'), 'Number' =>$this->input->post('search_name')));
  124. $this->db->having('id_user', $user_id);
  125. $this->db->or_having('is_public', 'true');
  126. $this->db->order_by('Name');
  127. break;
  128. case 'public':
  129. $this->db->select('*');
  130. $this->db->select_as('pbk.ID','id_pbk');
  131. $this->db->select_as('pbk_groups.Name', 'GroupName');
  132. $this->db->from('pbk');
  133. $this->db->where('pbk.is_public', 'true');
  134. $this->db->join('user_group', 'user_group.id_pbk=pbk.ID', 'left');
  135. $this->db->join('pbk_groups', 'pbk_groups.ID=user_group.id_pbk_groups', 'left');
  136. $this->db->order_by('pbk.Name');
  137. break;
  138. }
  139. return $this->db->get();
  140. }
  141. // --------------------------------------------------------------------
  142. /**
  143. * Search Phonebook
  144. *
  145. * @access public
  146. * @param mixed $param
  147. * @return object
  148. */
  149. function search_phonebook($param)
  150. {
  151. $this->db->from('pbk');
  152. $this->db->select_as('Number', 'id');
  153. $this->db->select_as('Name', 'name');
  154. $this->db->where("(`id_user` = '{$param['uid']}' OR `is_public` = 'true' )");
  155. $this->db->like('Name', $param['query']);
  156. $this->db->order_by('Name');
  157. return $this->db->get();
  158. }
  159. // --------------------------------------------------------------------
  160. /**
  161. * Search Group
  162. *
  163. * @access public
  164. * @param mixed $param
  165. * @return object
  166. */
  167. function search_group($param)
  168. {
  169. $this->db->from('pbk_groups');
  170. $this->db->select_as('ID', 'id');
  171. $this->db->select_as('Name', 'name');
  172. $this->db->where("(`id_user` = '{$param['uid']}' OR `is_public` = 'true' )");
  173. $this->db->like('Name', $param['query']);
  174. $this->db->order_by('Name');
  175. return $this->db->get();
  176. }
  177. // --------------------------------------------------------------------
  178. /**
  179. * Add Contact
  180. *
  181. * @access public
  182. * @param mixed $param
  183. * @return
  184. */
  185. function add_contact($param)
  186. {
  187. $this->db->set('Name', $param['Name']);
  188. $this->db->set('Number', $param['Number']);
  189. $this->db->set('id_user', $param['id_user']);
  190. $this->db->set('is_public', $param['is_public']);
  191. // edit mode
  192. if(isset($param['id_pbk']))
  193. {
  194. $this->db->where('ID', $param['id_pbk']);
  195. $this->db->update('pbk');
  196. }
  197. else $this->db->insert('pbk');
  198. // optimisation required.
  199. if(isset($param['id_pbk']))
  200. {
  201. $pbk_id = $param['id_pbk'];
  202. }
  203. else $pbk_id = $this->db->insert_id();
  204. //delete past groups
  205. $this->db->delete('user_group', array('id_pbk' => $pbk_id));
  206. // now insert the lastest
  207. if(isset($param['GroupID']))
  208. if(!empty($param['GroupID']))
  209. {
  210. $this->db->set('id_pbk', $pbk_id);
  211. $this->db->set('id_pbk_groups', $param['GroupID']);
  212. $this->db->set('id_user', $param['id_user']);
  213. $this->db->insert('user_group');
  214. }
  215. if(isset($param['Groups']))
  216. if(!empty($param['Groups'])){
  217. $groups = array_unique(explode(',',$param['Groups']));
  218. $CI =& get_instance();
  219. foreach($groups as $_grp)
  220. {
  221. $group_id = $CI->Phonebook_model->group_id($_grp,$param['id_user']);
  222. if($group_id != null)
  223. {
  224. $this->db->set('id_pbk', $pbk_id);
  225. $this->db->set('id_pbk_groups', $group_id);
  226. $this->db->set('id_user', $param['id_user']);
  227. $this->db->insert('user_group');
  228. }
  229. }
  230. }
  231. }
  232. function multi_attach_group()
  233. {
  234. $id_group = $this->input->post('id_group');
  235. $id_pbk = $this->input->post('id_pbk');
  236. if($id_group == 'null' ) die("Invalid Group ID");
  237. //parse group value
  238. if(preg_match('/-/',$id_group)) { $mode = 'delete'; $id_group = substr($id_group,1); }
  239. else $mode = 'add';
  240. if($mode == 'delete')
  241. {
  242. $this->db->delete('user_group', array('id_pbk' => $id_pbk , 'id_pbk_groups' => $id_group));
  243. }
  244. else // Add Mode
  245. {
  246. $this->db->from('user_group');
  247. $this->db->where('id_pbk', $id_pbk);
  248. $this->db->where('id_pbk_groups', $id_group);
  249. if($this->db->get()->num_rows() < 1)
  250. {
  251. $this->db->set('id_pbk', $id_pbk);
  252. $this->db->set('id_pbk_groups', $id_group);
  253. $this->db->set('id_user', $this->session->userdata('id_user'));
  254. $this->db->insert('user_group');
  255. }
  256. }
  257. }
  258. // --------------------------------------------------------------------
  259. /**
  260. * Add Group
  261. *
  262. * @access public
  263. * @param mixed $param
  264. * @return
  265. */
  266. function add_group()
  267. {
  268. $this->db->set('Name', trim($this->input->post('group_name')));
  269. $this->db->set('id_user', trim($this->input->post('pbkgroup_id_user')));
  270. $this->db->set('is_public', $this->input->post('is_public')? 'true' : 'false');
  271. // edit mode
  272. if($this->input->post('pbkgroup_id'))
  273. {
  274. $this->db->where('ID', $this->input->post('pbkgroup_id'));
  275. $this->db->update('pbk_groups');
  276. }
  277. else $this->db->insert('pbk_groups');
  278. }
  279. // --------------------------------------------------------------------
  280. /**
  281. * Get Groups ID for a Group Name
  282. *
  283. * @access public
  284. * @param text $group_name
  285. * @param number $user_id
  286. * @return
  287. */
  288. function group_id($group_name, $user_id)
  289. {
  290. $this->db->select('*');
  291. $this->db->from('pbk_groups');
  292. $this->db->where('Name', $group_name);
  293. $this->db->where('id_user', $user_id);
  294. return @$this->db->get()->row()->ID;
  295. }
  296. // --------------------------------------------------------------------
  297. /**
  298. * Get Groups for a contact id
  299. *
  300. * @access public
  301. * @param number $pbk_id
  302. * @param number $user_id
  303. * @return
  304. */
  305. function get_groups($pbk_id,$user_id)
  306. {
  307. $this->db->select_as('user_group.id_pbk_groups', 'GroupID');
  308. $this->db->select_as('pbk_groups.Name', 'GroupName');
  309. $this->db->from('user_group');
  310. $this->db->join('pbk_groups', 'pbk_groups.ID=user_group.id_pbk_groups');
  311. $this->db->where('user_group.id_user', $user_id);
  312. $this->db->where('user_group.id_pbk', $pbk_id);
  313. $q = $this->db->get();
  314. $GroupID = $GroupName = '';
  315. foreach ($q->result() as $_gp)
  316. {
  317. $GroupName .= $_gp->GroupName.',';
  318. $GroupID .= $_gp->GroupID .',';
  319. }
  320. $GroupName = substr($GroupName,0, strlen($GroupName)-1);
  321. $GroupID = substr($GroupID,0, strlen($GroupID)-1);
  322. return (object) array("GroupNames" => $GroupName, "GroupIDs" => $GroupID);
  323. }
  324. // --------------------------------------------------------------------
  325. /**
  326. * Delete Contact
  327. *
  328. * @access public
  329. * @param number $id_contact
  330. * @return
  331. */
  332. function delete_contact()
  333. {
  334. $this->db->delete('pbk', array('ID' => $this->input->post('id')));
  335. $this->db->delete('user_group', array('id_pbk' => $this->input->post('id')));
  336. }
  337. // --------------------------------------------------------------------
  338. /**
  339. * Delete Group
  340. *
  341. * @access public
  342. * @param mixed $id_group
  343. * @return
  344. */
  345. function delete_group()
  346. {
  347. $this->db->delete('pbk', array('GroupID' => $this->input->post('id')));
  348. $this->db->delete('pbk_groups', array('ID' => $this->input->post('id')));
  349. $this->db->delete('user_group', array('id_pbk_groups' => $this->input->post('id')));
  350. }
  351. }
  352. /* End of file phonebook_model.php */
  353. /* Location: ./application/models/phonebook_model.php */