/** * Saves all tags from a FAQ record * * @param integer $record_id Record ID * @param array $tags Array of tags */ public function saveTags($record_id, $tags) { if (!is_array($tags)) { return false; } $current_tags = $this->getAllTags(); // Delete all tag references for the faq record if (count($tags) > 0) { $this->deleteTagsFromRecordId($record_id); } // Store tags and references for the faq record foreach ($tags as $tagging_name) { $tagging_name = trim($tagging_name); if (PMF_String::strlen($tagging_name) > 0) { if (!in_array(PMF_String::strtolower($tagging_name), array_map(array('PMF_String', 'strtolower'), $current_tags))) { // Create the new tag $new_tagging_id = $this->db->nextID(SQLPREFIX . 'faqtags', 'tagging_id'); $query = sprintf("\n INSERT INTO\n %sfaqtags\n (tagging_id, tagging_name)\n VALUES\n (%d, '%s')", SQLPREFIX, $new_tagging_id, $tagging_name); $this->db->query($query); // Add the tag reference for the faq record $query = sprintf("\n INSERT INTO\n %sfaqdata_tags\n (record_id, tagging_id)\n VALUES\n (%d, %d)", SQLPREFIX, $record_id, $new_tagging_id); $this->db->query($query); } else { // Add the tag reference for the faq record $query = sprintf("\n INSERT INTO\n %sfaqdata_tags\n (record_id, tagging_id)\n VALUES\n (%d, %d)", SQLPREFIX, $record_id, array_search(PMF_String::strtolower($tagging_name), array_map(array('PMF_String', 'strtolower'), $current_tags))); $this->db->query($query); } } } return true; }
/** * Adds a comment * * @param array $commentData Array with comment dara * @return boolean */ function addComment(array $commentData) { $query = sprintf("\n INSERT INTO\n %sfaqcomments\n VALUES\n (%d, %d, '%s', '%s', '%s', '%s', %d, '%s')", SQLPREFIX, $this->db->nextID(SQLPREFIX . 'faqcomments', 'id_comment'), $commentData['record_id'], $commentData['type'], $commentData['username'], $commentData['usermail'], $commentData['comment'], $commentData['date'], $commentData['helped']); if (!$this->db->query($query)) { return false; } return true; }
/** * Logging of search terms for improvements * * @param string $searchterm Search term * @return void */ public function logSearchTerm($searchterm) { if (PMF_String::strlen($searchterm) == 0) { return; } $date = new DateTime(); $query = sprintf("\n INSERT INTO\n %s\n (id, lang, searchterm, searchdate)\n VALUES\n (%d, '%s', '%s', '%s')", $this->_table, $this->db->nextID($this->_table, 'id'), $this->language, $this->db->escapeString($searchterm), $date->format('Y-m-d H:i:s')); $this->db->query($query); }
/** * Adds a new adminlog entry * * @param PMF_User $user PMF_User object * @param string $logText Logged string * * @return boolean */ public function logAdmin(PMF_User $user, $logText = '') { if (PMF_Configuration::getInstance()->get('main.enableAdminLog')) { $query = sprintf("\n INSERT INTO\n %sfaqadminlog\n (id, time, usr, text, ip)\n VALUES \n (%d, %d, %d, '%s', '%s')", SQLPREFIX, $this->db->nextID(SQLPREFIX . 'faqadminlog', 'id'), $_SERVER['REQUEST_TIME'], $user->userdata->get('user_id'), $this->db->escapeString(nl2br($logText)), $_SERVER['REMOTE_ADDR']); return $this->db->query($query); } else { return false; } }
/** * Adds a new changelog entry in the table faqchanges * * @param integer $id * @param integer $userId * @param string $text * @param string $lang * @param integer $revision_id * @return boolean * @access private * @since 2006-08-18 * @author Thorsten Rinne <*****@*****.**> * @author Matteo Scaramuccia <*****@*****.**> */ function createChangeEntry($id, $userId, $text, $lang, $revision_id = 0) { if (!is_numeric($id) && !is_numeric($userId) && !is_string($text) && !is_string($lang)) { return false; } $query = sprintf("INSERT INTO\n %sfaqchanges\n (id, beitrag, lang, revision_id, usr, datum, what)\n VALUES\n (%d, %d, '%s', %d, %d, %d, '%s')", SQLPREFIX, $this->db->nextID(SQLPREFIX . 'faqchanges', 'id'), $id, $lang, $revision_id, $userId, $_SERVER['REQUEST_TIME'], $text); $this->db->query($query); return true; }
/** * Add a word to the stop words dictionary. * If the given word already exists, false is returned. * * @param string $word * * @return boolean */ public function add($word) { if (!$this->match($word)) { $sql = "INSERT INTO {$this->table_name} VALUES(%d, '%s', '%s')"; $sql = sprintf($sql, $this->db->nextID($this->table_name, 'id'), $this->language, $word); $this->db->query($sql); return true; } return false; }
/** * Creates a new entry * * @param array $data Array of data * * @return boolean * @throws PMF_Exception */ public function create(array $data) { if (is_null($data['id'])) { $votingId = $this->db->nextID(SQLPREFIX . 'faqvoting', 'id'); } $query = sprintf("\n INSERT INTO\n %sfaqvoting\n VALUES\n (%d, %d, %d, 1, %d, '%s')", SQLPREFIX, $votingId, $data['record_id'], $data['vote'], $data['date'], $data['user_ip']); $result = $this->db->query($query); if (!$result) { throw new PMF_Exception($this->db->error()); } return $result; }
/** * Tracks the user and log what he did * * @param string $action Action string * @param integer $id Current ID * * @return void */ public function userTracking($action, $id = 0) { global $sid, $user, $botBlacklist; if (PMF_Configuration::getInstance()->get('main.enableUserTracking')) { $bots = 0; $banned = false; $agent = $_SERVER['HTTP_USER_AGENT']; $sid = PMF_Filter::filterInput(INPUT_GET, PMF_GET_KEY_NAME_SESSIONID, FILTER_VALIDATE_INT); $sidc = PMF_Filter::filterInput(INPUT_COOKIE, PMF_COOKIE_NAME_SESSIONID, FILTER_VALIDATE_INT); if (!is_null($sidc)) { $sid = $sidc; } if ($action == 'old_session') { $sid = null; } foreach ($botBlacklist as $bot) { if ((bool) PMF_String::strstr($agent, $bot)) { $bots++; } } $network = new PMF_Network(); if (!$network->checkIp($_SERVER['REMOTE_ADDR'])) { $banned = true; } if (0 == $bots && false == $banned) { if (!isset($sid)) { $sid = $this->db->nextID(SQLPREFIX . 'faqsessions', 'sid'); // Sanity check: force the session cookie to contains the current $sid if (!is_null($sidc) && !$sidc != $sid) { self::setCookie($sid); } $query = sprintf("\n INSERT INTO \n %sfaqsessions\n (sid, user_id, ip, time)\n VALUES\n (%d, %d, '%s', %d)", SQLPREFIX, $sid, $user ? $user->getUserId() : -1, $_SERVER['REMOTE_ADDR'], $_SERVER['REQUEST_TIME']); $this->db->query($query); } $data = $sid . ';' . str_replace(';', ',', $action) . ';' . $id . ';' . $_SERVER['REMOTE_ADDR'] . ';' . str_replace(';', ',', $_SERVER['QUERY_STRING']) . ';' . str_replace(';', ',', isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '') . ';' . str_replace(';', ',', urldecode($_SERVER['HTTP_USER_AGENT'])) . ';' . $_SERVER['REQUEST_TIME'] . ";\n"; $file = './data/tracking' . date('dmY'); file_put_contents($file, $data, FILE_APPEND); } } }