PageRenderTime 47ms CodeModel.GetById 18ms RepoModel.GetById 1ms app.codeStats 0ms

/administrator/components/com_jfbconnect/models/usermap.php

https://bitbucket.org/pastor399/newcastleunifc
PHP | 385 lines | 320 code | 45 blank | 20 comment | 36 complexity | 8e5c0a602a2d09af25af3907eef0541b MD5 | raw file
  1. <?php
  2. /**
  3. * @package JFBConnect
  4. * @copyright (C) 2009-2013 by Source Coast - All rights reserved
  5. * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
  6. */
  7. defined('_JEXEC') or die('Restricted access');
  8. jimport('joomla.application.component.model');
  9. class JFBConnectModelUserMap extends JModelLegacy
  10. {
  11. var $_pagination = null;
  12. static $instances;
  13. function __construct()
  14. {
  15. parent::__construct();
  16. $array = JRequest::getVar('cid', 0, '', 'array');
  17. $this->setId((int) $array[0]);
  18. if (self::$instances === null)
  19. self::$instances = array();
  20. }
  21. static public function getUser($jUserId)
  22. {
  23. if (self::$instances == null)
  24. self::$instances = array();
  25. if (!array_key_exists($jUserId, self::$instances))
  26. {
  27. $instance = new JFBConnectModelUserMap();
  28. $instance->getData($jUserId);
  29. self::$instances[$jUserId] = $instance;
  30. }
  31. return self::$instances[$jUserId];
  32. }
  33. function setId($id)
  34. {
  35. $this->_id = $id;
  36. $this->_data = null;
  37. }
  38. function &getData($j_user_id = null)
  39. {
  40. if (empty($this->_data))
  41. {
  42. if (!$j_user_id)
  43. {
  44. $query = "SELECT um.*, " .
  45. "(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_from = um.fb_user_id) sent, ".
  46. "(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_to = um.fb_user_id) received ".
  47. "FROM #__jfbconnect_user_map um ".
  48. ' WHERE id = ' . $this->_db->quote($this->_id);
  49. }
  50. else
  51. {
  52. $query = "SELECT um.*, " .
  53. "(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_from = um.fb_user_id) sent, ".
  54. "(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_to = um.fb_user_id) received ".
  55. "FROM #__jfbconnect_user_map um ".
  56. ' WHERE j_user_id = ' . $this->_db->quote($j_user_id);
  57. }
  58. $this->_db->setQuery($query);
  59. $this->_data = $this->_db->loadObject();
  60. }
  61. if ($this->_data) // Setup the params variable with the data loaded above
  62. {
  63. if(!is_object($this->_data->params) || get_class($this->_data->params) != 'JRegistry')
  64. {
  65. $this->_data->params = new JRegistry($this->_data->params);
  66. }
  67. }
  68. else
  69. {
  70. $this->_data = new stdClass();
  71. $this->_data->id = 0;
  72. $this->_data->created_at = JFactory::getDate()->toSql();
  73. $this->_data->updated_at = JFactory::getDate()->toSql();
  74. $this->_data->j_user_id = $j_user_id;
  75. $this->_data->fb_user_id = null;
  76. $this->_data->can_disable = 0;
  77. $this->_data->sent = null;
  78. $this->_data->access_token = null;
  79. $this->_data->params = new JRegistry();
  80. $this->_data->authorized = 1;
  81. $this->_data->received = null;
  82. }
  83. return $this->_data;
  84. }
  85. function &getPagination()
  86. {
  87. if ($this->_pagination == null)
  88. {
  89. $this->getList();
  90. }
  91. return $this->_pagination;
  92. }
  93. function &getViewLists()
  94. {
  95. $app = JFactory::getApplication();
  96. //Search
  97. $search = $app->getUserStateFromRequest('com_jfbconnect.usermap.search', 'search', '', 'string');
  98. $search = JString::strtolower($search);
  99. $lists['search'] = $search;
  100. //Order
  101. $filter_order = $app->getUserStateFromRequest('com_jfbconnect.usermap.filter_order', 'filter_order', 'id', 'cmd');
  102. $filter_order_Dir = $app->getUserStateFromRequest('com_jfbconnect.usermap.filter_order_Dir', 'filter_order_Dir', 'DESC', 'word');
  103. if (!$filter_order) {
  104. $filter_order = 'id';
  105. }
  106. $lists['order_Dir'] = $filter_order_Dir;
  107. $lists['order'] = $filter_order;
  108. return $lists;
  109. }
  110. function getList()
  111. {
  112. // Lets load the data if it doesn't already exist
  113. if (empty($this->_listData))
  114. {
  115. $app = JFactory::getApplication();
  116. $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'int');
  117. $limitstart = $app->getUserStateFromRequest('com_jfbconnect.usermap.limitstart', 'limitstart', 0, 'int');
  118. $filter_order = $app->getUserStateFromRequest('com_jfbconnect.usermap.filter_order', 'filter_order', 'id', 'cmd');
  119. $filter_order_Dir = $app->getUserStateFromRequest('com_jfbconnect.usermap.filter_order_Dir', 'filter_order_Dir', 'DESC', 'word');
  120. if (!$filter_order) {
  121. $filter_order = 'id';
  122. }
  123. //Search values
  124. $search = $app->getUserStateFromRequest("com_jfbconnect.usermap.search", 'search', '', 'string');
  125. $search = JString::strtolower($search);
  126. // Get our row count for pagination
  127. $query = "SELECT COUNT(*) count FROM #__jfbconnect_user_map um";
  128. if ($search != '') //Set up where clause using search
  129. {
  130. $where = " WHERE um.j_user_id LIKE '%".$search."%'" .
  131. " OR um.fb_user_id LIKE '%".$search."%'" .
  132. " OR ju.name LIKE '%".$search."%'" .
  133. " OR ju.email LIKE '%".$search."%'" .
  134. " OR ju.username LIKE '%".$search."%'";
  135. $query.= " INNER JOIN #__users ju ON ju.id=um.j_user_id" . $where;
  136. }
  137. $this->_db->setQuery($query);
  138. $total = $this->_db->loadResult();
  139. jimport('joomla.html.pagination');
  140. $this->_pagination = new JPagination($total, $limitstart, $limit);
  141. // Get our rows
  142. $query = "SELECT um.*, "
  143. ."(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_from = um.fb_user_id) sent, "
  144. ."(SELECT COUNT(*) FROM #__jfbconnect_notification WHERE fb_user_to = um.fb_user_id) received "
  145. ."FROM #__jfbconnect_user_map um";
  146. if ($search != '')
  147. {
  148. $query .= " INNER JOIN #__users ju ON ju.id = um.j_user_id" . $where;
  149. }
  150. $query .= " ORDER BY " . $filter_order . " " . $filter_order_Dir . " ";
  151. if ($limit > 0)
  152. {
  153. $query .= ' LIMIT ' . $limitstart . ', ' . $limit;
  154. }
  155. $this->_listData = $this->_getList($query);
  156. }
  157. return $this->_listData;
  158. }
  159. function update($fb_user_id)
  160. {
  161. if ($this->_data->fb_user_id != $fb_user_id)
  162. {
  163. $row = $this->getTable();
  164. $row->id = $this->_data->id;
  165. $row->created_at = $this->_data->created_at;
  166. $row->updated_at = JFactory::getDate()->toSql();
  167. $row->j_user_id = $this->_data->j_user_id;
  168. $row->fb_user_id = $fb_user_id;
  169. if (!$row->check())
  170. {
  171. $this->setError($this->_db->getErrorMsg());
  172. return false;
  173. }
  174. if (!$row->store())
  175. {
  176. $this->setError($this->_db->getErrorMsg());
  177. return false;
  178. }
  179. }
  180. return true;
  181. }
  182. function saveParameter($name, $value)
  183. {
  184. $user = JFactory::getUser();
  185. $row = $this->getTable();
  186. $row->load(array('j_user_id' => $user->get('id')));
  187. // Want to save each parameter in a non-destructive way to other parameters
  188. $params = new JRegistry($row->params);
  189. $params->set($name, $value);
  190. $row->params = $params->toString();
  191. if (!$row->check())
  192. {
  193. $this->setError($this->_db->getErrorMsg());
  194. return false;
  195. }
  196. if (!$row->store())
  197. {
  198. $this->setError($this->_db->getErrorMsg());
  199. return false;
  200. }
  201. $this->_data->params = $params;
  202. }
  203. function delete()
  204. {
  205. $cids = JRequest::getVar('cid', array(0), 'post', 'array');
  206. $row = $this->getTable();
  207. if (count($cids))
  208. {
  209. foreach ($cids as $cid)
  210. {
  211. if (!$row->delete($cid))
  212. {
  213. $this->setError($row->getErrorMsg());
  214. return false;
  215. }
  216. }
  217. }
  218. return true;
  219. }
  220. function deleteMapping($fbUid)
  221. {
  222. $query = "DELETE FROM #__jfbconnect_user_map " .
  223. "WHERE fb_user_id=" . $this->_db->quote($fbUid);
  224. $this->_db->setQuery($query);
  225. $this->_db->execute();
  226. }
  227. function deleteMappingWithJoomlaId($userId)
  228. {
  229. $query = "DELETE FROM #__jfbconnect_user_map " .
  230. "WHERE j_user_id=" . $this->_db->quote($userId);
  231. $this->_db->setQuery($query);
  232. $this->_db->execute();
  233. }
  234. function getJoomlaUserId($fbUid)
  235. {
  236. $query = "SELECT j_user_id FROM #__jfbconnect_user_map " .
  237. "WHERE fb_user_id=" . $this->_db->quote($fbUid);
  238. $this->_db->setQuery($query);
  239. $joomlaId = $this->_db->loadResult();
  240. return $joomlaId;
  241. }
  242. function getFacebookUserId($joomlaId)
  243. {
  244. $query = "SELECT fb_user_id FROM #__jfbconnect_user_map " .
  245. "WHERE j_user_id=" . $this->_db->quote($joomlaId);
  246. $this->_db->setQuery($query);
  247. $facebookId = $this->_db->loadResult();
  248. return $facebookId;
  249. }
  250. function mapUser($fbUid, $jUserId = null)
  251. {
  252. if ($jUserId)
  253. $user = JUser::getInstance($jUserId);
  254. else
  255. $user = JFactory::getUser();
  256. #echo "Mapping user<br>";
  257. if ($user->id && $fbUid)
  258. {
  259. #echo "User and FB id found, ".$user->id.", $fbUid<br>";
  260. JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_jfbconnect/' . 'models');
  261. $model = JModelLegacy::getInstance('JFBConnectModelUserMap');
  262. $jMappingId = self::getJoomlaUserId($fbUid);
  263. if ($user->get('id') != $jMappingId)
  264. {
  265. #echo "Joomla ID not mapped to this user, updating<br>";
  266. if ($jMappingId) # delete old mapping if it exists
  267. $model->deleteMapping($fbUid);
  268. $model->getData($user->id);
  269. #echo "mapUser: ".$user->id." => ".$fbUid.": ";
  270. if ($model->update($fbUid))
  271. {
  272. #echo "Map updated<br>";
  273. return true;
  274. }
  275. else
  276. {
  277. #echo "Map error<br>";
  278. return false;
  279. }
  280. }
  281. else
  282. return true; // No mapping necessary
  283. }
  284. else
  285. {
  286. return false;
  287. }
  288. }
  289. function getTotalMappings($includeBlocks = true)
  290. {
  291. $query = "SELECT count(*) FROM #__jfbconnect_user_map jfbc ";
  292. if (!$includeBlocks)
  293. {
  294. $query .= " INNER JOIN #__users ju ON ju.id=jfbc.j_user_id WHERE ju.block = 0 AND jfbc.authorized = 1";
  295. }
  296. $this->_db->setQuery($query);
  297. return $this->_db->loadResult();
  298. }
  299. // Simple array of all active FB Ids. Used for sending requests to all users
  300. function getActiveUserFbIds($start = null, $length = null)
  301. {
  302. $query = "SELECT fb_user_id FROM #__jfbconnect_user_map jfbc ".
  303. " INNER JOIN #__users ju ON ju.id=jfbc.j_user_id ".
  304. " WHERE ju.block = 0 AND jfbc.authorized = 1";
  305. $this->_db->setQuery($query, $start, $length);
  306. return $this->_db->loadColumn();
  307. }
  308. function getJoomlaUserIdFromEmail($email)
  309. {
  310. $query = "SELECT id FROM #__users WHERE email = " . $this->_db->quote($email);
  311. $this->_db->setQuery($query);
  312. return $this->_db->loadResult();
  313. }
  314. function getFbIdsFromList($array)
  315. {
  316. $query = "SELECT fb_user_id FROM #__jfbconnect_user_map WHERE id IN (".implode(', ', $array). ")";
  317. $this->_db->setQuery($query);
  318. return $this->_db->loadColumn();
  319. }
  320. function updateUserToken($jUserId, $token)
  321. {
  322. $query = "UPDATE #__jfbconnect_user_map SET " .
  323. "authorized=1, " .
  324. "access_token = " . $this->_db->quote($token) . ", " .
  325. "updated_at = " . $this->_db->quote(JFactory::getDate()->toSql()) .
  326. " WHERE j_user_id = " . $this->_db->quote($jUserId);
  327. $this->_db->setQuery($query);
  328. $this->_db->execute();
  329. }
  330. // Used for the callback from Facebook if the user has de-authorized the application
  331. function setAuthorized($fbUserId, $authorize)
  332. {
  333. $query = "UPDATE #__jfbconnect_user_map SET ".
  334. "authorized = " . $this->_db->quote($authorize) . ", " .
  335. "updated_at = " . $this->_db->quote(JFactory::getDate()->toSql()) .
  336. " WHERE fb_user_id = " . $this->_db->quote($fbUserId);
  337. $this->_db->setQuery($query);
  338. $this->_db->execute();
  339. }
  340. }