public static function save() { JCommentsSecurity::checkToken(); $task = JCommentsInput::getVar('task'); $id = (int) JCommentsInput::getVar('id', 0); require_once JCOMMENTS_TABLES . '/subscription.php'; $db = JCommentsFactory::getDBO(); $row = new JCommentsTableSubscription($db); if ($id) { $row->load($id); } $row->object_id = (int) JCommentsInput::getVar('object_id'); $row->object_group = JCommentsSecurity::clearObjectGroup(JCommentsInput::getVar('object_group')); $row->name = preg_replace("/[\\'\"\\>\\<\\(\\)\\[\\]]?+/i", '', strip_tags(JCommentsInput::getVar('name'))); $row->email = trim(strip_tags(JCommentsInput::getVar('email'))); $row->published = (int) JCommentsInput::getVar('published'); if (!$row->id) { $query = "SELECT id, name FROM #__users WHERE email = " . $db->Quote($row->email); $db->setQuery($query); $users = $db->loadObjectList(); if (count($users)) { $row->userid = $users[0]->id; $row->name = $users[0]->name; } else { $row->userid = 0; } $row->lang = ''; // TODO: add language selection if JoomFish installed } $row->store(); switch ($task) { case 'subscription.apply': JCommentsRedirect(JCOMMENTS_INDEX . '?option=com_jcomments&task=subscription.edit&hidemainmenu=1&cid[]=' . $row->id); break; case 'subscription.save': default: JCommentsRedirect(JCOMMENTS_INDEX . '?option=com_jcomments&task=subscriptions'); break; } }
/** * Subscribes user for new comments notifications for an object * * @param int $object_id The object identifier * @param string $object_group The object group (component name) * @param int $userid The registered user identifier * @param string $email The user email (for guests only) * @param string $name The user name (for guests only) * @param string $lang The user language * @return boolean True on success, false otherwise. */ function subscribe($object_id, $object_group, $userid, $email = '', $name = '', $lang = '') { $object_id = (int) $object_id; $object_group = trim($object_group); $userid = (int) $userid; $result = false; if ($lang == '') { $lang = JCommentsMultilingual::getLanguage(); } $db = JCommentsFactory::getDBO(); if ($userid != 0) { $user = JCommentsFactory::getUser($userid); $name = $user->name; $email = $user->email; unset($user); } $query = "SELECT * " . " FROM #__jcomments_subscriptions" . " WHERE object_id = " . (int) $object_id . " AND object_group = " . $db->Quote($object_group) . " AND email = " . $db->Quote($email) . (JCommentsMultilingual::isEnabled() ? " AND lang = " . $db->Quote($lang) : ""); $db->setQuery($query); $rows = $db->loadObjectList(); require_once JCOMMENTS_TABLES . '/subscription.php'; if (count($rows) == 0) { $subscription = new JCommentsTableSubscription($db); $subscription->object_id = $object_id; $subscription->object_group = $object_group; $subscription->name = $name; $subscription->email = $email; $subscription->userid = $userid; $subscription->lang = $lang; $subscription->published = 1; $subscription->store(); $result = true; } else { // if current user is registered, but already exists subscription // on same email by guest - update subscription data if ($userid > 0 && $rows[0]->userid == 0) { $subscription = new JCommentsTableSubscription($db); $subscription->id = $rows[0]->id; $subscription->userid = $userid; $subscription->lang = $lang; $subscription->store(); $result = true; } else { $this->_errors[] = JText::_('ERROR_ALREADY_SUBSCRIBED'); } } if ($result) { $cache = JCommentsFactory::getCache('com_jcomments_subscriptions_' . strtolower($object_group)); $cache->clean(); } return $result; }