static function newestWikiRevision($phrase, $page) { $match = -1; $i = 0; $page = end(TikiLib::fetchAll("SELECT data, version FROM tiki_pages WHERE pageName = ?", array($page))); $page['data'] = TikiLib::lib("parser")->parse_data($page['data']); $match = JisonParser_Phraser_Handler::hasPhrase($page['data'], $phrase) == true ? $page['version'] : -1; if ($match < 0) { foreach (TikiLib::fetchAll("SELECT data, version FROM tiki_history WHERE pageName = ? ORDER BY version DESC", array($page)) as $page) { $match = JisonParser_Phraser_Handler::hasPhrase($page['data'], $phrase) == true ? $page['version'] : -1; if ($match > -1) { break; } } } return (int) $match; }
function appendToContents(&$contents, $item) { global $prefs, $_REQUEST; $replace = false; //lets remove the newentry if it has already been accepted in the past foreach ($contents->entry as $i => $existingEntry) { foreach ($item->feed->entry as $j => $newEntry) { if ($existingEntry->textlink->text == $newEntry->textlink->text && $existingEntry->textlink->href == $newEntry->textlink->href) { unset($item->feed->entry[$j]); } } } //lets check if the hash is correct and that the phrase actually exists within the wiki page $checks = array(); foreach ($item->feed->entry as $i => $newEntry) { $checks[$i] = array(); $checks[$i]['titleHere'] = utf8_encode(implode('', JisonParser_Phraser_Handler::sanitizeToWords($prefs['browsertitle']))); $checks[$i]['phraseThere'] = utf8_encode(implode('', JisonParser_Phraser_Handler::sanitizeToWords($newEntry->forwardlink->text))); $checks[$i]['hashHere'] = hash_hmac('md5', $checks[$i]['titleHere'], $checks[$i]['phraseThere']); $checks[$i]['hashThere'] = $newEntry->forwardlink->hash; $checks[$i]['exists'] = JisonParser_Phraser_Handler::hasPhrase(TikiLib::lib('wiki')->get_parse($_REQUEST['page']), utf8_encode($newEntry->forwardlink->text)); $checks[$i]['reason'] = ''; if ($checks[$i]['hashHere'] != $checks[$i]['hashThere']) { $checks[$i]['reason'] .= '_hash_'; unset($item->feed->entry[$i]); } if ($newEntry->forwardlink->websiteTitle != $prefs['browsertitle']) { $checks[$i]['reason'] .= '_title_'; unset($item->feed->entry[$i]); } if (!$checks[$i]['exists']) { if (empty($checks[$i]['reason'])) { $checks[$i]['reason'] .= '_no_existence_hash_pass_'; } else { $checks[$i]['reason'] .= '_no_existence_'; } unset($item->feed->entry[$i]); } } if ($this->debug) { print_r($checks); } if (count($item->feed->entry) > 0) { $replace = true; $contents->entry += $item->feed->entry; } return $replace; }
static function restoreTextLinkPhrasesInWikiPage($items, $phrase = "") { global $tikilib, $headerlib, $smarty; $phrase = JisonParser_Phraser_Handler::superSanitize($phrase); $phrases = array(); $phraseMatchIndex = -1; $parsed = $smarty->getTemplateVars('parsed'); if (empty($parsed)) { $parsed = $smarty->getTemplateVars('previewd'); } foreach ($items as &$item) { if (!empty($item->forwardlink->href)) { if (JisonParser_Phraser_Handler::hasPhrase($parsed, $item->textlink->text) != true) { continue; } $phrases[] = $item->textlink->text; $i = count($phrases) - 1; if (JisonParser_Phraser_Handler::superSanitize($phrase) == JisonParser_Phraser_Handler::superSanitize($item->textlink->text)) { $phraseMatchIndex = $i; } $item->forwardlink->dateLastUpdated = $tikilib->get_short_datetime($item->forwardlink->dateLastUpdated); $item->forwardlink->dateOriginated = $tikilib->get_short_datetime($item->forwardlink->dateOriginated); $item->textlink->dateLastUpdated = $tikilib->get_short_datetime($item->textlink->dateLastUpdated); $item->textlink->dateOriginated = $tikilib->get_short_datetime($item->textlink->dateOriginated); $headerlib->add_jq_onready("var phrase = \$('span.textlinkMiddle" . $i . "')\n\t\t\t\t\t\t.addClass('ui-state-highlight');\n\n\t\t\t\t\tvar phraseLink = \$('<a><sup>&</sup></a>')\n\t\t\t\t\t\t.data('metadataHere', " . json_encode($item->textlink) . ")\n\t\t\t\t\t\t.data('metadataThere', " . json_encode($item->forwardlink) . ")\n\t\t\t\t\t\t.addClass('textlinkA')\n\t\t\t\t\t\t.insertAfter(phrase.last());"); } } $phraser = new JisonParser_Phraser_Handler(); $phraser->setCssWordClasses(array('start' => 'textlinkStart', 'middle' => 'textlinkMiddle', 'end' => 'textlinkEnd')); if ($phraseMatchIndex > -1) { $headerlib->add_jq_onready("var selection = \$('span.textlinkStart" . $phraseMatchIndex . ",span.textlinkEnd" . $phraseMatchIndex . "').realHighlight();\n\n\t\t\t\t\$('body,html').animate({\n\t\t\t\t\tscrollTop: selection.first().offset().top - 10\n\t\t\t\t});"); } self::restorePhrasesInWikiPage($phraser, $phrases); }
function appendToContents(&$contents, $item) { global $prefs, $_REQUEST; if ($this->debug == true) { ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); } $this->itemsAdded = false; foreach ($item->feed->entry as $i => $newEntry) { $this->verifications[$i] = array(); $this->verifications[$i]["reason"] = array(); //lets remove the new entry if it has already been accepted in the past foreach ($contents->entry as &$existingEntry) { if ($existingEntry->textlink->text == $newEntry->textlink->text && $existingEntry->textlink->href == $newEntry->textlink->href) { $this->verifications[$i]['reason'][] = 'exists'; unset($item->feed->entry[$i]); } } $revision = Feed_ForwardLink_Search::findWikiRevision($newEntry->forwardlink->text); $this->verifications[$i]["hashBy"] = JisonParser_Phraser_Handler::superSanitize($newEntry->forwardlink->author . $newEntry->forwardlink->authorInstitution . $newEntry->forwardlink->authorProfession); $this->verifications[$i]['foundRevision'] = $revision; $this->verifications[$i]["metadataHere"] = $this->metadata->raw; $this->verifications[$i]["phraseThere"] = JisonParser_Phraser_Handler::superSanitize($newEntry->forwardlink->text); $this->verifications[$i]["hashHere"] = hash_hmac("md5", $this->verifications[$i]["hashBy"], $this->verifications[$i]["phraseThere"]); $this->verifications[$i]["hashThere"] = $newEntry->forwardlink->hash; $this->verifications[$i]['exists'] = JisonParser_Phraser_Handler::hasPhrase($revision['data'], $this->verifications[$i]["phraseThere"]); if ($this->verifications[$i]['hashHere'] != $this->verifications[$i]['hashThere']) { $this->verifications[$i]['reason'][] = 'hash_tampering'; unset($item->feed->entry[$i]); } if ($newEntry->forwardlink->websiteTitle != $prefs['browsertitle']) { $this->verifications[$i]['reason'][] = 'title'; unset($item->feed->entry[$i]); } if ($this->verifications[$i]['exists'] == false) { if (empty($this->verifications[$i]['reason'])) { $this->verifications[$i]['reason'][] = 'no_existence_hash_pass'; } else { $this->verifications[$i]['reason'][] = 'no_existence'; } unset($item->feed->entry[$i]); } foreach ($newEntry->forwardlink as $key => $value) { if (isset(Feed_ForwardLink_Metadata::$acceptableKeys[$key]) && Feed_ForwardLink_Metadata::$acceptableKeys[$key] == true) { //all clear } else { $this->verifications[$i]['reason'][] = 'metadata_tampering' . ($this->debug == true ? $key : ''); unset($item->feed->entry[$i]); } } foreach ($newEntry->textlink as $key => $value) { if (isset(Feed_ForwardLink_Metadata::$acceptableKeys[$key]) && Feed_ForwardLink_Metadata::$acceptableKeys[$key] == true) { //all clear } else { $this->verifications[$i]['reason'][] = 'metadata_tampering' . ($this->debug == true ? $key : ''); unset($item->feed->entry[$i]); } } } if (empty($item->feed->entry) == false) { $this->itemsAdded = true; foreach ($item->feed->entry as &$entry) { Tracker_Query::tracker('Wiki Attributes')->byName()->replaceItem(array('Page' => $this->page, 'Attribute' => '', 'Value' => $entry->forwardlink->text, 'Type' => 'ForwardLink Accepted')); } if (empty($contents->entry) == true) { $contents->entry = array(); } $contents->entry = array_merge($contents->entry, $item->feed->entry); } }