link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TABS, $this); # only allowed for system plugins: $host->add_handler('pref-feedmod', '*', $this); $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); } function csrf_ignore($method) { $csrf_ignored = array("index", "edit"); return array_search($method, $csrf_ignored) !== false; } function before($method) { if ($_SESSION["uid"]) { return true; } return false; } function after() { return true; } function hook_article_filter($article) { global $pluginhost; $json_conf = $pluginhost->get($this, 'json_conf'); $owner_uid = $article['owner_uid']; $data = json_decode($json_conf, true); foreach ($data as $urlpart=>$config) { if (strpos($article['link'], $urlpart) === false) continue; // skip this config if URL not matching if (strpos($article['plugin_data'], "feedmod,$owner_uid:") !== false) { // do not process an article more than once if (isset($article['stored']['content'])) $article['content'] = $article['stored']['content']; break; } switch ($config['type']) { case 'xpath': $doc = new DOMDocument(); @$doc->loadHTML(fetch_file_contents($article['link'])); if ($doc) { $basenode = false; $xpath = new DOMXPath($doc); $entries = $xpath->query('(//'.$config['xpath'].')'); // find main DIV according to config if ($entries->length > 0) $basenode = $entries->item(0); if ($basenode) { $article['content'] = $doc->saveXML($basenode); $article['plugin_data'] = "feedmod,$owner_uid:" . $article['plugin_data']; } } break; default: // unknown type or invalid config continue; } break; // if we got here, we found the correct entry in $data, do not process more } return $article; } function hook_prefs_tabs($args) { print '
'; } function index() { global $pluginhost; $sometext = $pluginhost->get($this, "sometext"); $json_conf = $pluginhost->get($this, 'json_conf'); print "
"; print ""; print ""; print ""; print ""; print ""; print ""; print ""; print "
".__("Some text")."
"; print "
"; print ""; print "
"; print "

"; print "

"; } function save() { $json_conf = $_POST['json_conf']; if (is_null(json_decode($json_conf))) { echo __("error: Invalid JSON!"); return false; } $this->host->set($this, 'json_conf', $json_conf); echo __("Configuration saved."); } }