function hook_article_filter($article) { $wpm = 180; // arbitrary value, based on adult averages $word_count = str_word_count($article["content"]); $minutes = round($word_count / $wpm); $minimum_time_bucket = 5; // minutes $time_label = $this->minutes_to_time_label($minutes, $minimum_time_bucket); _debug("estimated reading time: {$minutes} min ({$time_label}), based on {$word_count} words at {$wpm} WPM"); $owner_uid = $article["owner_uid"]; if (!label_find_id($time_label, $owner_uid)) { label_create($time_label); } $guid = $article["guid"]; $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '{$guid}'"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); label_add_article($ref_id, $time_label, $owner_uid); } return $article; }
function setArticleLabel() { $article_ids = array_filter(explode(",", $this->dbh->escape_string($_REQUEST["article_ids"])), is_numeric); $label_id = (int) $this->dbh->escape_string($_REQUEST['label_id']); $assign = (bool) $this->dbh->escape_string($_REQUEST['assign']) == "true"; $label = $this->dbh->escape_string(label_find_caption(feed_to_label_id($label_id), $_SESSION["uid"])); $num_updated = 0; if ($label) { foreach ($article_ids as $id) { if ($assign) { label_add_article($id, $label, $_SESSION["uid"]); } else { label_remove_article($id, $label, $_SESSION["uid"]); } ++$num_updated; } } $this->wrap(self::STATUS_OK, array("status" => "OK", "updated" => $num_updated)); }
function assign_article_to_label_filters($id, $filters, $owner_uid, $article_labels) { foreach ($filters as $f) { if ($f["type"] == "label") { if (!labels_contains_caption($article_labels, $f["param"])) { label_add_article($id, $f["param"], $owner_uid); } } } }
function labelops($assign) { $reply = array(); $ids = explode(",", db_escape_string($_REQUEST["ids"])); $label_id = db_escape_string($_REQUEST["lid"]); $label = db_escape_string(label_find_caption($this->link, $label_id, $_SESSION["uid"])); $reply["info-for-headlines"] = array(); if ($label) { foreach ($ids as $id) { if ($assign) { label_add_article($this->link, $id, $label, $_SESSION["uid"]); } else { label_remove_article($this->link, $id, $label, $_SESSION["uid"]); } $labels = get_article_labels($this->link, $id, $_SESSION["uid"]); array_push($reply["info-for-headlines"], array("id" => $id, "labels" => format_article_labels($labels, $id))); } } $reply["message"] = "UPDATE_COUNTERS"; print json_encode($reply); }
protected function create_archived_article($title, $url, $content, $labels_str, $owner_uid) { $guid = 'SHA1:' . sha1("tinybag:" . $url . $owner_uid); // include owner_uid to prevent global GUID clash $content_hash = sha1($content); if ($labels_str != "") { $labels = explode(",", $labels_str); } else { $labels = array(); } $rc = false; if (!$title) { $title = $url; } if (!$title && !$url) { return false; } if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { return false; } db_query("BEGIN"); // only check for our user data here, others might have shared this with different content etc $result = db_query("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE\n\t\t\tguid = '{$guid}' AND ref_id = id AND owner_uid = '{$owner_uid}' LIMIT 1"); if (db_num_rows($result) != 0) { $rc = false; } else { $result = db_query("INSERT INTO ttrss_entries\n\t\t\t\t(title, guid, link, updated, content, content_hash, date_entered, date_updated)\n\t\t\t\tVALUES\n\t\t\t\t('{$title}', '{$guid}', '{$url}', NOW(), '{$content}', '{$content_hash}', NOW(), NOW())"); $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '{$guid}'"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); db_query("INSERT INTO ttrss_user_entries\n\t\t\t\t\t(ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache, unread)\n\t\t\t\t\tVALUES\n\t\t\t\t\t('{$ref_id}', '', NULL, NULL, {$owner_uid}, false, '', '', true)"); if (count($labels) != 0) { foreach ($labels as $label) { label_add_article($ref_id, trim($label), $owner_uid); } } $rc = true; } } db_query("COMMIT"); return $rc; }
function assign_article_to_labels($link, $id, $filters, $owner_uid) { foreach ($filters as $f) { if ($f[0] == "label") { label_add_article($link, $id, $f[1], $owner_uid); } } }
function perform_data_import($filename, $owner_uid) { $num_imported = 0; $num_processed = 0; $num_feeds_created = 0; libxml_disable_entity_loader(false); $doc = @DOMDocument::load($filename); if (!$doc) { $contents = file_get_contents($filename); if ($contents) { $data = @gzuncompress($contents); } if (!$data) { $data = @gzdecode($contents); } if ($data) { $doc = DOMDocument::loadXML($data); } } libxml_disable_entity_loader(true); if ($doc) { $xpath = new DOMXpath($doc); $container = $doc->firstChild; if ($container && $container->hasAttribute('schema-version')) { $schema_version = $container->getAttribute('schema-version'); if ($schema_version != SCHEMA_VERSION) { print "<p>" . __("Could not import: incorrect schema version.") . "</p>"; return; } } else { print "<p>" . __("Could not import: unrecognized document format.") . "</p>"; return; } $articles = $xpath->query("//article"); foreach ($articles as $article_node) { if ($article_node->childNodes) { $ref_id = 0; $article = array(); foreach ($article_node->childNodes as $child) { if ($child->nodeName != 'label_cache') { $article[$child->nodeName] = db_escape_string($child->nodeValue); } else { $article[$child->nodeName] = $child->nodeValue; } } //print_r($article); if ($article['guid']) { ++$num_processed; //db_query("BEGIN"); //print 'GUID:' . $article['guid'] . "\n"; $result = db_query("SELECT id FROM ttrss_entries\n\t\t\t\t\t\t\tWHERE guid = '" . $article['guid'] . "'"); if (db_num_rows($result) == 0) { $result = db_query("INSERT INTO ttrss_entries\n\t\t\t\t\t\t\t\t\t(title,\n\t\t\t\t\t\t\t\t\tguid,\n\t\t\t\t\t\t\t\t\tlink,\n\t\t\t\t\t\t\t\t\tupdated,\n\t\t\t\t\t\t\t\t\tcontent,\n\t\t\t\t\t\t\t\t\tcontent_hash,\n\t\t\t\t\t\t\t\t\tno_orig_date,\n\t\t\t\t\t\t\t\t\tdate_updated,\n\t\t\t\t\t\t\t\t\tdate_entered,\n\t\t\t\t\t\t\t\t\tcomments,\n\t\t\t\t\t\t\t\t\tnum_comments,\n\t\t\t\t\t\t\t\t\tauthor)\n\t\t\t\t\t\t\t\tVALUES\n\t\t\t\t\t\t\t\t\t('" . $article['title'] . "',\n\t\t\t\t\t\t\t\t\t'" . $article['guid'] . "',\n\t\t\t\t\t\t\t\t\t'" . $article['link'] . "',\n\t\t\t\t\t\t\t\t\t'" . $article['updated'] . "',\n\t\t\t\t\t\t\t\t\t'" . $article['content'] . "',\n\t\t\t\t\t\t\t\t\t'" . sha1($article['content']) . "',\n\t\t\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t\t\tNOW(),\n\t\t\t\t\t\t\t\t\tNOW(),\n\t\t\t\t\t\t\t\t\t'',\n\t\t\t\t\t\t\t\t\t'0',\n\t\t\t\t\t\t\t\t\t'')"); $result = db_query("SELECT id FROM ttrss_entries\n\t\t\t\t\t\t\t\tWHERE guid = '" . $article['guid'] . "'"); if (db_num_rows($result) != 0) { $ref_id = db_fetch_result($result, 0, "id"); } } else { $ref_id = db_fetch_result($result, 0, "id"); } //print "Got ref ID: $ref_id\n"; if ($ref_id) { $feed_url = $article['feed_url']; $feed_title = $article['feed_title']; $feed = 'NULL'; if ($feed_url && $feed_title) { $result = db_query("SELECT id FROM ttrss_feeds\n\t\t\t\t\t\t\t\t\tWHERE feed_url = '{$feed_url}' AND owner_uid = '{$owner_uid}'"); if (db_num_rows($result) != 0) { $feed = db_fetch_result($result, 0, "id"); } else { // try autocreating feed in Uncategorized... $result = db_query("INSERT INTO ttrss_feeds (owner_uid,\n\t\t\t\t\t\t\t\t\t\tfeed_url, title) VALUES ({$owner_uid}, '{$feed_url}', '{$feed_title}')"); $result = db_query("SELECT id FROM ttrss_feeds\n\t\t\t\t\t\t\t\t\t\tWHERE feed_url = '{$feed_url}' AND owner_uid = '{$owner_uid}'"); if (db_num_rows($result) != 0) { ++$num_feeds_created; $feed = db_fetch_result($result, 0, "id"); } } } if ($feed != 'NULL') { $feed_qpart = "feed_id = {$feed}"; } else { $feed_qpart = "feed_id IS NULL"; } //print "$ref_id / $feed / " . $article['title'] . "\n"; $result = db_query("SELECT int_id FROM ttrss_user_entries\n\t\t\t\t\t\t\t\tWHERE ref_id = '{$ref_id}' AND owner_uid = '{$owner_uid}' AND {$feed_qpart}"); if (db_num_rows($result) == 0) { $marked = bool_to_sql_bool(sql_bool_to_bool($article['marked'])); $published = bool_to_sql_bool(sql_bool_to_bool($article['published'])); $score = (int) $article['score']; $tag_cache = $article['tag_cache']; $label_cache = db_escape_string($article['label_cache']); $note = $article['note']; //print "Importing " . $article['title'] . "<br/>"; ++$num_imported; $result = db_query("INSERT INTO ttrss_user_entries\n\t\t\t\t\t\t\t\t\t(ref_id, owner_uid, feed_id, unread, last_read, marked,\n\t\t\t\t\t\t\t\t\t\tpublished, score, tag_cache, label_cache, uuid, note)\n\t\t\t\t\t\t\t\t\tVALUES ({$ref_id}, {$owner_uid}, {$feed}, false,\n\t\t\t\t\t\t\t\t\t\tNULL, {$marked}, {$published}, {$score}, '{$tag_cache}',\n\t\t\t\t\t\t\t\t\t\t\t'{$label_cache}', '', '{$note}')"); $label_cache = json_decode($label_cache, true); if (is_array($label_cache) && $label_cache["no-labels"] != 1) { foreach ($label_cache as $label) { label_create($label[1], $label[2], $label[3], $owner_uid); label_add_article($ref_id, $label[1], $owner_uid); } } //db_query("COMMIT"); } } } } } print "<p>" . __("Finished: ") . vsprintf(_ngettext("%d article processed, ", "%d articles processed, ", $num_processed), $num_processed) . vsprintf(_ngettext("%d imported, ", "%d imported, ", $num_imported), $num_imported) . vsprintf(_ngettext("%d feed created.", "%d feeds created.", $num_feeds_created), $num_feeds_created) . "</p>"; } else { print "<p>" . __("Could not load XML document.") . "</p>"; } }