diff options
author | Andrew Dolgov <[email protected]> | 2011-12-27 21:09:22 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2011-12-27 21:09:22 +0400 |
commit | 566faa14760112f81eea78fe441d5adc1b872da1 (patch) | |
tree | e3e9d12ef58f52324e503421fc28a3c5bed379a9 /classes/rpc.php | |
parent | b4a9e560aabfb26e8a55e742853785e074feb672 (diff) |
implement neutral-format personal data export
Diffstat (limited to 'classes/rpc.php')
-rw-r--r-- | classes/rpc.php | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/classes/rpc.php b/classes/rpc.php index 4cdaef935..497b1a55d 100644 --- a/classes/rpc.php +++ b/classes/rpc.php @@ -2,7 +2,7 @@ class RPC extends Protected_Handler { function csrf_ignore($method) { - $csrf_ignored = array("sanitycheck", "buttonplugin"); + $csrf_ignored = array("sanitycheck", "buttonplugin", "exportget"); return array_search($method, $csrf_ignored) !== false; } @@ -14,6 +14,83 @@ class RPC extends Protected_Handler { $_SESSION["prefs_cache"] = array(); } + function exportget() { + $exportname = CACHE_DIR . "/export/" . + sha1($_SESSION['uid'] . $_SESSION['login']) . ".xml"; + + if (file_exists($exportname)) { + header("Content-type: text/xml"); + header("Content-Disposition: attachment; filename=TinyTinyRSS_exported.xml"); + + echo file_get_contents($exportname); + } else { + echo "File not found."; + } + } + + function exportrun() { + $offset = (int) db_escape_string($_REQUEST['offset']); + $exported = 0; + $limit = 250; + + if ($offset < 10000 && is_writable(CACHE_DIR . "/export")) { + $result = db_query($this->link, "SELECT + ttrss_entries.guid, + ttrss_entries.title, + content, + marked, + published, + score, + note, + tag_cache, + label_cache, + ttrss_feeds.title AS feed_title, + ttrss_feeds.feed_url AS feed_url, + ttrss_entries.updated + FROM + ttrss_user_entries LEFT JOIN ttrss_feeds ON (ttrss_feeds.id = feed_id), + ttrss_entries + WHERE + (marked = true OR feed_id IS NULL) AND + ref_id = ttrss_entries.id AND + ttrss_user_entries.owner_uid = " . $_SESSION['uid'] . " + ORDER BY ttrss_entries.id LIMIT $limit OFFSET $offset"); + + $exportname = sha1($_SESSION['uid'] . $_SESSION['login']); + + if ($offset == 0) { + $fp = fopen(CACHE_DIR . "/export/$exportname.xml", "w"); + fputs($fp, "<articles schema-version=\"".SCHEMA_VERSION."\">"); + } else { + $fp = fopen(CACHE_DIR . "/export/$exportname.xml", "a"); + } + + if ($fp) { + + while ($line = db_fetch_assoc($result)) { + fputs($fp, "<article>"); + + foreach ($line as $k => $v) { + fputs($fp, "<$k><![CDATA[$v]]></$k>"); + } + + fputs($fp, "</article>"); + } + + $exported = db_num_rows($result); + + if ($exported < $limit && $exported > 0) { + fputs($fp, "</articles>"); + } + + fclose($fp); + } + + } + + print json_encode(array("exported" => $exported)); + } + function remprofiles() { $ids = explode(",", db_escape_string(trim($_REQUEST["ids"]))); |