diff options
Diffstat (limited to 'plugins')
74 files changed, 321 insertions, 4497 deletions
diff --git a/plugins/af_buttersafe/init.php b/plugins/af_buttersafe/init.php index c9f6505cd..05e684aa0 100644 --- a/plugins/af_buttersafe/init.php +++ b/plugins/af_buttersafe/init.php @@ -1,7 +1,6 @@ <?php class Af_Buttersafe extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_Buttersafe extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +53,10 @@ class Af_Buttersafe extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_explosm/init.php b/plugins/af_explosm/init.php index 2a8fab491..dd106653a 100644 --- a/plugins/af_explosm/init.php +++ b/plugins/af_explosm/init.php @@ -1,7 +1,6 @@ <?php class Af_Explosm extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_Explosm extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +53,9 @@ class Af_Explosm extends Plugin { return $article; } + + function api_version() { + return 2; + } } ?> diff --git a/plugins/af_gocomics/init.php b/plugins/af_gocomics/init.php index 466ec9687..e95de9f14 100644 --- a/plugins/af_gocomics/init.php +++ b/plugins/af_gocomics/init.php @@ -1,7 +1,5 @@ <?php class Af_GoComics extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_GoComics extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -55,5 +52,10 @@ class Af_GoComics extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_pennyarcade/init.php b/plugins/af_pennyarcade/init.php index 06c1230a6..8ad02e14c 100644 --- a/plugins/af_pennyarcade/init.php +++ b/plugins/af_pennyarcade/init.php @@ -1,7 +1,6 @@ <?php class Af_PennyArcade extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Af_PennyArcade extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -22,11 +20,11 @@ class Af_PennyArcade extends Plugin { if (strpos($article["link"], "penny-arcade.com") !== FALSE && strpos($article["title"], "Comic:") !== FALSE) { if (strpos($article["plugin_data"], "pennyarcade,$owner_uid:") === FALSE) { - + if ($debug_enabled) { _debug("af_pennyarcade: Processing comic"); } - + $doc = new DOMDocument(); $doc->loadHTML(fetch_file_contents($article["link"])); @@ -49,7 +47,7 @@ class Af_PennyArcade extends Plugin { $article["content"] = $article["stored"]["content"]; } } - + if (strpos($article["link"], "penny-arcade.com") !== FALSE && strpos($article["title"], "News Post:") !== FALSE) { if (strpos($article["plugin_data"], "pennyarcade,$owner_uid:") === FALSE) { if ($debug_enabled) { @@ -57,22 +55,22 @@ class Af_PennyArcade extends Plugin { } $doc = new DOMDocument(); $doc->loadHTML(fetch_file_contents($article["link"])); - + if ($doc) { $xpath = new DOMXPath($doc); $entries = $xpath->query('(//div[@class="post"])'); - + $basenode = false; - + foreach ($entries as $entry) { $basenode = $entry; } - + $uninteresting = $xpath->query('(//div[@class="heading"])'); foreach ($uninteresting as $i) { $i->parentNode->removeChild($i); } - + if ($basenode){ $article["content"] = $doc->saveXML($basenode); $article["plugin_data"] = "pennyarcade,$owner_uid:" . $article["plugin_data"]; @@ -85,5 +83,10 @@ class Af_PennyArcade extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index f2d5c7b67..39a20784c 100644 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -1,7 +1,5 @@ <?php class Af_RedditImgur extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_RedditImgur extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -136,5 +133,10 @@ class Af_RedditImgur extends Plugin { return $article; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/af_unburn/init.php b/plugins/af_unburn/init.php index 9f0b6cb0d..a97502b12 100644 --- a/plugins/af_unburn/init.php +++ b/plugins/af_unburn/init.php @@ -1,7 +1,5 @@ <?php class Af_Unburn extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class Af_Unburn extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_FILTER, $this); @@ -29,7 +26,7 @@ class Af_Unburn extends Plugin { if (strpos($article["plugin_data"], "unburn,$owner_uid:") === FALSE) { - if (ini_get("safe_mode")) { + if (ini_get("safe_mode") || ini_get("open_basedir")) { $ch = curl_init(geturl($article["link"])); } else { $ch = curl_init($article["link"]); @@ -38,7 +35,7 @@ class Af_Unburn extends Plugin { curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode")); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("safe_mode") && !ini_get("open_basedir")); curl_setopt($ch, CURLOPT_USERAGENT, SELF_USER_AGENT); $contents = @curl_exec($ch); @@ -117,7 +114,7 @@ class Af_Unburn extends Plugin { preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); $url = trim(str_replace($matches[1],"",$matches[0])); $url_parsed = parse_url($url); - return (isset($url_parsed))? geturl($url, $referer):''; + return (isset($url_parsed))? geturl($url):''; } $oline=''; foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';} @@ -128,5 +125,10 @@ class Af_Unburn extends Plugin { } return $url; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/auth_internal/init.php b/plugins/auth_internal/init.php index e910e52aa..87c8555c0 100644 --- a/plugins/auth_internal/init.php +++ b/plugins/auth_internal/init.php @@ -1,7 +1,5 @@ <?php class Auth_Internal extends Plugin implements IAuthModule { - - private $link; private $host; function about() { @@ -12,7 +10,6 @@ class Auth_Internal extends Plugin implements IAuthModule { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_AUTH_USER, $this); @@ -22,15 +19,17 @@ class Auth_Internal extends Plugin implements IAuthModule { $pwd_hash1 = encrypt_password($password); $pwd_hash2 = encrypt_password($password, $login); - $login = db_escape_string($this->link, $login); - $otp = db_escape_string($this->link, $_REQUEST["otp"]); + $login = db_escape_string($login); + $otp = db_escape_string($_REQUEST["otp"]); - if (get_schema_version($this->link) > 96) { + if (get_schema_version() > 96) { if (!defined('AUTH_DISABLE_OTP') || !AUTH_DISABLE_OTP) { - $result = db_query($this->link, "SELECT otp_enabled,salt FROM ttrss_users WHERE + + $result = db_query("SELECT otp_enabled,salt FROM ttrss_users WHERE login = '$login'"); if (db_num_rows($result) > 0) { + require_once "lib/otphp/vendor/base32.php"; require_once "lib/otphp/lib/otp.php"; require_once "lib/otphp/lib/totp.php"; @@ -52,17 +51,18 @@ class Auth_Internal extends Plugin implements IAuthModule { $return = urlencode($_REQUEST["return"]); ?><html> <head><title>Tiny Tiny RSS</title></head> - <body> + <?php stylesheet_tag("utility.css") ?> + <body class="otp"><div class="content"> <form action="public.php?return=<?php echo $return ?>" - method="POST"> + method="POST" class="otpform"> <input type="hidden" name="op" value="login"> <input type="hidden" name="login" value="<?php echo htmlspecialchars($login) ?>"> <input type="hidden" name="password" value="<?php echo htmlspecialchars($password) ?>"> <label><?php echo __("Please enter your one time password:") ?></label> - <input type="password" size="6" name="otp"/> + <input autocomplete="off" size="6" name="otp" value=""/> <input type="submit" value="Continue"/> - </form> + </form></div> <script type="text/javascript"> document.forms[0].otp.focus(); </script> @@ -74,9 +74,9 @@ class Auth_Internal extends Plugin implements IAuthModule { } } - if (get_schema_version($this->link) > 87) { + if (get_schema_version() > 87) { - $result = db_query($this->link, "SELECT salt FROM ttrss_users WHERE + $result = db_query("SELECT salt FROM ttrss_users WHERE login = '$login'"); if (db_num_rows($result) != 1) { @@ -94,7 +94,7 @@ class Auth_Internal extends Plugin implements IAuthModule { // verify and upgrade password to new salt base - $result = db_query($this->link, $query); + $result = db_query($query); if (db_num_rows($result) == 1) { // upgrade password to MODE2 @@ -102,7 +102,7 @@ class Auth_Internal extends Plugin implements IAuthModule { $salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $pwd_hash = encrypt_password($password, $salt, true); - db_query($this->link, "UPDATE ttrss_users SET + db_query("UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$salt' WHERE login = '$login'"); $query = "SELECT id @@ -130,7 +130,7 @@ class Auth_Internal extends Plugin implements IAuthModule { pwd_hash = '$pwd_hash2')"; } - $result = db_query($this->link, $query); + $result = db_query($query); if (db_num_rows($result) == 1) { return db_fetch_result($result, 0, "id"); @@ -140,9 +140,9 @@ class Auth_Internal extends Plugin implements IAuthModule { } function check_password($owner_uid, $password) { - $owner_uid = db_escape_string($this->link, $owner_uid); + $owner_uid = db_escape_string($owner_uid); - $result = db_query($this->link, "SELECT salt,login FROM ttrss_users WHERE + $result = db_query("SELECT salt,login FROM ttrss_users WHERE id = '$owner_uid'"); $salt = db_fetch_result($result, 0, "salt"); @@ -163,20 +163,20 @@ class Auth_Internal extends Plugin implements IAuthModule { id = '$owner_uid' AND pwd_hash = '$password_hash'"; } - $result = db_query($this->link, $query); + $result = db_query($query); return db_num_rows($result) != 0; } function change_password($owner_uid, $old_password, $new_password) { - $owner_uid = db_escape_string($this->link, $owner_uid); + $owner_uid = db_escape_string($owner_uid); if ($this->check_password($owner_uid, $old_password)) { $new_salt = substr(bin2hex(get_random_bytes(125)), 0, 250); $new_password_hash = encrypt_password($new_password, $new_salt, true); - db_query($this->link, "UPDATE ttrss_users SET + db_query("UPDATE ttrss_users SET pwd_hash = '$new_password_hash', salt = '$new_salt', otp_enabled = false WHERE id = '$owner_uid'"); @@ -187,5 +187,10 @@ class Auth_Internal extends Plugin implements IAuthModule { return "ERROR: ".__('Old password is incorrect.'); } } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/auth_remote/init.php b/plugins/auth_remote/init.php index 7e4638fb2..2ec2c87b2 100644 --- a/plugins/auth_remote/init.php +++ b/plugins/auth_remote/init.php @@ -1,7 +1,6 @@ <?php class Auth_Remote extends Plugin implements IAuthModule { - private $link; private $host; private $base; @@ -13,23 +12,22 @@ class Auth_Remote extends Plugin implements IAuthModule { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; - $this->base = new Auth_Base($this->link); + $this->base = new Auth_Base(); $host->add_hook($host::HOOK_AUTH_USER, $this); } function get_login_by_ssl_certificate() { - $cert_serial = db_escape_string($this->link, get_ssl_certificate_id()); + $cert_serial = db_escape_string(get_ssl_certificate_id()); if ($cert_serial) { - $result = db_query($this->link, "SELECT login FROM ttrss_user_prefs, ttrss_users + $result = db_query("SELECT login FROM ttrss_user_prefs, ttrss_users WHERE pref_name = 'SSL_CERT_SERIAL' AND value = '$cert_serial' AND owner_uid = ttrss_users.id"); if (db_num_rows($result) != 0) { - return db_escape_string($this->link, db_fetch_result($result, 0, "login")); + return db_escape_string(db_fetch_result($result, 0, "login")); } } @@ -38,16 +36,16 @@ class Auth_Remote extends Plugin implements IAuthModule { function authenticate($login, $password) { - $try_login = db_escape_string($this->link, $_SERVER["REMOTE_USER"]); + $try_login = db_escape_string($_SERVER["REMOTE_USER"]); // php-cgi - if (!$try_login) $try_login = db_escape_string($this->link, $_SERVER["REDIRECT_REMOTE_USER"]); + if (!$try_login) $try_login = db_escape_string($_SERVER["REDIRECT_REMOTE_USER"]); if (!$try_login) $try_login = $this->get_login_by_ssl_certificate(); # if (!$try_login) $try_login = "test_qqq"; if ($try_login) { - $user_id = $this->base->auto_create_user($try_login); + $user_id = $this->base->auto_create_user($try_login, $password); if ($user_id) { $_SESSION["fake_login"] = $try_login; @@ -60,15 +58,15 @@ class Auth_Remote extends Plugin implements IAuthModule { // update user name $fullname = $_SERVER['HTTP_USER_NAME'] ? $_SERVER['HTTP_USER_NAME'] : $_SERVER['AUTHENTICATE_CN']; if ($fullname){ - $fullname = db_escape_string($this->link, $fullname); - db_query($this->link, "UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " . + $fullname = db_escape_string($fullname); + db_query("UPDATE ttrss_users SET full_name = '$fullname' WHERE id = " . $user_id); } // update user mail $email = $_SERVER['HTTP_USER_MAIL'] ? $_SERVER['HTTP_USER_MAIL'] : $_SERVER['AUTHENTICATE_MAIL']; if ($email){ - $email = db_escape_string($this->link, $email); - db_query($this->link, "UPDATE ttrss_users SET email = '$email' WHERE id = " . + $email = db_escape_string($email); + db_query("UPDATE ttrss_users SET email = '$email' WHERE id = " . $user_id); } } @@ -79,6 +77,11 @@ class Auth_Remote extends Plugin implements IAuthModule { return false; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/bookmarklets/init.php b/plugins/bookmarklets/init.php index 22f4f05a7..e45605558 100644 --- a/plugins/bookmarklets/init.php +++ b/plugins/bookmarklets/init.php @@ -1,6 +1,5 @@ <?php class Bookmarklets extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Bookmarklets extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -40,8 +38,11 @@ class Bookmarklets extends Plugin { print "</div>"; #pane } - } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/close_button/init.php b/plugins/close_button/init.php index ff2027bc7..7911642c3 100644 --- a/plugins/close_button/init.php +++ b/plugins/close_button/init.php @@ -1,10 +1,8 @@ <?php class Close_Button extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -17,7 +15,7 @@ class Close_Button extends Plugin { } function hook_article_button($line) { - if (!get_pref($this->link, "COMBINED_DISPLAY_MODE")) { + if (!get_pref("COMBINED_DISPLAY_MODE")) { $rv = "<img src=\"plugins/close_button/button.png\" class='tagsPic' style=\"cursor : pointer\" onclick=\"closeArticlePanel()\" @@ -26,5 +24,10 @@ class Close_Button extends Plugin { return $rv; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/digest/digest.css b/plugins/digest/digest.css deleted file mode 100644 index 54568e3bc..000000000 --- a/plugins/digest/digest.css +++ /dev/null @@ -1,337 +0,0 @@ -body#ttrssDigest { - color : black; - font-family : sans-serif; - font-size : 12px; - margin : 0px; - background : url("images/tile.png"); -} - -a { - color : #0069D8; - text-decoration : none; -} - -a:hover { - color : gray; -} - -#header a, #footer a { - color : gray; -} - -#header a:hover, #footer a:hover { - color : #0069D8; -} - -#header { - font-size : 13px; - font-family : "Segoe UI", Tahoma, sans-serif; - padding : 5px 5px 5px 1.5em; - color : gray; - position : absolute; - top : 0px; - height : 30px; - left : 0px; - right : 0px; - color : #a0a0a0; -} - -#header span.title { - font-weight : bold; - font-style : italic; -} - -#header div.links { - position : absolute; - right : 1.5em; -} - -#search { - float : right; - clear : left; - -} - -#title { -} - -#latest { - padding : 5px; -} - -#content { - position : absolute; - left : 0px; - top : 30px; - right : 0px; - bottom : 0px; - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; -} - -#article { - position : absolute; - overflow : auto; - right : 0px; - width : 60%; - bottom : 0px; - top : 30px; - background : white; - z-index : -1; - opacity : 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; -} - -#article.visible { - opacity : 1; -} - -#article #article-content h1 { - margin : 0px 0px 10px 0px; - padding : 0px 0px 5px 0px; - font-family : "Segoe UI", Tahoma, sans-serif; - font-size : 21px; - font-weight : bold; - border-width : 0px 0px 3px 0px; - border-style : solid; - border-color : #e0e0e0; - color : gray; -} - -#article #article-content #toolbar { - border-width : 0px 0px 1px 0px; - border-color : #e0e0e0; - border-style : solid; - background : #fafafa; - font-size : 14px; - font-weight : bold; - padding : 5px 10px 5px 10px; - margin : 0px 0px 0px 0px; -} - -#article #article-content { - padding : 0px; - font-size : 16px; -} - -#article #article-content #tags { - color : #a0a0a0; -} - -#article #article-content #ops { - float : right; -} - -#article #article-content #ops img { - cursor : pointer; - margin-right : 0px; - margin-left : 10px; -} - -#article #article-content #inner { - padding : 20px; -} - -#article #article-content img { - max-width : 90%; -} - -#content.move { - left : -300px; - right : 60% -} - -#feeds { - position : absolute; - left : 0px; - width : 300px; - top : -30px; - bottom : 0px; - font-size : 14px; - overflow : auto; - border-width : 0px 3px 0px 0px; - border-color : #88b0f0; - border-style : solid; - background : #eee; -} - -#feeds ul#feeds-content img { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; -} - -#feeds ul#feeds-content div.unread-ctr { - color : #d0d0d0; - padding-left : 10px; - float : right; -} - -#feeds ul#feeds-content li { - padding : 10px; - clear : both; - cursor : pointer; - color : #303030; - white-space : nowrap; -} - -#feeds ul#feeds-content li.selected { - background : white; -} - -#feeds ul#feeds-content { - list-style-type : none; - font-weight : bold; - margin : 0px; - padding : 0px; -} - -#headlines { - font-size : 14px; - position : absolute; - left : 303px; - top : 0px; - bottom : 0px; - right : 0px; - overflow : auto; - border-width : 0px 3px 0px 0px; - border-style : solid; - border-color : #88b0f0; -} - -#headlines h1 a { - color : #684C99; -} - -#headlines ul#headlines-content .cb { - vertical-align : middle; - margin-right : 5px; - float : left; -} - -#headlines ul#headlines-content img.icon { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; - float : right; -} - -#headlines ul#headlines-content { - list-style-type : none; - color : gray; - margin : 0px; - padding : 0px; -} - -#headlines ul#headlines-content li { - margin : 0px 0px 0px 0px; - padding : 10px; - color : gray; - clear : left; - border-width : 0px 0px 1px 0px; - border-style : solid; - border-color : #e0e0e0; - background : #eee; -} - -#headlines ul#headlines-content a.title { - font-size : 14px; - font-weight : bold; - display : block; - margin-left : 21px; - position : relative; -} - -#headlines ul#headlines-content li.fresh a.title { - color : #007FFF; -} - -#headlines ul#headlines-content li.unread a.title { - color : black; - /* color : #8DB1D6; */ -} - -#headlines ul#headlines-content li.read a.title { - color : gray; -} - -#headlines ul#headlines-content li.unread, -#headlines ul#headlines-content li.fresh { - background-color : white; -} - -#headlines ul#headlines-content li.selected { - background-color : #fff7d5; - border-color : white white #e0e0e0; -} - -#headlines ul#headlines-content img#H-LOADING-IMG { - margin-left : 5px; -} - -#headlines ul#headlines-content div.excerpt { - color : #404040; - cursor : pointer; - margin-top : 5px; -} - -#headlines ul#headlines-content div.content { - color : #404040; -} - -#headlines ul#headlines-content div.content img { - max-width : 75%; -} - -#headlines ul#headlines-content div.body { - margin-left : 21px; - /*margin-left : 42px;*/ -} - -#headlines ul#headlines-content div.info { - font-size : 11px; - margin-top : 5px; -} - -#headlines ul#headlines-content div.info a { - color : gray; -} - -#overlay { - background : white; - left : 0; - top : 0; - height : 100%; - width : 100%; - z-index : 100; - position : absolute; - text-align : center; -} - -#overlay_inner { - margin : 1em; -} - -#overlay img { - vertical-align : middle; -} - -div.fatalError button { - margin-top : 5px; -} - -div.fatalError textarea { - width : 100%; - height : 100px; -} - -div.insensitive { - color : gray; -} - - diff --git a/plugins/digest/digest.js b/plugins/digest/digest.js deleted file mode 100644 index e3cb1e299..000000000 --- a/plugins/digest/digest.js +++ /dev/null @@ -1,924 +0,0 @@ -var last_feeds = []; -var init_params = {}; -var hotkeys_map = false; -var hotkey_prefix = false; -var mobile_mode = false; - -var _active_feed_id = false; -var _update_timeout = false; -var _view_update_timeout = false; -var _feedlist_expanded = false; -var _update_seq = 1; - -function article_appear(article_id) { - try { - new Effect.Appear('A-' + article_id); - } catch (e) { - exception_error("article_appear", e); - } -} - -function catchup_feed(feed_id, callback) { - try { - - var fn = find_feed(last_feeds, feed_id).title; - - if (confirm(__("Mark all articles in %s as read?").replace("%s", fn))) { - - var is_cat = ""; - - if (feed_id < 0) is_cat = "true"; // KLUDGE - - var query = "op=rpc&method=catchupFeed&feed_id=" + - feed_id + "&is_cat=" + is_cat; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - - update(); - } }); - } - - } catch (e) { - exception_error("catchup_article", e); - } -} - -function get_visible_article_ids() { - try { - var elems = $("headlines-content").getElementsByTagName("LI"); - var ids = []; - - for (var i = 0; i < elems.length; i++) { - if (elems[i].id && elems[i].id.match("A-")) { - ids.push(elems[i].id.replace("A-", "")); - } - } - - return ids; - - } catch (e) { - exception_error("get_visible_article_ids", e); - } -} - -function catchup_visible_articles(callback) { - try { - - var ids = get_visible_article_ids(); - - if (confirm(ngettext("Mark %d displayed article as read?", "Mark %d displayed articles as read?", ids.length).replace("%d", ids.length))) { - - var query = "op=rpc&method=catchupSelected" + - "&cmode=0&ids=" + param_escape(ids); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - - viewfeed(_active_feed_id, 0); - } }); - - } - - } catch (e) { - exception_error("catchup_visible_articles", e); - } -} - -function catchup_article(article_id, callback) { - try { - var query = "op=rpc&method=catchupSelected" + - "&cmode=0&ids=" + article_id; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - if (callback) callback(transport); - } }); - - } catch (e) { - exception_error("catchup_article", e); - } -} - -function set_selected_article(article_id) { - try { - $$("#headlines-content > li[id*=A-]").each(function(article) { - var id = article.id.replace("A-", ""); - - var cb = article.getElementsByTagName("INPUT")[0]; - - if (id == article_id) { - article.addClassName("selected"); - cb.checked = true; - } else { - article.removeClassName("selected"); - cb.checked = false; - } - - }); - - } catch (e) { - exception_error("set_selected_article", e); - } -} - - -function set_selected_feed(feed_id) { - try { - var feeds = $("feeds-content").getElementsByTagName("LI"); - - for (var i = 0; i < feeds.length; i++) { - if (feeds[i].id == "F-" + feed_id) - feeds[i].className = "selected"; - else - feeds[i].className = ""; - } - - _active_feed_id = feed_id; - - } catch (e) { - exception_error("set_selected_feed", e); - } -} - -function load_more() { - try { - var pr = $("H-LOADING-IMG"); - - if (pr) Element.show(pr); - - var offset = $$("#headlines-content > li[id*=A-][class*=fresh],li[id*=A-][class*=unread]").length; - - viewfeed(false, offset, false, false, true, - function() { - var pr = $("H-LOADING-IMG"); - - if (pr) Element.hide(pr); - }); - } catch (e) { - exception_error("load_more", e); - } -} - -function update(callback) { - try { - console.log('updating feeds...'); - - window.clearTimeout(_update_timeout); - - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestinit", - onComplete: function(transport) { - fatal_error_check(transport); - parse_feeds(transport); - set_selected_feed(_active_feed_id); - - if (callback) callback(transport); - } }); - - _update_timeout = window.setTimeout('update()', 5*1000); - } catch (e) { - exception_error("update", e); - } -} - -function remove_headline_entry(article_id) { - try { - var elem = $('A-' + article_id); - - if (elem) { - elem.parentNode.removeChild(elem); - } - - } catch (e) { - exception_error("remove_headline_entry", e); - } -} - -function view_update() { - try { - viewfeed(_active_feed_id, _active_feed_offset, false, true, true); - update(); - } catch (e) { - exception_error("view_update", e); - } -} - -function view(article_id) { - try { - $("content").addClassName("move"); - - var a = $("A-" + article_id); - var h = $("headlines"); - - setTimeout(function() { - // below or above viewport, reposition headline - if (a.offsetTop > h.scrollTop + h.offsetHeight || a.offsetTop+a.offsetHeight < h.scrollTop+a.offsetHeight) - h.scrollTop = a.offsetTop - (h.offsetHeight/2 - a.offsetHeight/2); - }, 500); - - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestgetcontents&article_id=" + - article_id, - onComplete: function(transport) { - fatal_error_check(transport); - - var reply = JSON.parse(transport.responseText); - - if (reply) { - var article = reply['article']; - - var mark_part = ""; - var publ_part = ""; - - var tags_part = ""; - - if (article.tags.length > 0) { - tags_part = " " + __("in") + " "; - - for (var i = 0; i < Math.min(5, article.tags.length); i++) { - //tags_part += "<a href=\"#\" onclick=\"viewfeed('" + - // article.tags[i] + "')\">" + - // article.tags[i] + "</a>, "; - - tags_part += article.tags[i] + ", "; - } - - tags_part = tags_part.replace(/, $/, ""); - tags_part = "<span class=\"tags\">" + tags_part + "</span>"; - - } - - if (article.marked) - mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.svg'>"; - else - mark_part = "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.svg'>"; - - if (article.published) - publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.svg'>"; - else - publ_part = "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.svg'>"; - - var tmp = "<div id=\"inner\">" + - "<div id=\"ops\">" + - mark_part + - publ_part + - "</div>" + - "<h1>" + "<a target=\"_blank\" href=\""+article.url+"\">" + - article.title + "</a>" + "</h1>" + - "<div id=\"tags\">" + - tags_part + - "</div>" + - article.content + "</div>"; - - $("article-content").innerHTML = tmp; - $("article").addClassName("visible"); - - set_selected_article(article.id); - - catchup_article(article_id, - function() { - $("A-" + article_id).addClassName("read"); - }); - - } else { - elem.innerHTML = __("Error: unable to load article."); - } - } - }); - - - return false; - } catch (e) { - exception_error("view", e); - } -} - -function close_feed() { - $("headlines").removeClassName("move"); - - if (mobile_mode) set_selected_feed(false); -} - -function go_back() { - if ($("article").hasClassName("visible")) { - close_article(); - } else { - close_feed(); - } -} - -function close_article() { - $("content").removeClassName("move"); - $("article").removeClassName("visible"); -} - -function viewfeed(feed_id, offset, replace, no_effects, no_indicator, callback) { - try { - - $("headlines").addClassName("move"); - - if (!feed_id) feed_id = _active_feed_id; - if (offset == undefined) offset = 0; - if (replace == undefined) replace = (offset == 0); - - _update_seq = _update_seq + 1; - - if (!offset) $("headlines").scrollTop = 0; - - var query = "op=digest&method=digestupdate&feed_id=" + - param_escape(feed_id) + "&offset=" + offset + - "&seq=" + _update_seq; - - console.log(query); - - var img = false; - - if ($("F-" + feed_id)) { - img = $("F-" + feed_id).getElementsByTagName("IMG")[0]; - - if (img && !no_indicator) { - img.setAttribute("orig_src", img.src); - img.src = 'images/indicator_tiny.gif'; - } - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - Element.hide("overlay"); - - fatal_error_check(transport); - parse_headlines(transport, replace, no_effects); - set_selected_feed(feed_id); - _active_feed_offset = offset; - - if (img && !no_indicator) - img.src = img.getAttribute("orig_src"); - - if (callback) callback(transport); - - } }); - - } catch (e) { - exception_error("view", e); - } -} - -function find_article(articles, article_id) { - try { - for (var i = 0; i < articles.length; i++) { - if (articles[i].id == article_id) - return articles[i]; - } - - return false; - - } catch (e) { - exception_error("find_article", e); - } -} - -function find_feed(feeds, feed_id) { - try { - for (var i = 0; i < feeds.length; i++) { - if (feeds[i].id == feed_id) - return feeds[i]; - } - - return false; - - } catch (e) { - exception_error("find_feed", e); - } -} - -function get_feed_icon(feed) { - try { - if (feed.has_icon) - return getInitParam('icons_url') + "/" + feed.id + '.ico'; - - if (feed.id == -1) - return 'images/mark_set.svg'; - - if (feed.id == -2) - return 'images/pub_set.svg'; - - if (feed.id == -3) - return 'images/fresh.png'; - - if (feed.id == -4) - return 'images/tag.png'; - - if (feed.id < -10) - return 'images/label.png'; - - return 'images/blank_icon.gif'; - - } catch (e) { - exception_error("get_feed_icon", e); - } -} - -function add_feed_entry(feed) { - try { - var icon_part = ""; - - icon_part = "<img src='" + get_feed_icon(feed) + "'/>"; - - var title = (feed.title.length > 30) ? - feed.title.substring(0, 30) + "…" : - feed.title; - - var tmp_html = "<li id=\"F-"+feed.id+"\" onclick=\"viewfeed("+feed.id+")\">" + - "<div class='unread-ctr'>" + "<span class=\"unread\">" + feed.unread + "</span></div>" + - icon_part + title + - "</li>"; - - $("feeds-content").innerHTML += tmp_html; - - - } catch (e) { - exception_error("add_feed_entry", e); - } -} - -function add_headline_entry(article, feed, no_effects) { - try { - - var icon_part = ""; - - icon_part = "<img class='icon' src='" + get_feed_icon(feed) + "'/>"; - - - var style = ""; - - //if (!no_effects) style = "style=\"display : none\""; - - if (article.excerpt.trim() == "") - article.excerpt = __("Click to expand article."); - - var li_class = "unread"; - - var fresh_max = getInitParam("fresh_article_max_age") * 60 * 60; - var d = new Date(); - - if (d.getTime() / 1000 - article.updated < fresh_max) - li_class = "fresh"; - - var checkbox_part = "<input type=\"checkbox\" class=\"cb\" onclick=\"toggle_select_article(this)\"/>"; - - var date = new Date(article.updated * 1000); - - var date_part = date.toString().substring(0,21); - - var tmp_html = "<li id=\"A-"+article.id+"\" "+style+" class=\""+li_class+"\">" + - checkbox_part + - icon_part + - "<a target=\"_blank\" href=\""+article.link+"\""+ - "onclick=\"return view("+article.id+")\" class='title'>" + - article.title + "</a>" + - "<div class='body'>" + - "<div onclick=\"view("+article.id+")\" class='excerpt'>" + - article.excerpt + "</div>" + - "<div onclick=\"view("+article.id+")\" class='info'>"; - -/* tmp_html += "<a href=\#\" onclick=\"viewfeed("+feed.id+")\">" + - feed.title + "</a> " + " @ "; */ - - tmp_html += date_part + "</div>" + - "</div></li>"; - - $("headlines-content").innerHTML += tmp_html; - - if (!no_effects) - window.setTimeout('article_appear(' + article.id + ')', 100); - - } catch (e) { - exception_error("add_headline_entry", e); - } -} - -function expand_feeds() { - try { - _feedlist_expanded = true; - - redraw_feedlist(last_feeds); - - } catch (e) { - exception_error("expand_feeds", e); - } -} - -function redraw_feedlist(feeds) { - try { - - $('feeds-content').innerHTML = ""; - - var limit = 10; - - if (_feedlist_expanded) limit = feeds.length; - - for (var i = 0; i < Math.min(limit, feeds.length); i++) { - add_feed_entry(feeds[i]); - } - - if (feeds.length > limit) { - $('feeds-content').innerHTML += "<li id='F-MORE-PROMPT'>" + - "<img src='images/blank_icon.gif'>" + - "<a href=\"#\" onclick=\"expand_feeds()\">" + - ngettext("%d more...", "%d more...", feeds.length-10).replace("%d", feeds.length-10) + - "</a>" + "</li>"; - } - - if (feeds.length == 0) { - $('feeds-content').innerHTML = - "<div class='insensitive' style='text-align : center'>" + - __("No unread feeds.") + "</div>"; - } - - if (_active_feed_id) - set_selected_feed(_active_feed_id); - - } catch (e) { - exception_error("redraw_feedlist", e); - } -} - -function parse_feeds(transport) { - try { - var reply = JSON.parse(transport.responseText); - - if (!reply) return; - - var feeds = reply['feeds']; - - if (feeds) { - - feeds.sort( function (a,b) - { - if (b.unread != a.unread) - return (b.unread - a.unread); - else - if (a.title > b.title) - return 1; - else if (a.title < b.title) - return -1; - else - return 0; - }); - - var all_articles = find_feed(feeds, -4); - - update_title(all_articles.unread); - - last_feeds = feeds; - - redraw_feedlist(feeds); - } - - if (reply['hotkeys']) { - hotkeys_map = reply['hotkeys']; - } - - } catch (e) { - console.log(e); - //exception_error("parse_feeds", e); - } -} - -function parse_headlines(transport, replace, no_effects) { - try { - var reply = JSON.parse(transport.responseText); - if (!reply) return; - - var seq = reply['seq']; - - if (seq) { - if (seq != _update_seq) { - console.log("parse_headlines: wrong sequence received."); - return; - } - } else { - return; - } - - var headlines = reply['headlines']['content']; - var headlines_title = reply['headlines']['title']; - - if (headlines && headlines_title) { - - if (replace) { - $('headlines-content').innerHTML = ''; - } - - var pr = $('H-MORE-PROMPT'); - - if (pr) pr.parentNode.removeChild(pr); - - var inserted = false; - - for (var i = 0; i < headlines.length; i++) { - - if (!$('A-' + headlines[i].id)) { - add_headline_entry(headlines[i], - find_feed(last_feeds, headlines[i].feed_id), !no_effects); - - } - } - - console.log(inserted.id); - - var ids = get_visible_article_ids(); - - if (ids.length > 0) { - if (pr) { - $('headlines-content').appendChild(pr); - - } else { - $('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" + - "<div class='body'>" + - "<a href=\"#\" onclick=\"catchup_visible_articles()\">" + - __("Mark as read") + "</a> | " + - "<a href=\"javascript:load_more()\">" + - __("Load more...") + "</a>" + - "<img style=\"display : none\" "+ - "id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" + - "</div></li>"; - } - } else { - // FIXME : display some kind of "nothing to see here" prompt here - } - -// if (replace && !no_effects) -// new Effect.Appear('headlines-content', {duration : 0.3}); - - //new Effect.Appear('headlines-content'); - } - - } catch (e) { - exception_error("parse_headlines", e); - } -} - -function init_second_stage() { - try { - new Ajax.Request("backend.php", { - parameters: "op=digest&method=digestinit&init=1", - onComplete: function(transport) { - parse_feeds(transport); - Element.hide("overlay"); - - document.onkeydown = hotkey_handler; - - if (!mobile_mode) - window.setTimeout('viewfeed(-4)', 100); - _update_timeout = window.setTimeout('update()', 5*1000); - } }); - - } catch (e) { - exception_error("init_second_stage", e); - } -} - -function init(mobile) { - try { - mobile_mode = mobile; - - new Ajax.Request("backend.php", { - parameters: {op: "rpc", method: "sanityCheck"}, - onComplete: function(transport) { - backend_sanity_check_callback(transport); - } }); - - } catch (e) { - exception_error("digest_init", e); - } -} - -function toggle_mark(img, id) { - - try { - - var query = "op=rpc&id=" + id + "&method=mark"; - - if (!img) return; - - if (img.src.match("mark_unset")) { - img.src = img.src.replace("mark_unset", "mark_set"); - img.alt = __("Unstar article"); - query = query + "&mark=1"; - } else { - img.src = img.src.replace("mark_set", "mark_unset"); - img.alt = __("Star article"); - query = query + "&mark=0"; - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - update(); - } }); - - } catch (e) { - exception_error("toggle_mark", e); - } -} - -function toggle_pub(img, id, note) { - - try { - - var query = "op=rpc&id=" + id + "&method=publ"; - - if (note != undefined) { - query = query + "¬e=" + param_escape(note); - } else { - query = query + "¬e=undefined"; - } - - if (!img) return; - - if (img.src.match("pub_unset") || note != undefined) { - img.src = img.src.replace("pub_unset", "pub_set"); - img.alt = __("Unpublish article"); - query = query + "&pub=1"; - - } else { - img.src = img.src.replace("pub_set", "pub_unset"); - img.alt = __("Publish article"); - query = query + "&pub=0"; - } - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - update(); - } }); - - } catch (e) { - exception_error("toggle_pub", e); - } -} - -function fatal_error(code, msg) { - try { - - if (code == 6) { - window.location.href = "digest.php"; - } else if (code == 5) { - window.location.href = "public.php?op=dbupdate"; - } else { - - if (msg == "") msg = "Unknown error"; - - console.error("Fatal error: " + code + "\n" + - msg); - - } - - } catch (e) { - exception_error("fatalError", e); - } -} - -function fatal_error_check(transport) { - try { - if (transport.responseXML) { - var error = transport.responseXML.getElementsByTagName("error")[0]; - - if (error) { - var code = error.getAttribute("error-code"); - var msg = error.getAttribute("error-msg"); - if (code != 0) { - fatal_error(code, msg); - return false; - } - } - } - } catch (e) { - exception_error("fatal_error_check", e); - } - return true; -} - -function update_title(unread) { - try { - document.title = "Tiny Tiny RSS"; - - if (unread > 0) - document.title += " (" + unread + ")"; - - } catch (e) { - exception_error("update_title", e); - } -} - -function toggle_select_article(elem) { - try { - var article = elem.parentNode; - - if (article.hasClassName("selected")) - article.removeClassName("selected"); - else - article.addClassName("selected"); - - } catch (e) { - exception_error("toggle_select_article", e); - } -} - -function hotkey_handler(e) { - try { - - if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return; - - var keycode = false; - var shift_key = false; - - var cmdline = $('cmdline'); - - try { - shift_key = e.shiftKey; - } catch (e) { - - } - - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; - } - - var keychar = String.fromCharCode(keycode); - - if (!shift_key) keychar = keychar.toLowerCase(); - - if (keycode == 16) return; // ignore lone shift - if (keycode == 17) return; // ignore lone ctrl - - var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; - hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; - hotkey_prefix = false; - - var hotkey_action = false; - var hotkeys = getInitParam("hotkeys"); - - for (sequence in hotkeys[1]) { - if (sequence == hotkey) { - hotkey_action = hotkeys[1][sequence]; - break; - } - } - - switch (keycode) { - case 27: // esc - go_back(); - return false; - } - - switch (hotkey_action) { - case "next_feed": - var feeds = $$("#feeds li"); - for (var i = 0; i < feeds.length; i++) { - var base_id = feeds[i].id.replace("F-", ""); - - if (base_id == _active_feed_id) { - if (feeds[i+1]) { - viewfeed(feeds[i+1].id.replace("F-", "")); - } - break; - } - } - return false; - case "prev_feed": - var feeds = $$("#feeds li"); - for (var i = 0; i < feeds.length; i++) { - var base_id = feeds[i].id.replace("F-", ""); - - if (base_id == _active_feed_id) { - if (feeds[i-1]) { - viewfeed(feeds[i-1].id.replace("F-", "")); - } - break; - } - } - return false; - case "next_article": - return false; - case "prev_article": - return false; - default: - console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey); - } - - - } catch (e) { - exception_error("hotkey_handler", e); - } -} diff --git a/plugins/digest/digest_body.php b/plugins/digest/digest_body.php deleted file mode 100644 index e7434fe70..000000000 --- a/plugins/digest/digest_body.php +++ /dev/null @@ -1,99 +0,0 @@ -<?php global $link; ?> - -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - -<html> -<head> - <title>Tiny Tiny RSS</title> - - <?php - require_once "lib/Mobile_Detect.php"; - $mobile = new Mobile_Detect(); - - if ($mobile->isMobile() || @$_REQUEST['mode'] == 'mobile') { - $_SESSION["digest_mobile"] = 1; - echo stylesheet_tag("plugins/digest/mobile.css"); - } else { - $_SESSION["digest_mobile"] = 0; - echo stylesheet_tag("plugins/digest/digest.css"); - } - ?> - - <meta name="viewport" content="width=device-width, - minimum-scale=1.0, maximum-scale=1.0" /> - - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> - - <?php print_user_stylesheet($link) ?> - - <link rel="shortcut icon" type="image/png" href="images/favicon.png"/> - - <?php - foreach (array("lib/prototype.js", - "lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls", - "js/functions.js", - "plugins/digest/digest.js", - "errors.php?mode=js") as $jsfile) { - - echo javascript_tag($jsfile); - } ?> - - <script type="text/javascript"> - <?php init_js_translations(); ?> - </script> - - <script type="text/javascript" src="plugins/digest/digest.js"></script> - - <script type="text/javascript"> - Event.observe(window, 'load', function() { - init(<?php echo $_SESSION["digest_mobile"] ?>); - }); - </script> -</head> -<body id="ttrssDigest"> - <div id="overlay" style="display : block"> - <div id="overlay_inner"> - <noscript> - <p> - <?php print_error(__("Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings.")) ?></p> - </noscript> - - <img src="images/indicator_white.gif"/> - <?php echo __("Loading, please wait...") ?> - </div> - </div> - - <div id="header"> - <a style="float : left" href="#" onclick="go_back()"> - <?php echo __("Go back") ?></a> - - <div class="links"> - - <?php if (!$_SESSION["hide_hello"]) { ?> - <?php echo __('Hello,') ?> <b><?php echo $_SESSION["name"] ?></b> | - <?php } ?> - <?php if (!$_SESSION["hide_logout"]) { ?> - <a href="backend.php?op=logout"><?php echo __('Logout') ?></a> | - <?php } ?> - <a href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'> - <?php echo __("Regular version") ?></a> - - </div> - </div> - - <div id="article"><div id="article-content"> </div></div> - - <div id="content"> - - <div id="feeds"> - <ul id="feeds-content"> </ul> - </div> - - <div id="headlines"> - <ul id="headlines-content"> </ul> - </div> - </div> - -</body> -</html> diff --git a/plugins/digest/images/tile.png b/plugins/digest/images/tile.png Binary files differdeleted file mode 100644 index 72f2f4553..000000000 --- a/plugins/digest/images/tile.png +++ /dev/null diff --git a/plugins/digest/init.php b/plugins/digest/init.php deleted file mode 100644 index e65ae13d7..000000000 --- a/plugins/digest/init.php +++ /dev/null @@ -1,110 +0,0 @@ -<?php -// TODO: digest should register digest specific hotkey actions within tt-rss -class Digest extends Plugin implements IHandler { - - private $link; - private $host; - - function about() { - return array(1.0, - "Digest mode for tt-rss (tablet friendly UI)", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("digest", "*", $this); - } - - function index() { - header("Content-type: text/html; charset=utf-8"); - - login_sequence($this->link); - - global $link; - $link = $this->link; - - require_once dirname(__FILE__) . "/digest_body.php"; - } - - /* function get_js() { - return file_get_contents(dirname(__FILE__) . "/digest.js"); - } */ - - function csrf_ignore($method) { - return in_array($method, array("index")); - } - - function before($method) { - return true; - } - - function after() { - - } - - function digestgetcontents() { - $article_id = db_escape_string($this->link, $_REQUEST['article_id']); - - $result = db_query($this->link, "SELECT content,title,link,marked,published - FROM ttrss_entries, ttrss_user_entries - WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']); - - $content = sanitize($this->link, db_fetch_result($result, 0, "content")); - $title = strip_tags(db_fetch_result($result, 0, "title")); - $article_url = htmlspecialchars(db_fetch_result($result, 0, "link")); - $marked = sql_bool_to_bool(db_fetch_result($result, 0, "marked")); - $published = sql_bool_to_bool(db_fetch_result($result, 0, "published")); - - print json_encode(array("article" => - array("id" => $article_id, "url" => $article_url, - "tags" => get_article_tags($this->link, $article_id), - "marked" => $marked, "published" => $published, - "title" => $title, "content" => $content))); - } - - function digestupdate() { - $feed_id = db_escape_string($this->link, $_REQUEST['feed_id']); - $offset = db_escape_string($this->link, $_REQUEST['offset']); - $seq = db_escape_string($this->link, $_REQUEST['seq']); - - if (!$feed_id) $feed_id = -4; - if (!$offset) $offset = 0; - - $reply = array(); - - $reply['seq'] = $seq; - - $headlines = API::api_get_headlines($this->link, $feed_id, 30, $offset, - '', ($feed_id == -4), true, false, "unread", "updated DESC", 0, 0); - - $reply['headlines'] = array(); - $reply['headlines']['title'] = getFeedTitle($this->link, $feed_id); - $reply['headlines']['content'] = $headlines; - - print json_encode($reply); - } - - function digestinit() { - $tmp_feeds = API::api_get_feeds($this->link, -4, true, false, 0); - - $params = array(); - $feeds = array(); - - foreach ($tmp_feeds as $f) { - if ($f['id'] > 0 || $f['id'] == -4) array_push($feeds, $f); - } - - if ($_REQUEST["init"] == 1) { - $params["hotkeys"] = get_hotkeys_map($this->link); - } - $params["feeds"] = $feeds; - - print json_encode($params); - } - -} -?> diff --git a/plugins/digest/mobile.css b/plugins/digest/mobile.css deleted file mode 100644 index 89989dfe6..000000000 --- a/plugins/digest/mobile.css +++ /dev/null @@ -1,345 +0,0 @@ -body#ttrssDigest { - color : black; - font-family : sans-serif; - font-size : 12px; - margin : 0px; - background : url("images/tile.png"); -} - -a { - color : #0069D8; - text-decoration : none; -} - -a:hover { - color : gray; -} - -#header a, #footer a { - color : gray; -} - -#header a:hover, #footer a:hover { - color : #0069D8; -} - -#header { - font-size : 14px; - font-weight : bold; - font-family : "Segoe UI", Tahoma, sans-serif; - padding : 5px 5px 5px 1.5em; - color : gray; - position : absolute; - top : 0px; - height : 30px; - left : 0px; - right : 0px; - color : #a0a0a0; -} - -#header span.title { - font-weight : bold; - font-style : italic; -} - -#header div.links { - position : absolute; - right : 1.5em; -} - -#search { - float : right; - clear : left; - -} - -#title { -} - -#latest { - padding : 5px; -} - -#content { - position : absolute; - left : 0px; - top : 30px; - right : 0px; - bottom : 0px; - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; -} - -#article { - position : absolute; - overflow : auto; - right : 0px; - width : 100%; - bottom : 0px; - top : 30px; - background : white; - opacity : 0; - -webkit-transition: opacity 0.2s linear; - -moz-transition: opacity 0.2s linear; - transition: opacity 0.2s linear; -} - -#article.visible { - opacity : 1; -} - -#article #article-content h1 { - margin : 0px; - padding : 0px; - font-family : "Segoe UI", Tahoma, sans-serif; - font-size : 21px; - font-weight : bold; - border-width : 0px 0px 3px 0px; - border-style : solid; - border-color : #e0e0e0; - color : gray; -} - -#article #article-content #toolbar { - border-width : 0px 0px 1px 0px; - border-color : #e0e0e0; - border-style : solid; - background : #fafafa; - font-size : 14px; - font-weight : bold; - padding : 5px 10px 5px 10px; - margin : 0px 0px 0px 0px; -} - -#article #article-content { - padding : 0px; - font-size : 16px; -} - -#article #article-content #tags { - color : #a0a0a0; - margin-bottom : 5px; -} - -#article #article-content #ops { - float : right; -} - -#article #article-content #ops img { - cursor : pointer; - margin-right : 0px; - margin-left : 10px; -} - -#article #article-content #inner { - padding : 10px; -} - -#article #article-content img { - max-width : 90%; -} - -#content.move { - left : 0px; - right : 100%; -} - -#feeds { - position : absolute; - left : 0px; - top : 0px; - right : 0px; - bottom : 0px; - font-size : 14px; - overflow : auto; - background : white; -} - -#feeds ul#feeds-content img { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; -} - -#feeds ul#feeds-content div.unread-ctr { - color : #d0d0d0; - padding-left : 10px; - float : right; -} - -#feeds ul#feeds-content li { - padding : 10px; - clear : both; - cursor : pointer; - color : #303030; - white-space : nowrap; -} - -#feeds ul#feeds-content li.selected { - background : white; -} - -#feeds ul#feeds-content { - list-style-type : none; - font-weight : bold; - margin : 0px; - padding : 0px; -} - -#headlines { - font-size : 14px; - position : absolute; - top : 0px; - bottom : 0px; - right : 0px; - overflow : auto; - background : white; - border-width : 0px 3px 0px 0px; - border-style : solid; - border-color : #88b0f0; - left : 100%; - - -webkit-transition: left 0.2s linear, right 0.2s linear; - -moz-transition: left 0.2s linear, right 0.2s linear; - transition: left 0.2s linear, right 0.2s linear; - -} - -#headlines.move { - left : 0px; -} - -#headlines h1 a { - color : #684C99; -} - -#headlines ul#headlines-content .cb { - vertical-align : middle; - margin-right : 5px; - float : left; -} - -#headlines ul#headlines-content img.icon { - width : 16px; - height : 16px; - vertical-align : middle; - margin-right : 5px; - float : right; -} - -#headlines ul#headlines-content { - list-style-type : none; - color : gray; - margin : 0px; - padding : 0px; -} - -#headlines ul#headlines-content li { - margin : 0px 0px 0px 0px; - padding : 10px; - color : gray; - clear : left; - border-width : 0px 0px 1px 0px; - border-style : solid; - border-color : #e0e0e0; - background : #eee; -} - -#headlines ul#headlines-content a.title { - font-size : 14px; - font-weight : bold; - display : block; - margin-left : 21px; - position : relative; -} - -#headlines ul#headlines-content li.fresh a.title { - color : #007FFF; -} - -#headlines ul#headlines-content li.unread a.title { - color : black; - /* color : #8DB1D6; */ -} - -#headlines ul#headlines-content li.read a.title { - color : gray; -} - -#headlines ul#headlines-content li.unread, -#headlines ul#headlines-content li.fresh { - background-color : white; -} - -#headlines ul#headlines-content li.selected { - background-color : #fff7d5; - border-color : white white #e0e0e0; -} - -#headlines ul#headlines-content img#H-LOADING-IMG { - margin-left : 5px; -} - -#headlines ul#headlines-content div.excerpt { - color : #404040; - cursor : pointer; - margin-top : 5px; -} - -#headlines ul#headlines-content div.content { - color : #404040; -} - -#headlines ul#headlines-content div.content img { - max-width : 75%; -} - -#headlines ul#headlines-content div.body { - margin-left : 21px; - /*margin-left : 42px;*/ -} - -#headlines ul#headlines-content div.info { - font-size : 11px; - margin-top : 5px; -} - -#headlines ul#headlines-content div.info a { - color : gray; -} - -#overlay { - background : white; - left : 0; - top : 0; - height : 100%; - width : 100%; - z-index : 100; - position : absolute; - text-align : center; -} - -#overlay_inner { - margin : 1em; -} - -#overlay img { - vertical-align : middle; -} - -div.fatalError button { - margin-top : 5px; -} - -div.fatalError textarea { - width : 100%; - height : 100px; -} - -div.insensitive { - color : gray; -} - - diff --git a/plugins/embed_original/init.php b/plugins/embed_original/init.php index 0e0eb9603..df803d38b 100644 --- a/plugins/embed_original/init.php +++ b/plugins/embed_original/init.php @@ -1,10 +1,8 @@ <?php class Embed_Original extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -36,9 +34,9 @@ class Embed_Original extends Plugin { } function getUrl() { - $id = db_escape_string($this->link, $_REQUEST['id']); + $id = db_escape_string($_REQUEST['id']); - $result = db_query($this->link, "SELECT link + $result = db_query("SELECT link FROM ttrss_entries, ttrss_user_entries WHERE id = '$id' AND ref_id = id AND owner_uid = " .$_SESSION['uid']); @@ -52,5 +50,9 @@ class Embed_Original extends Plugin { print json_encode(array("url" => $url, "id" => $id)); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/example/example.js b/plugins/example/example.js deleted file mode 100644 index a31f2c2a2..000000000 --- a/plugins/example/example.js +++ /dev/null @@ -1,3 +0,0 @@ -function example(value) { - alert("Value saved: " + value); -} diff --git a/plugins/example/init.php b/plugins/example/init.php deleted file mode 100644 index 333efd92d..000000000 --- a/plugins/example/init.php +++ /dev/null @@ -1,83 +0,0 @@ -<?php -class Example extends Plugin { - - // Demonstrates how to add a separate panel to the preferences screen and inject Javascript/save data using Dojo forms. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example plugin #1", - "fox", - true, - "http://site.com"); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_PREFS_TAB, $this); - } - - function save() { - $example_value = db_escape_string($this->link, $_POST["example_value"]); - - $this->host->set($this, "example", $example_value); - - echo "Value set to $example_value"; - } - - function get_prefs_js() { - return file_get_contents(dirname(__FILE__) . "/example.js"); - } - - function hook_prefs_tab($args) { - if ($args != "prefPrefs") return; - - print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__("Example Pane")."\">"; - - print "<br/>"; - -// print_r($this->host->set($this, "example", rand(0,100))); -// print_r($this->host->get_all($this)); - - $value = $this->host->get($this, "example"); - - print "<form dojoType=\"dijit.form.Form\">"; - - print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\"> - evt.preventDefault(); - if (this.validate()) { - console.log(dojo.objectToQuery(this.getValues())); - new Ajax.Request('backend.php', { - parameters: dojo.objectToQuery(this.getValues()), - onComplete: function(transport) { - notify_info(transport.responseText); - } - }); - //this.reset(); - } - </script>"; - - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pluginhandler\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"save\">"; - print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"example\">"; - - print "<table width=\"100%\" class=\"prefPrefsList\">"; - - print "<tr><td width=\"40%\">".__("Sample value")."</td>"; - print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"example_value\" value=\"$value\"></td></tr>"; - - print "</table>"; - - print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">". - __("Set value")."</button>"; - - print "</form>"; - - print "</div>"; #pane - } -} -?> diff --git a/plugins/example_article/init.php b/plugins/example_article/init.php deleted file mode 100644 index 05f95a40a..000000000 --- a/plugins/example_article/init.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -class Example_Article extends Plugin { - - private $link; - private $host; - - function about() { - return array(1.0, - "Example plugin for HOOK_RENDER_ARTICLE", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_RENDER_ARTICLE, $this); - } - - function get_prefs_js() { - return file_get_contents(dirname(__FILE__) . "/init.js"); - } - - function hook_render_article($article) { - $article["content"] = "Content changed: " . $article["content"]; - - return $article; - } -} -?> diff --git a/plugins/example_feed/init.php b/plugins/example_feed/init.php deleted file mode 100644 index af14d3ff3..000000000 --- a/plugins/example_feed/init.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php -class Example_Feed extends Plugin { - - // Demonstrates how to query data from the parsed feed object (SimplePie) - // don't enable unless debugging feed through f D hotkey or manually. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example feed plugin", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_hook($host::HOOK_FEED_PARSED, $this); - } - - function hook_feed_parsed($feed) { - _debug("I'm a little feed short and stout, here's my title: " . $feed->get_title()); - _debug("... here's my link element: " . $feed->get_link()); - } -} -?> diff --git a/plugins/example_routing/init.php b/plugins/example_routing/init.php deleted file mode 100644 index 31c5b6f28..000000000 --- a/plugins/example_routing/init.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -class Example_Routing extends Plugin implements IHandler { - - // Demonstrates adding a custom handler and method: - // backend.php?op=test&method=example - // and masking a system builtin public method: - // public.php?op=getUnread - - // Plugin class must implelement IHandler interface and has - // a public method of same name as being registered. - // - // Any system method may be masked by plugins. You can mask - // entire handler by supplying "*" instead of a method name. - - private $link; - private $host; - - function about() { - return array(1.0, - "Example routing plugin", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("test", "example", $this); - $host->add_handler("public", "getunread", $this); - } - - function getunread() { - print rand(0,100); # yeah right - } - - function example() { - print "example method called"; - } - - function csrf_ignore($method) { - return true; - } - - function before($method) { - return true; - } - - function after() { - return true; - } - -} -?> diff --git a/plugins/example_vfeed/init.php b/plugins/example_vfeed/init.php deleted file mode 100644 index e646809a4..000000000 --- a/plugins/example_vfeed/init.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php -class Example_VFeed extends Plugin { - - // Demonstrates how to create a dummy special feed and chain - // headline generation to queryFeedHeadlines(); - - // Not implemented yet: stuff for 3 panel mode - - private $link; - private $host; - private $dummy_id; - - function about() { - return array(1.0, - "Example vfeed plugin", - "fox", - false); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $this->dummy_id = $host->add_feed(-1, 'Dummy feed', 'images/pub_set.svg', $this); - } - - function get_unread($feed_id) { - return 1234; - } - - function get_headlines($feed_id, $options) { - $qfh_ret = queryFeedHeadlines($this->link, -4, - $options['limit'], - $options['view_mode'], $options['cat_view'], - $options['search'], - $options['search_mode'], - $options['override_order'], - $options['offset'], - $options['owner_uid'], - $options['filter'], - $options['since_id'], - $options['include_children']); - - $qfh_ret[1] = 'Dummy feed'; - - return $qfh_ret; - } -} -?> diff --git a/plugins/googlereaderimport/init.php b/plugins/googlereaderimport/init.php index ac7a872f2..2e22161b9 100644 --- a/plugins/googlereaderimport/init.php +++ b/plugins/googlereaderimport/init.php @@ -1,8 +1,5 @@ <?php class GoogleReaderImport extends Plugin { - - - private $link; private $host; function about() { @@ -14,7 +11,6 @@ class GoogleReaderImport extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_command("greader-import", @@ -34,11 +30,11 @@ class GoogleReaderImport extends Plugin { _debug("please enter your username:"); - $username = db_escape_string($this->link, trim(read_stdin())); + $username = db_escape_string(trim(read_stdin())); _debug("looking up user: $username..."); - $result = db_query($this->link, "SELECT id FROM ttrss_users + $result = db_query("SELECT id FROM ttrss_users WHERE login = '$username'"); if (db_num_rows($result) == 0) { @@ -59,15 +55,39 @@ class GoogleReaderImport extends Plugin { function import($file = false, $owner_uid = 0) { - purge_orphans($this->link); + purge_orphans(); if (!$file) { header("Content-Type: text/html"); $owner_uid = $_SESSION["uid"]; - if (is_file($_FILES['starred_file']['tmp_name'])) { - $doc = json_decode(file_get_contents($_FILES['starred_file']['tmp_name']), true); + if ($_FILES['starred_file']['error'] != 0) { + print_error(T_sprintf("Upload failed with error code %d", + $_FILES['starred_file']['error'])); + return; + } + + $tmp_file = false; + + if (is_uploaded_file($_FILES['starred_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'starred'); + + $result = move_uploaded_file($_FILES['starred_file']['tmp_name'], + $tmp_file); + + if (!$result) { + print_error(__("Unable to move uploaded file.")); + return; + } + } else { + print_error(__('Error: please upload OPML file.')); + return; + } + + if (is_file($tmp_file)) { + $doc = json_decode(file_get_contents($tmp_file), true); + unlink($tmp_file); } else { print_error(__('No file uploaded.')); return; @@ -91,30 +111,30 @@ class GoogleReaderImport extends Plugin { foreach ($doc['items'] as $item) { // print_r($item); - $guid = db_escape_string($this->link, mb_substr($item['id'], 0, 250)); - $title = db_escape_string($this->link, $item['title']); + $guid = db_escape_string(mb_substr($item['id'], 0, 250)); + $title = db_escape_string($item['title']); $updated = date('Y-m-d h:i:s', $item['updated']); $link = ''; $content = ''; - $author = db_escape_string($this->link, $item['author']); + $author = db_escape_string($item['author']); $tags = array(); $orig_feed_data = array(); if (is_array($item['alternate'])) { foreach ($item['alternate'] as $alt) { if (isset($alt['type']) && $alt['type'] == 'text/html') { - $link = db_escape_string($this->link, $alt['href']); + $link = db_escape_string($alt['href']); } } } if (is_array($item['summary'])) { - $content = db_escape_string($this->link, + $content = db_escape_string( $item['summary']['content'], false); } if (is_array($item['content'])) { - $content = db_escape_string($this->link, + $content = db_escape_string( $item['content']['content'], false); } @@ -129,14 +149,14 @@ class GoogleReaderImport extends Plugin { if (is_array($item['origin'])) { if (strpos($item['origin']['streamId'], 'feed/') === 0) { - $orig_feed_data['feed_url'] = db_escape_string($this->link, + $orig_feed_data['feed_url'] = db_escape_string( mb_substr(preg_replace("/^feed\//", "", $item['origin']['streamId']), 0, 200)); - $orig_feed_data['title'] = db_escape_string($this->link, + $orig_feed_data['title'] = db_escape_string( mb_substr($item['origin']['title'], 0, 200)); - $orig_feed_data['site_url'] = db_escape_string($this->link, + $orig_feed_data['site_url'] = db_escape_string( mb_substr($item['origin']['htmlUrl'], 0, 200)); } } @@ -144,7 +164,7 @@ class GoogleReaderImport extends Plugin { $processed++; $imported += (int) $this->create_article($owner_uid, $guid, $title, - $updated, $link, $content, $author, $sql_set_marked, $tags, + $link, $updated, $content, $author, $sql_set_marked, $tags, $orig_feed_data); if ($file && $processed % 25 == 0) { @@ -176,7 +196,7 @@ class GoogleReaderImport extends Plugin { } // expects ESCAPED data - private function create_article($owner_uid, $guid, $title, $updated, $link, $content, $author, $marked, $tags, $orig_feed_data) { + private function create_article($owner_uid, $guid, $title, $link, $updated, $content, $author, $marked, $tags, $orig_feed_data) { if (!$guid) $guid = sha1($link); @@ -186,9 +206,9 @@ class GoogleReaderImport extends Plugin { $content_hash = sha1($content); - if (filter_var($link, FILTER_VALIDATE_URL) === FALSE) return false; + if (filter_var(FILTER_VALIDATE_URL) === FALSE) return false; - db_query($this->link, "BEGIN"); + db_query("BEGIN"); $feed_id = 'NULL'; @@ -199,7 +219,7 @@ class GoogleReaderImport extends Plugin { // before dealing with archived feeds we must check ttrss_feeds to maintain id consistency if ($orig_feed_data['feed_url'] && $create_archived_feeds) { - $result = db_query($this->link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); @@ -210,7 +230,7 @@ class GoogleReaderImport extends Plugin { if (!$orig_feed_data['title']) $orig_feed_data['title'] = '[Unknown]'; - $result = db_query($this->link, + $result = db_query( "INSERT INTO ttrss_feeds (owner_uid,feed_url,site_url,title,cat_id,auth_login,auth_pass,update_method) VALUES ($owner_uid, @@ -219,7 +239,7 @@ class GoogleReaderImport extends Plugin { '".$orig_feed_data['title']."', NULL, '', '', 0)"); - $result = db_query($this->link, + $result = db_query( "SELECT id FROM ttrss_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); @@ -234,18 +254,18 @@ class GoogleReaderImport extends Plugin { // locate archived entry to file entries in, we don't want to file them in actual feeds because of purging // maybe file marked in real feeds because eh - $result = db_query($this->link, "SELECT id FROM ttrss_archived_feeds WHERE + $result = db_query("SELECT id FROM ttrss_archived_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); if (db_num_rows($result) != 0) { $orig_feed_id = db_fetch_result($result, 0, "id"); } else { - db_query($this->link, "INSERT INTO ttrss_archived_feeds + db_query("INSERT INTO ttrss_archived_feeds (id, owner_uid, title, feed_url, site_url) SELECT id, owner_uid, title, feed_url, site_url from ttrss_feeds WHERE id = '$feed_id'"); - $result = db_query($this->link, "SELECT id FROM ttrss_archived_feeds WHERE + $result = db_query("SELECT id FROM ttrss_archived_feeds WHERE feed_url = '".$orig_feed_data['feed_url']."' AND owner_uid = $owner_uid"); if (db_num_rows($result) != 0) { @@ -256,32 +276,32 @@ class GoogleReaderImport extends Plugin { // delete temporarily inserted feed if ($feed_id && $feed_inserted) { - db_query($this->link, "DELETE FROM ttrss_feeds WHERE id = $feed_id"); + db_query("DELETE FROM ttrss_feeds WHERE id = $feed_id"); } if (!$orig_feed_id) $orig_feed_id = 'NULL'; - $result = db_query($this->link, "SELECT id FROM ttrss_entries, ttrss_user_entries WHERE + $result = db_query("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE guid = '$guid' AND ref_id = id AND owner_uid = '$owner_uid' LIMIT 1"); if (db_num_rows($result) == 0) { - $result = db_query($this->link, "INSERT INTO ttrss_entries + $result = db_query("INSERT INTO ttrss_entries (title, guid, link, updated, content, content_hash, date_entered, date_updated, author) VALUES ('$title', '$guid', '$link', '$updated', '$content', '$content_hash', NOW(), NOW(), '$author')"); - $result = db_query($this->link, "SELECT id FROM ttrss_entries WHERE guid = '$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"); - db_query($this->link, "INSERT INTO ttrss_user_entries + db_query("INSERT INTO ttrss_user_entries (ref_id, uuid, feed_id, orig_feed_id, owner_uid, marked, tag_cache, label_cache, last_read, note, unread, last_marked) VALUES ('$ref_id', '', NULL, $orig_feed_id, $owner_uid, $marked, '', '', NOW(), '', false, NOW())"); - $result = db_query($this->link, "SELECT int_id FROM ttrss_user_entries, ttrss_entries + $result = db_query("SELECT int_id FROM ttrss_user_entries, ttrss_entries WHERE owner_uid = $owner_uid AND ref_id = id AND ref_id = $ref_id"); if (db_num_rows($result) != 0 && is_array($tags)) { @@ -291,16 +311,16 @@ class GoogleReaderImport extends Plugin { foreach ($tags as $tag) { - $tag = db_escape_string($this->link, sanitize_tag($tag)); + $tag = db_escape_string(sanitize_tag($tag)); if (!tag_is_valid($tag)) continue; - $result = db_query($this->link, "SELECT id FROM ttrss_tags + $result = db_query("SELECT id FROM ttrss_tags WHERE tag_name = '$tag' AND post_int_id = '$entry_int_id' AND owner_uid = '$owner_uid' LIMIT 1"); if ($result && db_num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_tags + db_query("INSERT INTO ttrss_tags (owner_uid,tag_name,post_int_id) VALUES ('$owner_uid','$tag', '$entry_int_id')"); } @@ -311,9 +331,9 @@ class GoogleReaderImport extends Plugin { /* update the cache */ $tags_to_cache = array_unique($tags_to_cache); - $tags_str = db_escape_string($this->link, join(",", $tags_to_cache)); + $tags_str = db_escape_string(join(",", $tags_to_cache)); - db_query($this->link, "UPDATE ttrss_user_entries + db_query("UPDATE ttrss_user_entries SET tag_cache = '$tags_str' WHERE ref_id = '$ref_id' AND owner_uid = $owner_uid"); } @@ -322,7 +342,7 @@ class GoogleReaderImport extends Plugin { } } - db_query($this->link, "COMMIT"); + db_query("COMMIT"); return $rc; } @@ -350,8 +370,14 @@ class GoogleReaderImport extends Plugin { <button dojoType=\"dijit.form.Button\" onclick=\"return starredImport();\" type=\"submit\">" . __('Import my Starred items') . "</button>"; + print "</form>"; print "</div>"; #pane } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/googlereaderkeys/init.php b/plugins/googlereaderkeys/init.php index afdc58ec7..c8e7d7a38 100644 --- a/plugins/googlereaderkeys/init.php +++ b/plugins/googlereaderkeys/init.php @@ -1,7 +1,5 @@ <?php class GoogleReaderKeys extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class GoogleReaderKeys extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_HOTKEY_MAP, $this); @@ -31,7 +28,11 @@ class GoogleReaderKeys extends Plugin { $hotkeys["(40)|down"] = "article_scroll_down"; return $hotkeys; + } + function api_version() { + return 2; } + } ?> diff --git a/plugins/import_export/init.php b/plugins/import_export/init.php index 1d7a8e55f..15c7dea9b 100644 --- a/plugins/import_export/init.php +++ b/plugins/import_export/init.php @@ -1,11 +1,8 @@ <?php class Import_Export extends Plugin implements IHandler { - - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -29,11 +26,11 @@ class Import_Export extends Plugin implements IHandler { _debug("please enter your username:"); - $username = db_escape_string($this->link, trim(read_stdin())); + $username = db_escape_string(trim(read_stdin())); _debug("importing $filename for user $username...\n"); - $result = db_query($this->link, "SELECT id FROM ttrss_users WHERE login = '$username'"); + $result = db_query("SELECT id FROM ttrss_users WHERE login = '$username'"); if (db_num_rows($result) == 0) { print "error: could not find user $username.\n"; @@ -42,11 +39,11 @@ class Import_Export extends Plugin implements IHandler { $owner_uid = db_fetch_result($result, 0, "id"); - $this->perform_data_import($this->link, $filename, $owner_uid); + $this->perform_data_import($filename, $owner_uid); } function save() { - $example_value = db_escape_string($this->link, $_POST["example_value"]); + $example_value = db_escape_string($_POST["example_value"]); echo "Value set to $example_value (not really)"; } @@ -83,6 +80,7 @@ class Import_Export extends Plugin implements IHandler { <button dojoType=\"dijit.form.Button\" onclick=\"return importData();\" type=\"submit\">" . __('Import') . "</button>"; + print "</form>"; print "</div>"; # pane } @@ -119,12 +117,12 @@ class Import_Export extends Plugin implements IHandler { } function exportrun() { - $offset = (int) db_escape_string($this->link, $_REQUEST['offset']); + $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 + $result = db_query("SELECT ttrss_entries.guid, ttrss_entries.title, content, @@ -183,7 +181,7 @@ class Import_Export extends Plugin implements IHandler { print json_encode(array("exported" => $exported)); } - function perform_data_import($link, $filename, $owner_uid) { + function perform_data_import($filename, $owner_uid) { $num_imported = 0; $num_processed = 0; @@ -236,7 +234,7 @@ class Import_Export extends Plugin implements IHandler { foreach ($article_node->childNodes as $child) { if ($child->nodeName != 'label_cache') - $article[$child->nodeName] = db_escape_string($this->link, $child->nodeValue); + $article[$child->nodeName] = db_escape_string($child->nodeValue); else $article[$child->nodeName] = $child->nodeValue; } @@ -247,16 +245,16 @@ class Import_Export extends Plugin implements IHandler { ++$num_processed; - //db_query($link, "BEGIN"); + //db_query("BEGIN"); //print 'GUID:' . $article['guid'] . "\n"; - $result = db_query($link, "SELECT id FROM ttrss_entries + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '".$article['guid']."'"); if (db_num_rows($result) == 0) { - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_entries (title, guid, @@ -284,7 +282,7 @@ class Import_Export extends Plugin implements IHandler { '0', '')"); - $result = db_query($link, "SELECT id FROM ttrss_entries + $result = db_query("SELECT id FROM ttrss_entries WHERE guid = '".$article['guid']."'"); if (db_num_rows($result) != 0) { @@ -305,7 +303,7 @@ class Import_Export extends Plugin implements IHandler { $feed = 'NULL'; if ($feed_url && $feed_title) { - $result = db_query($link, "SELECT id FROM ttrss_feeds + $result = db_query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); if (db_num_rows($result) != 0) { @@ -313,10 +311,10 @@ class Import_Export extends Plugin implements IHandler { } else { // try autocreating feed in Uncategorized... - $result = db_query($link, "INSERT INTO ttrss_feeds (owner_uid, + $result = db_query("INSERT INTO ttrss_feeds (owner_uid, feed_url, title) VALUES ($owner_uid, '$feed_url', '$feed_title')"); - $result = db_query($link, "SELECT id FROM ttrss_feeds + $result = db_query("SELECT id FROM ttrss_feeds WHERE feed_url = '$feed_url' AND owner_uid = '$owner_uid'"); if (db_num_rows($result) != 0) { @@ -334,7 +332,7 @@ class Import_Export extends Plugin implements IHandler { //print "$ref_id / $feed / " . $article['title'] . "\n"; - $result = db_query($link, "SELECT int_id FROM ttrss_user_entries + $result = db_query("SELECT int_id FROM ttrss_user_entries WHERE ref_id = '$ref_id' AND owner_uid = '$owner_uid' AND $feed_qpart"); if (db_num_rows($result) == 0) { @@ -344,14 +342,14 @@ class Import_Export extends Plugin implements IHandler { $score = (int) $article['score']; $tag_cache = $article['tag_cache']; - $label_cache = db_escape_string($this->link, $article['label_cache']); + $label_cache = db_escape_string($article['label_cache']); $note = $article['note']; //print "Importing " . $article['title'] . "<br/>"; ++$num_imported; - $result = db_query($link, + $result = db_query( "INSERT INTO ttrss_user_entries (ref_id, owner_uid, feed_id, unread, last_read, marked, published, score, tag_cache, label_cache, uuid, note) @@ -364,15 +362,15 @@ class Import_Export extends Plugin implements IHandler { if (is_array($label_cache) && $label_cache["no-labels"] != 1) { foreach ($label_cache as $label) { - label_create($link, $label[1], + label_create($label[1], $label[2], $label[3], $owner_uid); - label_add_article($link, $ref_id, $label[1], $owner_uid); + label_add_article($ref_id, $label[1], $owner_uid); } } - //db_query($link, "COMMIT"); + //db_query("COMMIT"); } } } @@ -416,13 +414,35 @@ class Import_Export extends Plugin implements IHandler { print "<div style='text-align : center'>"; - if (is_file($_FILES['export_file']['tmp_name'])) { + if ($_FILES['export_file']['error'] != 0) { + print_error(T_sprintf("Upload failed with error code %d", + $_FILES['export_file']['error'])); + return; + } + + $tmp_file = false; + + if (is_uploaded_file($_FILES['export_file']['tmp_name'])) { + $tmp_file = tempnam(CACHE_DIR . '/upload', 'export'); - $this->perform_data_import($this->link, $_FILES['export_file']['tmp_name'], $_SESSION['uid']); + $result = move_uploaded_file($_FILES['export_file']['tmp_name'], + $tmp_file); + if (!$result) { + print_error(__("Unable to move uploaded file.")); + return; + } } else { - print "<p>" . T_sprintf("Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)", ini_get("upload_max_filesize")) . " or use CLI import tool.</p>"; + print_error(__('Error: please upload OPML file.')); + return; + } + if (is_file($tmp_file)) { + $this->perform_data_import($tmp_file, $_SESSION['uid']); + unlink($tmp_file); + } else { + print_error(__('No file uploaded.')); + return; } print "<button dojoType=\"dijit.form.Button\" @@ -433,6 +453,9 @@ class Import_Export extends Plugin implements IHandler { } + function api_version() { + return 2; + } } ?> diff --git a/plugins/example_article/init.js b/plugins/index.html index e69de29bb..e69de29bb 100644 --- a/plugins/example_article/init.js +++ b/plugins/index.html diff --git a/plugins/instances/init.php b/plugins/instances/init.php index 7f822c7bf..aac28196f 100644 --- a/plugins/instances/init.php +++ b/plugins/instances/init.php @@ -1,7 +1,5 @@ <?php class Instances extends Plugin implements IHandler { - - private $link; private $host; private $status_codes = array( @@ -18,7 +16,6 @@ class Instances extends Plugin implements IHandler { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TABS, $this); @@ -30,7 +27,7 @@ class Instances extends Plugin implements IHandler { function hook_update_task($args) { _debug("Get linked feeds..."); - $this->get_linked_feeds($this->link); + $this->get_linked_feeds(); } // Status codes: @@ -40,7 +37,7 @@ class Instances extends Plugin implements IHandler { // 2 - did not receive valid data // >10 - server error, code + 10 (e.g. 16 means server error 6) - function get_linked_feeds($link, $instance_id = false) { + function get_linked_feeds($instance_id = false) { if ($instance_id) $instance_qpart = "id = '$instance_id' AND "; else @@ -52,7 +49,7 @@ class Instances extends Plugin implements IHandler { $date_qpart = "last_connected < DATE_SUB(NOW(), INTERVAL 6 HOUR)"; } - $result = db_query($link, "SELECT id, access_key, access_url FROM ttrss_linked_instances + $result = db_query("SELECT id, access_key, access_url FROM ttrss_linked_instances WHERE $instance_qpart $date_qpart ORDER BY last_connected"); while ($line = db_fetch_assoc($result)) { @@ -80,7 +77,7 @@ class Instances extends Plugin implements IHandler { // access denied if ($status == 16) { - db_query($link, "DELETE FROM ttrss_linked_feeds + db_query("DELETE FROM ttrss_linked_feeds WHERE instance_id = '$id'"); } } else { @@ -88,16 +85,16 @@ class Instances extends Plugin implements IHandler { if (count($feeds['feeds']) > 0) { - db_query($link, "DELETE FROM ttrss_linked_feeds + db_query("DELETE FROM ttrss_linked_feeds WHERE instance_id = '$id'"); foreach ($feeds['feeds'] as $feed) { - $feed_url = db_escape_string($this->link, $feed['feed_url']); - $title = db_escape_string($this->link, $feed['title']); - $subscribers = db_escape_string($this->link, $feed['subscribers']); - $site_url = db_escape_string($this->link, $feed['site_url']); + $feed_url = db_escape_string($feed['feed_url']); + $title = db_escape_string($feed['title']); + $subscribers = db_escape_string($feed['subscribers']); + $site_url = db_escape_string($feed['site_url']); - db_query($link, "INSERT INTO ttrss_linked_feeds + db_query("INSERT INTO ttrss_linked_feeds (feed_url, site_url, title, subscribers, instance_id, created, updated) VALUES ('$feed_url', '$site_url', '$title', '$subscribers', '$id', NOW(), NOW())"); @@ -122,7 +119,7 @@ class Instances extends Plugin implements IHandler { _debug("Status: $status"); - db_query($link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET last_status_out = '$status', last_connected = NOW() WHERE id = '$id'"); } @@ -130,7 +127,7 @@ class Instances extends Plugin implements IHandler { function get_feeds() { - $this->get_linked_feeds($this->link, false); + $this->get_linked_feeds(false); } function get_prefs_js() { @@ -167,37 +164,37 @@ class Instances extends Plugin implements IHandler { } function remove() { - $ids = db_escape_string($this->link, $_REQUEST['ids']); + $ids = db_escape_string($_REQUEST['ids']); - db_query($this->link, "DELETE FROM ttrss_linked_instances WHERE + db_query("DELETE FROM ttrss_linked_instances WHERE id IN ($ids)"); } function add() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $access_url = db_escape_string($this->link, $_REQUEST["access_url"]); - $access_key = db_escape_string($this->link, $_REQUEST["access_key"]); + $id = db_escape_string($_REQUEST["id"]); + $access_url = db_escape_string($_REQUEST["access_url"]); + $access_key = db_escape_string($_REQUEST["access_key"]); - db_query($this->link, "BEGIN"); + db_query("BEGIN"); - $result = db_query($this->link, "SELECT id FROM ttrss_linked_instances + $result = db_query("SELECT id FROM ttrss_linked_instances WHERE access_url = '$access_url'"); if (db_num_rows($result) == 0) { - db_query($this->link, "INSERT INTO ttrss_linked_instances + db_query("INSERT INTO ttrss_linked_instances (access_url, access_key, last_connected, last_status_in, last_status_out) VALUES ('$access_url', '$access_key', '1970-01-01', -1, -1)"); } - db_query($this->link, "COMMIT"); + db_query("COMMIT"); } function edit() { - $id = db_escape_string($this->link, $_REQUEST["id"]); + $id = db_escape_string($_REQUEST["id"]); - $result = db_query($this->link, "SELECT * FROM ttrss_linked_instances WHERE + $result = db_query("SELECT * FROM ttrss_linked_instances WHERE id = '$id'"); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$id\">"; @@ -253,11 +250,11 @@ class Instances extends Plugin implements IHandler { } function editSave() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $access_url = db_escape_string($this->link, $_REQUEST["access_url"]); - $access_key = db_escape_string($this->link, $_REQUEST["access_key"]); + $id = db_escape_string($_REQUEST["id"]); + $access_url = db_escape_string($_REQUEST["access_url"]); + $access_key = db_escape_string($_REQUEST["access_key"]); - db_query($this->link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET access_key = '$access_key', access_url = '$access_url', last_connected = '1970-01-01' WHERE id = '$id'"); @@ -277,7 +274,7 @@ class Instances extends Plugin implements IHandler { print "<div id=\"pref-instance-toolbar\" dojoType=\"dijit.Toolbar\">"; - $sort = db_escape_string($this->link, $_REQUEST["sort"]); + $sort = db_escape_string($_REQUEST["sort"]); if (!$sort || $sort == "undefined") { $sort = "access_url"; @@ -298,7 +295,7 @@ class Instances extends Plugin implements IHandler { print "</div>"; #toolbar - $result = db_query($this->link, "SELECT *, + $result = db_query("SELECT *, (SELECT COUNT(*) FROM ttrss_linked_feeds WHERE instance_id = ttrss_linked_instances.id) AS num_feeds FROM ttrss_linked_instances @@ -327,7 +324,7 @@ class Instances extends Plugin implements IHandler { $id = $line['id']; $this_row_id = "id=\"LIRR-$id\""; - $line["last_connected"] = make_local_datetime($this->link, $line["last_connected"], false); + $line["last_connected"] = make_local_datetime($line["last_connected"], false); print "<tr class=\"$class\" $this_row_id>"; @@ -354,8 +351,7 @@ class Instances extends Plugin implements IHandler { print "</div>"; #pane - global $pluginhost; - $pluginhost->run_hooks($pluginhost::HOOK_PREFS_TAB, + PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB, "hook_prefs_tab", "prefInstances"); print "</div>"; #container @@ -364,17 +360,17 @@ class Instances extends Plugin implements IHandler { function fbexport() { - $access_key = db_escape_string($this->link, $_POST["key"]); + $access_key = db_escape_string($_POST["key"]); // TODO: rate limit checking using last_connected - $result = db_query($this->link, "SELECT id FROM ttrss_linked_instances + $result = db_query("SELECT id FROM ttrss_linked_instances WHERE access_key = '$access_key'"); if (db_num_rows($result) == 1) { $instance_id = db_fetch_result($result, 0, "id"); - $result = db_query($this->link, "SELECT feed_url, site_url, title, subscribers + $result = db_query("SELECT feed_url, site_url, title, subscribers FROM ttrss_feedbrowser_cache ORDER BY subscribers DESC LIMIT 100"); $feeds = array(); @@ -383,7 +379,7 @@ class Instances extends Plugin implements IHandler { array_push($feeds, $line); } - db_query($this->link, "UPDATE ttrss_linked_instances SET + db_query("UPDATE ttrss_linked_instances SET last_status_in = 1 WHERE id = '$instance_id'"); print json_encode(array("feeds" => $feeds)); @@ -448,6 +444,9 @@ class Instances extends Plugin implements IHandler { print json_encode(array("hash" => $hash)); } + function api_version() { + return 2; + } } ?> diff --git a/plugins/mail/init.php b/plugins/mail/init.php index 40da8720c..80bc7d417 100644 --- a/plugins/mail/init.php +++ b/plugins/mail/init.php @@ -1,7 +1,6 @@ <?php class Mail extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Mail extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -30,13 +28,13 @@ class Mail extends Plugin { function emailArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pluginhandler\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"mail\">"; print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"sendEmail\">"; - $result = db_query($this->link, "SELECT email, full_name FROM ttrss_users WHERE + $result = db_query("SELECT email, full_name FROM ttrss_users WHERE id = " . $_SESSION["uid"]); $user_email = htmlspecialchars(db_fetch_result($result, 0, "email")); @@ -44,8 +42,8 @@ class Mail extends Plugin { if (!$user_name) $user_name = $_SESSION['name']; - $_SESSION['email_replyto'] = $user_email; - $_SESSION['email_fromname'] = $user_name; + print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"from_email\" value=\"$user_email\">"; + print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"from_name\" value=\"$user_name\">"; require_once "lib/MiniTemplator.class.php"; @@ -58,7 +56,7 @@ class Mail extends Plugin { $tpl->setVariable('USER_EMAIL', $user_email, true); $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"], true); - $result = db_query($this->link, "SELECT link, content, title + $result = db_query("SELECT link, content, title FROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND id IN ($param) AND owner_uid = " . $_SESSION["uid"]); @@ -134,15 +132,10 @@ class Mail extends Plugin { $reply = array(); - $_SESSION['email_secretkey'] = ''; - - $replyto = strip_tags($_SESSION['email_replyto']); - $fromname = strip_tags($_SESSION['email_fromname']); - $mail = new ttrssMailer(); - $mail->From = $replyto; - $mail->FromName = $fromname; + $mail->From = strip_tags($_REQUEST['from_email']); + $mail->FromName = strip_tags($_REQUEST['from_name']); $mail->AddAddress($_REQUEST['destination']); $mail->IsHTML(false); @@ -154,7 +147,7 @@ class Mail extends Plugin { if (!$rc) { $reply['error'] = $mail->ErrorInfo; } else { - save_email_address($this->link, db_escape_string($this->link, $destination)); + save_email_address(db_escape_string($destination)); $reply['message'] = "UPDATE_COUNTERS"; } @@ -162,7 +155,7 @@ class Mail extends Plugin { } function completeEmails() { - $search = db_escape_string($this->link, $_REQUEST["search"]); + $search = db_escape_string($_REQUEST["search"]); print "<ul>"; @@ -175,6 +168,9 @@ class Mail extends Plugin { print "</ul>"; } + function api_version() { + return 2; + } } ?> diff --git a/plugins/mail/mail.js b/plugins/mail/mail.js index 39f753cc0..6166f01c1 100644 --- a/plugins/mail/mail.js +++ b/plugins/mail/mail.js @@ -26,6 +26,7 @@ function emailArticle(id) { new Ajax.Request("backend.php", { parameters: dojo.objectToQuery(this.attr('value')), onComplete: function(transport) { + console.log(transport.responseText); var reply = JSON.parse(transport.responseText); diff --git a/plugins/mailto/init.php b/plugins/mailto/init.php index e140bbea7..aa6d173f8 100644 --- a/plugins/mailto/init.php +++ b/plugins/mailto/init.php @@ -1,7 +1,5 @@ <?php class MailTo extends Plugin { - - private $link; private $host; function about() { @@ -11,7 +9,6 @@ class MailTo extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -30,7 +27,7 @@ class MailTo extends Plugin { function emailArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); require_once "lib/MiniTemplator.class.php"; @@ -44,7 +41,7 @@ class MailTo extends Plugin { $tpl->setVariable('TTRSS_HOST', $_SERVER["HTTP_HOST"], true); - $result = db_query($this->link, "SELECT link, content, title + $result = db_query("SELECT link, content, title FROM ttrss_user_entries, ttrss_entries WHERE id = ref_id AND id IN ($param) AND owner_uid = " . $_SESSION["uid"]); @@ -68,8 +65,8 @@ class MailTo extends Plugin { $content = ""; $tpl->generateOutputToString($content); - $mailto_link = htmlspecialchars("mailto: ?subject=".urlencode($subject). - "&body=".urlencode($content)); + $mailto_link = htmlspecialchars("mailto: ?subject=".rawurlencode($subject). + "&body=".rawurlencode($content)); print __("Clicking the following link to invoke your mail client:"); @@ -89,5 +86,9 @@ class MailTo extends Plugin { //return; } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/mark_button/init.php b/plugins/mark_button/init.php index 4cf1c5949..971b12932 100644 --- a/plugins/mark_button/init.php +++ b/plugins/mark_button/init.php @@ -1,10 +1,8 @@ <?php class Mark_Button extends Plugin { - private $link; private $host; function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -20,7 +18,7 @@ class Mark_Button extends Plugin { $marked_pic = ""; $id = $line["id"]; - if (get_pref($this->link, "COMBINED_DISPLAY_MODE")) { + if (get_pref("COMBINED_DISPLAY_MODE")) { if (sql_bool_to_bool($line["marked"])) { $marked_pic = "<img src=\"images/mark_set.svg\" @@ -36,5 +34,10 @@ class Mark_Button extends Plugin { return $marked_pic; } + + function api_version() { + return 2; + } + } ?> diff --git a/plugins/mobile/article.php b/plugins/mobile/article.php deleted file mode 100644 index f6aed994f..000000000 --- a/plugins/mobile/article.php +++ /dev/null @@ -1,32 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $id = db_escape_string($link, $_REQUEST["id"]); - $feed_id = db_escape_string($link, $_REQUEST["feed"]); - $cat_id = db_escape_string($link, $_REQUEST["cat"]); - $is_cat = db_escape_string($link, $_REQUEST["is_cat"]); - - render_article($link, $id, $feed_id, $cat_id, $is_cat); -?> - diff --git a/plugins/mobile/backend.php b/plugins/mobile/backend.php deleted file mode 100644 index a88e02a92..000000000 --- a/plugins/mobile/backend.php +++ /dev/null @@ -1,63 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - define('MOBILE_VERSION', true); - - require_once "config.php"; - require_once "mobile-functions.php"; - - require_once "functions.php"; - require_once "sessions.php"; - require_once "version.php"; - require_once "db-prefs.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - if (!$_SESSION["uid"]) return; - - $op = $_REQUEST["op"]; - - switch ($op) { - case "toggleMarked": - $cmode = db_escape_string($link, $_REQUEST["mark"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - markArticlesById($link, array($id), $cmode); - break; - case "togglePublished": - $cmode = db_escape_string($link, $_REQUEST["pub"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - publishArticlesById($link, array($id), $cmode); - break; - case "toggleUnread": - $cmode = db_escape_string($link, $_REQUEST["unread"]); - $id = db_escape_string($link, $_REQUEST["id"]); - - catchupArticlesById($link, array($id), $cmode); - break; - - case "setPref": - $id = db_escape_string($link, $_REQUEST["id"]); - $value = db_escape_string($link, $_REQUEST["to"]); - mobile_set_pref($link, $id, $value); - print_r($_SESSION); - break; - default: - print json_encode(array("error", "UNKNOWN_METHOD")); - break; - } -?> - diff --git a/plugins/mobile/cat.php b/plugins/mobile/cat.php deleted file mode 100644 index 7b5cf43f9..000000000 --- a/plugins/mobile/cat.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $cat_id = db_escape_string($link, $_REQUEST["id"]); - - render_category($link, $cat_id); -?> - diff --git a/plugins/mobile/feed.php b/plugins/mobile/feed.php deleted file mode 100644 index 6eae741ac..000000000 --- a/plugins/mobile/feed.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $feed_id = db_escape_string($link, $_REQUEST["id"]); - $cat_id = db_escape_string($link, $_REQUEST["cat"]); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - $search = db_escape_string($link, $_REQUEST["search"]); - $is_cat = (bool) db_escape_string($link, $_REQUEST["is_cat"]); - - render_headlines_list($link, $feed_id, $cat_id, $offset, $search, $is_cat); -?> - diff --git a/plugins/mobile/home.php b/plugins/mobile/home.php deleted file mode 100644 index 03fccb3e2..000000000 --- a/plugins/mobile/home.php +++ /dev/null @@ -1,33 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); - - $use_cats = mobile_get_pref($link, 'ENABLE_CATS'); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - - if ($use_cats) { - render_categories_list($link); - } else { - render_flat_feed_list($link, $offset); - } -?> diff --git a/plugins/mobile/index.php b/plugins/mobile/index.php deleted file mode 100644 index 3feec7531..000000000 --- a/plugins/mobile/index.php +++ /dev/null @@ -1,90 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); -?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Tiny Tiny RSS</title> -<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> -<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" /> -<meta name="apple-touch-fullscreen" content="YES" /> -<style type="text/css" media="screen">@import "iui/iui.css";</style> -<script type="application/x-javascript" src="iui/iui.js"></script> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -<script type="text/javascript" src="../../lib/prototype.js"></script> -<script type="text/javascript" src="mobile.js"></script> -<style type="text/css" media="screen">@import "mobile.css";</style> -</head> - -<style type="text/css"> - img { max-width : 75%; } - - li.oldItem { - color : gray; - } - - #myBackButton { - display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; - border-width: 0 8px 0 14px; - -webkit-border-image: url(iui/backButton.png) 0 8 0 14; - } - - img.tinyIcon { - max-width : 16px; - max-height : 16px; - margin-right : 10px; - vertical-align : middle; - } - - a img { - border-width : 0px; - } -</style> - -<body> - <div class="toolbar"> - <h1 id="pageTitle"></h1> - <a id="myBackButton" class="button" href="#"></a> - <a class="button" href="prefs.php">Preferences</a> - </div> - - <?php - $use_cats = mobile_get_pref($link, 'ENABLE_CATS'); - $offset = (int) db_escape_string($link, $_REQUEST["skip"]); - - if ($use_cats) { - render_categories_list($link); - } else { - render_flat_feed_list($link, $offset); - } - ?> - -</body> -</html> diff --git a/plugins/mobile/init.php b/plugins/mobile/init.php deleted file mode 100644 index 0ebbcced1..000000000 --- a/plugins/mobile/init.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php -class Mobile extends Plugin implements IHandler { - - private $link; - private $host; - - function about() { - return array(1.0, - "Classic mobile version for tt-rss (unsupported)", - "fox", - true); - } - - function init($host) { - $this->link = $host->get_link(); - $this->host = $host; - - $host->add_handler("mobile", "index", $this); - } - - function index() { - header("Content-type: text/html; charset=utf-8"); - - header("Location: plugins/mobile/index.php"); - } - - /* function get_js() { - return file_get_contents(dirname(__FILE__) . "/digest.js"); - } */ - - function csrf_ignore($method) { - return true; //in_array($method, array("index")); - } - - function before($method) { - return true; - } - - function after() { - - } - - -} -?> diff --git a/plugins/mobile/iui/LICENSE.txt b/plugins/mobile/iui/LICENSE.txt deleted file mode 100644 index c9d2a0d65..000000000 --- a/plugins/mobile/iui/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2007-2009, iUI Project Members - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of the iUI Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plugins/mobile/iui/NOTICE.txt b/plugins/mobile/iui/NOTICE.txt deleted file mode 100644 index 3a23f563b..000000000 --- a/plugins/mobile/iui/NOTICE.txt +++ /dev/null @@ -1,33 +0,0 @@ -NOTICE.txt - iUI credits and copyright notices - - iUI is Copyright (c) 2007-2009 by the iUI project members: - M. Sean Gilligan (msgilligan) - Past members: - Joe Hewitt (joehewitt) - Christopher Allen (ChristopherA) - -CREDITS - schlueter - committed fixes for issues #9, #11, #63 -- added samples - ??? - created iUI icon - kris.tate - named it "iUI", created Google Code project, initial checkin - others - let us know if we missed you - iUI users - thanks for your patience, feedback, and bug reports - -THIRD PARTY COMPONENTS - - * iUI includes software developed by the Mozilla Project - Copyright (c) 1997-2007, Netscape Communications Corporation and others. - All rights reserved. - http://www.mozilla.org/rhino/ - - * iUI includes software developed by the Dojo Foundation - http://dojotoolkit.org/docs/shrinksafe - - * iUI includes software developed by LCA Soft Ltd. - http://www.lcasoft.com/compress-js.html - - * iUI includes software developed by the ant-googlcode Project - http://code.google.com/p/ant-googlecode/ - - - diff --git a/plugins/mobile/iui/backButton.png b/plugins/mobile/iui/backButton.png Binary files differdeleted file mode 100644 index e27ea8cdf..000000000 --- a/plugins/mobile/iui/backButton.png +++ /dev/null diff --git a/plugins/mobile/iui/blueButton.png b/plugins/mobile/iui/blueButton.png Binary files differdeleted file mode 100644 index 0f92dfd94..000000000 --- a/plugins/mobile/iui/blueButton.png +++ /dev/null diff --git a/plugins/mobile/iui/cancel.png b/plugins/mobile/iui/cancel.png Binary files differdeleted file mode 100644 index 5f6dcc87d..000000000 --- a/plugins/mobile/iui/cancel.png +++ /dev/null diff --git a/plugins/mobile/iui/grayButton.png b/plugins/mobile/iui/grayButton.png Binary files differdeleted file mode 100644 index 0ce6a30d4..000000000 --- a/plugins/mobile/iui/grayButton.png +++ /dev/null diff --git a/plugins/mobile/iui/iui-logo-touch-icon.png b/plugins/mobile/iui/iui-logo-touch-icon.png Binary files differdeleted file mode 100644 index 8817b3022..000000000 --- a/plugins/mobile/iui/iui-logo-touch-icon.png +++ /dev/null diff --git a/plugins/mobile/iui/iui.css b/plugins/mobile/iui/iui.css deleted file mode 100644 index 3933dbad9..000000000 --- a/plugins/mobile/iui/iui.css +++ /dev/null @@ -1,398 +0,0 @@ -/* iui.css (c) 2007-9 by iUI Project Members, see LICENSE.txt for license */ -body { - margin: 0; - font-family: Helvetica; - background: #FFFFFF; - color: #000000; - overflow-x: hidden; - -webkit-user-select: none; - -webkit-text-size-adjust: none; -} - -body > *:not(.toolbar) { - display: none; - position: absolute; - margin: 0; - padding: 0; - left: 0; - top: 45px; - width: 100%; - min-height: 372px; - -webkit-transition-duration: 300ms; - -webkit-transition-property: -webkit-transform; - -webkit-transform: translateX(0%); -} - -body[orient="landscape"] > *:not(.toolbar) { - min-height: 268px; -} - -body > *[selected="true"] { - display: block; -} - -a[selected], a:active { - background-color: #194fdb !important; - background-image: url(listArrowSel.png), url(selection.png) !important; - background-repeat: no-repeat, repeat-x; - background-position: right center, left top; - color: #FFFFFF !important; -} - -a[selected="progress"] { - background-image: url(loading.gif), url(selection.png) !important; -} - -/************************************************************************************************/ - -body > .toolbar { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - border-bottom: 1px solid #2d3642; - border-top: 1px solid #6d84a2; - padding: 10px; - height: 45px; - background: url(toolbar.png) #6d84a2 repeat-x; -} - -.toolbar > h1 { - position: absolute; - overflow: hidden; - left: 50%; - margin: 1px 0 0 -75px; - height: 45px; - font-size: 20px; - width: 150px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - color: #FFFFFF; -} - -body[orient="landscape"] > .toolbar > h1 { - margin-left: -125px; - width: 250px; -} - -.button { - position: absolute; - overflow: hidden; - top: 8px; - right: 6px; - margin: 0; - border-width: 0 5px; - padding: 0 3px; - width: auto; - height: 30px; - line-height: 30px; - font-family: inherit; - font-size: 12px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0; - text-overflow: ellipsis; - text-decoration: none; - white-space: nowrap; - background: none; - -webkit-border-image: url(toolButton.png) 0 5 0 5; -} - -.blueButton { - -webkit-border-image: url(blueButton.png) 0 5 0 5; - border-width: 0 5px; -} - -.leftButton { - left: 6px; - right: auto; -} - -#backButton { - display: none; - left: 6px; - right: auto; - padding: 0; - max-width: 55px; - border-width: 0 8px 0 14px; - -webkit-border-image: url(backButton.png) 0 8 0 14; -} - -.whiteButton, -.redButton, -.grayButton { - display: block; - border-width: 0 12px; - padding: 10px; - text-align: center; - font-size: 20px; - font-weight: bold; - text-decoration: inherit; - color: inherit; -} - -.whiteButton { - -webkit-border-image: url(whiteButton.png) 0 12 0 12; - text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; -} - -.redButton { - -webkit-border-image: url(redButton.png) 0 12 0 12; - color:#fff; - text-shadow: #7a0001 0 -1px 0; -} - -.grayButton { - -webkit-border-image: url(grayButton.png) 0 12 0 12; - color: #FFFFFF; -} - -/************************************************************************************************/ - -body > ul > li { - position: relative; - margin: 0; - border-bottom: 1px solid #E0E0E0; - padding: 8px 0 8px 10px; - font-size: 20px; - font-weight: bold; - list-style: none; -} - -body > ul > li.group { - position: relative; - top: -1px; - margin-bottom: -2px; - border-top: 1px solid #7d7d7d; - border-bottom: 1px solid #999999; - padding: 1px 10px; - background: url(listGroup.png) repeat-x; - font-size: 17px; - font-weight: bold; - text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0; - color: #FFFFFF; -} - -body > ul > li.group:first-child { - top: 0; - border-top: none; -} - -body > ul > li > a { - display: block; - margin: -8px 0 -8px -10px; - padding: 8px 32px 8px 10px; - text-decoration: none; - color: inherit; - background: url(listArrow.png) no-repeat right center; -} - -a[target="_replace"] { - box-sizing: border-box; - -webkit-box-sizing: border-box; - padding-top: 25px; - padding-bottom: 25px; - font-size: 18px; - color: cornflowerblue; - background-color: #FFFFFF; - background-image: none; -} - -/************************************************************************************************/ - -body > .dialog { - top: 0; - width: 100%; - min-height: 417px; - z-index: 2; - background: rgba(0, 0, 0, 0.8); - padding: 0; - text-align: right; -} - -.dialog > fieldset { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 0; - border: none; - border-top: 1px solid #6d84a2; - padding: 10px 6px; - background: url(toolbar.png) #7388a5 repeat-x; -} - -.dialog > fieldset > h1 { - margin: 0 10px 0 10px; - padding: 0; - font-size: 20px; - font-weight: bold; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; - text-align: center; -} - -.dialog > fieldset > label { - position: absolute; - margin: 16px 0 0 6px; - font-size: 14px; - color: #999999; -} - -/*input:not(input[type|=radio]):not(input[type|=checkbox]) {*/ -input[type|=text], input[type|=password] { - box-sizing: border-box; - -webkit-box-sizing: border-box; - width: 100%; - margin: 8px 0 0 0; - padding: 6px 6px 6px 44px; - font-size: 16px; - font-weight: normal; -} - -/************************************************************************************************/ - -body > .panel { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - padding: 10px; - background: #c8c8c8 url(pinstripes.png); -} - -.panel > fieldset { - position: relative; - margin: 0 0 20px 0; - padding: 0; - background: #FFFFFF; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border: 1px solid #999999; - text-align: right; - font-size: 16px; -} - -.row { - position: relative; - min-height: 42px; - border-bottom: 1px solid #999999; - -webkit-border-radius: 0; - text-align: left; -} - -fieldset > .row:last-child { - border-bottom: none !important; -} - -/*.row > input:not(input[type|=radio]):not(input[type|=checkbox]) {*/ -.row > input[type|=text], .row > input[type|=password] { - box-sizing: border-box; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - margin: 0; - border: none; - padding: 12px 10px 0 110px; -/* height: 42px;*/ - background: none; -} -.row > input[type|=radio], .row > input[type|=checkbox] { - margin: 7px 7px 0 0; - height: 25px; - width: 25px; -} - -.row > label { - position: absolute; - margin: 0 0 0 14px; - line-height: 42px; - font-weight: bold; -} - -.row > span { - position: absolute; - padding: 12px 10px 0 110px; - margin: 0; -} - -.row > .toggle { - position: absolute; - top: 6px; - right: 6px; - width: 100px; - height: 28px; -} - -.toggle { - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #FFFFFF url(toggle.png) repeat-x; - font-size: 19px; - font-weight: bold; - line-height: 30px; -} - -.toggle[toggled="true"] { - border: 1px solid #143fae; - background: #194fdb url(toggleOn.png) repeat-x; -} - -.toggleOn { - display: none; - position: absolute; - width: 60px; - text-align: center; - left: 0; - top: 0; - color: #FFFFFF; - text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0; -} - -.toggleOff { - position: absolute; - width: 60px; - text-align: center; - right: 0; - top: 0; - color: #666666; -} - -.toggle[toggled="true"] > .toggleOn { - display: block; -} - -.toggle[toggled="true"] > .toggleOff { - display: none; -} - -.thumb { - position: absolute; - top: -1px; - left: -1px; - width: 40px; - height: 28px; - border: 1px solid #888888; - -webkit-border-radius: 6px; - background: #ffffff url(thumb.png) repeat-x; -} - -.toggle[toggled="true"] > .thumb { - left: auto; - right: -1px; -} - -.panel > h2 { - margin: 0 0 8px 14px; - font-size: inherit; - font-weight: bold; - color: #4d4d70; - text-shadow: rgba(255, 255, 255, 0.75) 2px 2px 0; -} - -/************************************************************************************************/ - -#preloader { - display: none; - background-image: url(loading.gif), url(selection.png), - url(blueButton.png), url(listArrowSel.png), url(listGroup.png); -} diff --git a/plugins/mobile/iui/iui.js b/plugins/mobile/iui/iui.js deleted file mode 100644 index 0937afe05..000000000 --- a/plugins/mobile/iui/iui.js +++ /dev/null @@ -1,542 +0,0 @@ -/* - Copyright (c) 2007-9, iUI Project Members - See LICENSE.txt for licensing terms - */ - - -(function() { - -var slideSpeed = 20; -var slideInterval = 0; - -var currentPage = null; -var currentDialog = null; -var currentWidth = 0; -var currentHash = location.hash; -var hashPrefix = "#_"; -var pageHistory = []; -var newPageCount = 0; -var checkTimer; -var hasOrientationEvent = false; -var portraitVal = "portrait"; -var landscapeVal = "landscape"; - -// ************************************************************************************************* - -window.iui = -{ - animOn: true, // Slide animation with CSS transition is now enabled by default where supported - - showPage: function(page, backwards) - { - if (page) - { - if (currentDialog) - { - currentDialog.removeAttribute("selected"); - currentDialog = null; - } - - if (hasClass(page, "dialog")) - showDialog(page); - else - { - var fromPage = currentPage; - currentPage = page; - - if (fromPage) - setTimeout(slidePages, 0, fromPage, page, backwards); - else - updatePage(page, fromPage); - } - } - }, - - showPageById: function(pageId) - { - var page = $(pageId); - if (page) - { - var index = pageHistory.indexOf(pageId); - var backwards = index != -1; - if (backwards) - pageHistory.splice(index, pageHistory.length); - - iui.showPage(page, backwards); - } - }, - - showPageByHref: function(href, args, method, replace, cb, bw) - { - var req = new XMLHttpRequest(); - req.onerror = function() - { - if (cb) - cb(false); - }; - - req.onreadystatechange = function() - { - if (req.readyState == 4) - { - if (replace) - replaceElementWithSource(replace, req.responseText); - else - { - var frag = document.createElement("div"); - frag.innerHTML = req.responseText; - iui.insertPages(frag.childNodes, bw); - } - if (cb) - setTimeout(cb, 1000, true); - } - }; - - if (args) - { - req.open(method || "GET", href, true); - req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - req.setRequestHeader("Content-Length", args.length); - req.send(args.join("&")); - } - else - { - req.open(method || "GET", href, true); - req.send(null); - } - }, - - insertPages: function(nodes, bw) - { - var targetPage; - for (var i = 0; i < nodes.length; ++i) - { - var child = nodes[i]; - if (child.nodeType == 1) - { - if (!child.id) - child.id = "__" + (++newPageCount) + "__"; - - var clone = $(child.id); - if (clone) - clone.parentNode.replaceChild(child, clone); - else - document.body.appendChild(child); - - if (child.getAttribute("selected") == "true" || !targetPage) - targetPage = child; - - --i; - } - } - - if (targetPage) - iui.showPage(targetPage, bw); - }, - - getSelectedPage: function() - { - for (var child = document.body.firstChild; child; child = child.nextSibling) - { - if (child.nodeType == 1 && child.getAttribute("selected") == "true") - return child; - } - }, - isNativeUrl: function(href) - { - for(var i = 0; i < iui.nativeUrlPatterns.length; i++) - { - if(href.match(iui.nativeUrlPatterns[i])) return true; - } - return false; - }, - nativeUrlPatterns: [ - new RegExp("^http:\/\/maps.google.com\/maps\?"), - new RegExp("^mailto:"), - new RegExp("^tel:"), - new RegExp("^http:\/\/www.youtube.com\/watch\\?v="), - new RegExp("^http:\/\/www.youtube.com\/v\/"), - new RegExp("^javascript:"), - - ] -}; - -// ************************************************************************************************* - -addEventListener("load", function(event) -{ - var page = iui.getSelectedPage(); - var locPage = getPageFromLoc(); - - if (page) - iui.showPage(page); - - if (locPage && (locPage != page)) - iui.showPage(locPage); - - setTimeout(preloadImages, 0); - if (typeof window.onorientationchange == "object") - { - window.onorientationchange=orientChangeHandler; - hasOrientationEvent = true; - setTimeout(orientChangeHandler, 0); - } - setTimeout(checkOrientAndLocation, 0); - checkTimer = setInterval(checkOrientAndLocation, 300); -}, false); - -addEventListener("unload", function(event) -{ - return; -}, false); - -addEventListener("click", function(event) -{ - var link = findParent(event.target, "a"); - if (link) - { - function unselect() { link.removeAttribute("selected"); } - - if (link.href && link.hash && link.hash != "#" && !link.target) - { - link.setAttribute("selected", "true"); - iui.showPage($(link.hash.substr(1))); - setTimeout(unselect, 500); - } - else if (link == $("backButton")) - history.back(); - else if (link.getAttribute("type") == "submit") - { - var form = findParent(link, "form"); - if (form.target == "_self") - { - form.submit(); - return; // return so we don't preventDefault - } - submitForm(form); - } - else if (link.getAttribute("type") == "cancel") - cancelDialog(findParent(link, "form")); - else if (link.target == "_replace") - { - link.setAttribute("selected", "progress"); - iui.showPageByHref(link.href, null, null, link, unselect); - } - else if (iui.isNativeUrl(link.href)) - { - return; - } - else if (link.target == "_webapp") - { - location.href = link.href; - } - else if (!link.target) - { - link.setAttribute("selected", "progress"); - var bw = link.getAttribute("backwards"); - iui.showPageByHref(link.href, null, null, null, unselect, bw); - } - else - return; - - event.preventDefault(); - } -}, true); - -addEventListener("click", function(event) -{ - var div = findParent(event.target, "div"); - if (div && hasClass(div, "toggle")) - { - div.setAttribute("toggled", div.getAttribute("toggled") != "true"); - event.preventDefault(); - } -}, true); - -function getPageFromLoc() -{ - var page; - var result = location.hash.match(/#_([^\?_]+)/); - if (result) - page = result[1]; - if (page) - page = $(page); - return page; -} - -function orientChangeHandler() -{ - var orientation=window.orientation; - switch(orientation) - { - case 0: - setOrientation(portraitVal); - break; - - case 90: - case -90: - setOrientation(landscapeVal); - break; - } -} - - -function checkOrientAndLocation() -{ - if (!hasOrientationEvent) - { - if (window.innerWidth != currentWidth) - { - currentWidth = window.innerWidth; - var orient = currentWidth == 320 ? portraitVal : landscapeVal; - setOrientation(orient); - } - } - - if (location.hash != currentHash) - { - var pageId = location.hash.substr(hashPrefix.length); - iui.showPageById(pageId); - } -} - -function setOrientation(orient) -{ - document.body.setAttribute("orient", orient); - setTimeout(scrollTo, 100, 0, 1); -} - -function showDialog(page) -{ - currentDialog = page; - page.setAttribute("selected", "true"); - - if (hasClass(page, "dialog") && !page.target) - showForm(page); -} - -function showForm(form) -{ - form.onsubmit = function(event) - { - event.preventDefault(); - submitForm(form); - }; - - form.onclick = function(event) - { - if (event.target == form && hasClass(form, "dialog")) - cancelDialog(form); - }; -} - -function cancelDialog(form) -{ - form.removeAttribute("selected"); -} - -function updatePage(page, fromPage) -{ - if (!page.id) - page.id = "__" + (++newPageCount) + "__"; - - location.hash = currentHash = hashPrefix + page.id; - pageHistory.push(page.id); - - var pageTitle = $("pageTitle"); - if (page.title) - pageTitle.innerHTML = page.title; - - if (page.localName.toLowerCase() == "form" && !page.target) - showForm(page); - - var backButton = $("backButton"); - if (backButton) - { - var prevPage = $(pageHistory[pageHistory.length-2]); - if (prevPage && !page.getAttribute("hideBackButton")) - { - backButton.style.display = "inline"; - backButton.innerHTML = prevPage.title ? prevPage.title : "Back"; - } - else - backButton.style.display = "none"; - } - - var backButton = $("myBackButton"); - if (backButton) - { - var label = page.getAttribute("myBackLabel"); - - if (label) - { - backButton.style.display = "inline"; - backButton.innerHTML = label; - backButton.href = page.getAttribute("myBackHref"); - //backButton.target = page.getAttribute("myBackTarget"); - target = page.getAttribute("myBackTarget"); - if (target == null) - backButton.target = ''; - else - backButton.target = target; - backButton.setAttribute("backwards", "true"); - } - else - backButton.style.display = "none"; - } - -} - -function slidePages(fromPage, toPage, backwards) -{ - var axis = (backwards ? fromPage : toPage).getAttribute("axis"); - - clearInterval(checkTimer); - - if (canDoSlideAnim() && axis != 'y') - { - slide2(fromPage, toPage, backwards, slideDone); - } - else - { - slide1(fromPage, toPage, backwards, axis, slideDone); - } - - function slideDone() - { - if (!hasClass(toPage, "dialog")) - fromPage.removeAttribute("selected"); - checkTimer = setInterval(checkOrientAndLocation, 300); - setTimeout(updatePage, 0, toPage, fromPage); - fromPage.removeEventListener('webkitTransitionEnd', slideDone, false); - } -} - -function canDoSlideAnim() -{ - return (iui.animOn) && (typeof WebKitCSSMatrix == "object"); -} - -function slide1(fromPage, toPage, backwards, axis, cb) -{ - if (axis == "y") - (backwards ? fromPage : toPage).style.top = "100%"; - else - toPage.style.left = "100%"; - - scrollTo(0, 1); - toPage.setAttribute("selected", "true"); - var percent = 100; - slide(); - var timer = setInterval(slide, slideInterval); - - function slide() - { - percent -= slideSpeed; - if (percent <= 0) - { - percent = 0; - clearInterval(timer); - cb(); - } - - if (axis == "y") - { - backwards - ? fromPage.style.top = (100-percent) + "%" - : toPage.style.top = percent + "%"; - } - else - { - fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; - toPage.style.left = (backwards ? -percent : percent) + "%"; - } - } -} - - -function slide2(fromPage, toPage, backwards, cb) -{ - toPage.style.webkitTransitionDuration = '0ms'; // Turn off transitions to set toPage start offset - // fromStart is always 0% and toEnd is always 0% - // iPhone won't take % width on toPage - var toStart = 'translateX(' + (backwards ? '-' : '') + window.innerWidth + 'px)'; - var fromEnd = 'translateX(' + (backwards ? '100%' : '-100%') + ')'; - toPage.style.webkitTransform = toStart; - toPage.setAttribute("selected", "true"); - toPage.style.webkitTransitionDuration = ''; // Turn transitions back on - function startTrans() - { - fromPage.style.webkitTransform = fromEnd; - toPage.style.webkitTransform = 'translateX(0%)'; //toEnd - } - fromPage.addEventListener('webkitTransitionEnd', cb, false); - setTimeout(startTrans, 0); -} - -function preloadImages() -{ - var preloader = document.createElement("div"); - preloader.id = "preloader"; - document.body.appendChild(preloader); -} - -function submitForm(form) -{ - iui.showPageByHref(form.action || "POST", encodeForm(form), form.method); -} - -function encodeForm(form) -{ - function encode(inputs) - { - for (var i = 0; i < inputs.length; ++i) - { - if (inputs[i].name) - args.push(inputs[i].name + "=" + escape(inputs[i].value)); - } - } - - var args = []; - encode(form.getElementsByTagName("input")); - encode(form.getElementsByTagName("textarea")); - encode(form.getElementsByTagName("select")); - return args; -} - -function findParent(node, localName) -{ - while (node && (node.nodeType != 1 || node.localName.toLowerCase() != localName)) - node = node.parentNode; - return node; -} - -function hasClass(self, name) -{ - var re = new RegExp("(^|\\s)"+name+"($|\\s)"); - return re.exec(self.getAttribute("class")) != null; -} - -function replaceElementWithSource(replace, source) -{ - var page = replace.parentNode; - var parent = replace; - while (page.parentNode != document.body) - { - page = page.parentNode; - parent = parent.parentNode; - } - - var frag = document.createElement(parent.localName); - frag.innerHTML = source; - - page.removeChild(parent); - - while (frag.firstChild) - page.appendChild(frag.firstChild); -} - -function $(id) { return document.getElementById(id); } -function ddd() { console.log.apply(console, arguments); } - -})(); diff --git a/plugins/mobile/iui/iuix.css b/plugins/mobile/iui/iuix.css deleted file mode 100644 index 1df7e8a00..000000000 --- a/plugins/mobile/iui/iuix.css +++ /dev/null @@ -1 +0,0 @@ -body{margin:0;font-family:Helvetica;background:#FFF;color:#000;overflow-x:hidden;-webkit-user-select:none;-webkit-text-size-adjust:none;}body>*:not(.toolbar){display:none;position:absolute;margin:0;padding:0;left:0;top:45px;width:100%;min-height:372px;-webkit-transition-duration:300ms;-webkit-transition-property:-webkit-transform;-webkit-transform:translateX(0%);}body[orient="landscape"]>*:not(.toolbar){min-height:268px;}body>*[selected="true"]{display:block;}a[selected],a:active{background-color:#194fdb!important;background-image:url(listArrowSel.png),url(selection.png)!important;background-repeat:no-repeat,repeat-x;background-position:right center,left top;color:#FFF!important;}a[selected="progress"]{background-image:url(loading.gif),url(selection.png)!important;}body>.toolbar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-bottom:1px solid #2d3642;border-top:1px solid #6d84a2;padding:10px;height:45px;background:url(toolbar.png) #6d84a2 repeat-x;}.toolbar>h1{position:absolute;overflow:hidden;left:50%;margin:1px 0 0 -75px;height:45px;font-size:20px;width:150px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#FFF;}body[orient="landscape"]>.toolbar>h1{margin-left:-125px;width:250px;}.button{position:absolute;overflow:hidden;top:8px;right:6px;margin:0;border-width:0 5px;padding:0 3px;width:auto;height:30px;line-height:30px;font-family:inherit;font-size:12px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.6) 0 -1px 0;text-overflow:ellipsis;text-decoration:none;white-space:nowrap;background:none;-webkit-border-image:url(toolButton.png) 0 5 0 5;}.blueButton{-webkit-border-image:url(blueButton.png) 0 5 0 5;border-width:0 5px;}.leftButton{left:6px;right:auto;}#backButton{display:none;left:6px;right:auto;padding:0;max-width:55px;border-width:0 8px 0 14px;-webkit-border-image:url(backButton.png) 0 8 0 14;}.whiteButton,.redButton,.grayButton{display:block;border-width:0 12px;padding:10px;text-align:center;font-size:20px;font-weight:bold;text-decoration:inherit;color:inherit;}.whiteButton{-webkit-border-image:url(whiteButton.png) 0 12 0 12;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}.redButton{-webkit-border-image:url(redButton.png) 0 12 0 12;color:#fff;text-shadow:#7a0001 0 -1px 0;}.grayButton{-webkit-border-image:url(grayButton.png) 0 12 0 12;color:#FFF;}body>ul>li{position:relative;margin:0;border-bottom:1px solid #E0E0E0;padding:8px 0 8px 10px;font-size:20px;font-weight:bold;list-style:none;}body>ul>li.group{position:relative;top:-1px;margin-bottom:-2px;border-top:1px solid #7d7d7d;border-bottom:1px solid #999;padding:1px 10px;background:url(listGroup.png) repeat-x;font-size:17px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 1px 0;color:#FFF;}body>ul>li.group:first-child{top:0;border-top:none;}body>ul>li>a{display:block;margin:-8px 0 -8px -10px;padding:8px 32px 8px 10px;text-decoration:none;color:inherit;background:url(listArrow.png) no-repeat right center;}a[target="_replace"]{box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:25px;padding-bottom:25px;font-size:18px;color:cornflowerblue;background-color:#FFF;background-image:none;}body>.dialog{top:0;width:100%;min-height:417px;z-index:2;background:rgba(0,0,0,0.8);padding:0;text-align:right;}.dialog>fieldset{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:0;border:none;border-top:1px solid #6d84a2;padding:10px 6px;background:url(toolbar.png) #7388a5 repeat-x;}.dialog>fieldset>h1{margin:0 10px 0 10px;padding:0;font-size:20px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;}.dialog>fieldset>label{position:absolute;margin:16px 0 0 6px;font-size:14px;color:#999;}input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:8px 0 0 0;padding:6px 6px 6px 44px;font-size:16px;font-weight:normal;}body>.panel{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:10px;background:#c8c8c8 url(pinstripes.png);}.panel>fieldset{position:relative;margin:0 0 20px 0;padding:0;background:#FFF;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid #999;text-align:right;font-size:16px;}.row{position:relative;min-height:42px;border-bottom:1px solid #999;-webkit-border-radius:0;text-align:right;}fieldset>.row:last-child{border-bottom:none!important;}.row>input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;border:none;padding:12px 10px 0 110px;height:42px;background:none;}.row>input[type|=radio],.row>input[type|=checkbox]{margin:7px 7px 0 0;height:25px;width:25px;}.row>label{position:absolute;margin:0 0 0 14px;line-height:42px;font-weight:bold;}.row>span{position:absolute;padding:12px 10px 0 110px;margin:0;}.row>.toggle{position:absolute;top:6px;right:6px;width:100px;height:28px;}.toggle{border:1px solid #888;-webkit-border-radius:6px;background:#FFF url(toggle.png) repeat-x;font-size:19px;font-weight:bold;line-height:30px;}.toggle[toggled="true"]{border:1px solid #143fae;background:#194fdb url(toggleOn.png) repeat-x;}.toggleOn{display:none;position:absolute;width:60px;text-align:center;left:0;top:0;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;}.toggleOff{position:absolute;width:60px;text-align:center;right:0;top:0;color:#666;}.toggle[toggled="true"]>.toggleOn{display:block;}.toggle[toggled="true"]>.toggleOff{display:none;}.thumb{position:absolute;top:-1px;left:-1px;width:40px;height:28px;border:1px solid #888;-webkit-border-radius:6px;background:#fff url(thumb.png) repeat-x;}.toggle[toggled="true"]>.thumb{left:auto;right:-1px;}.panel>h2{margin:0 0 8px 14px;font-size:inherit;font-weight:bold;color:#4d4d70;text-shadow:rgba(255,255,255,0.75) 2px 2px 0;}#preloader{display:none;background-image:url(loading.gif),url(selection.png),url(blueButton.png),url(listArrowSel.png),url(listGroup.png);}
\ No newline at end of file diff --git a/plugins/mobile/iui/iuix.js b/plugins/mobile/iui/iuix.js deleted file mode 100644 index 09d2eb993..000000000 --- a/plugins/mobile/iui/iuix.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var _1=20;var _2=0;var _3=null;var _4=null;var _5=0;var _6=location.hash;var _7="#_";var _8=[];var _9=0;var _a;var _b=false;var _c="portrait";var _d="landscape";window.iui={animOn:true,showPage:function(_e,_f){if(_e){if(_4){_4.removeAttribute("selected");_4=null;}if(hasClass(_e,"dialog")){showDialog(_e);}else{var _10=_3;_3=_e;if(_10){setTimeout(slidePages,0,_10,_e,_f);}else{updatePage(_e,_10);}}}},showPageById:function(_11){var _12=$(_11);if(_12){var _13=_8.indexOf(_11);var _14=_13!=-1;if(_14){_8.splice(_13,_8.length);}iui.showPage(_12,_14);}},showPageByHref:function(_15,_16,_17,_18,cb){var req=new XMLHttpRequest();req.onerror=function(){if(cb){cb(false);}};req.onreadystatechange=function(){if(req.readyState==4){if(_18){replaceElementWithSource(_18,req.responseText);}else{var _1b=document.createElement("div");_1b.innerHTML=req.responseText;iui.insertPages(_1b.childNodes);}if(cb){setTimeout(cb,1000,true);}}};if(_16){req.open(_17||"GET",_15,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.setRequestHeader("Content-Length",_16.length);req.send(_16.join("&"));}else{req.open(_17||"GET",_15,true);req.send(null);}},insertPages:function(_1c){var _1d;for(var i=0;i<_1c.length;++i){var _1f=_1c[i];if(_1f.nodeType==1){if(!_1f.id){_1f.id="__"+(++_9)+"__";}var _20=$(_1f.id);if(_20){_20.parentNode.replaceChild(_1f,_20);}else{document.body.appendChild(_1f);}if(_1f.getAttribute("selected")=="true"||!_1d){_1d=_1f;}--i;}}if(_1d){iui.showPage(_1d);}},getSelectedPage:function(){for(var _21=document.body.firstChild;_21;_21=_21.nextSibling){if(_21.nodeType==1&&_21.getAttribute("selected")=="true"){return _21;}}},isNativeUrl:function(_22){for(var i=0;i<iui.nativeUrlPatterns.length;i++){if(_22.match(iui.nativeUrlPatterns[i])){return true;}}return false;},nativeUrlPatterns:[new RegExp("^http://maps.google.com/maps?"),new RegExp("^mailto:"),new RegExp("^tel:"),new RegExp("^http://www.youtube.com/watch\\?v="),new RegExp("^http://www.youtube.com/v/"),new RegExp("^javascript:"),]};addEventListener("load",function(_24){var _25=iui.getSelectedPage();var _26=getPageFromLoc();if(_25){iui.showPage(_25);}if(_26&&(_26!=_25)){iui.showPage(_26);}setTimeout(preloadImages,0);if(typeof window.onorientationchange=="object"){window.onorientationchange=orientChangeHandler;_b=true;setTimeout(orientChangeHandler,0);}setTimeout(checkOrientAndLocation,0);_a=setInterval(checkOrientAndLocation,300);},false);addEventListener("unload",function(_27){return;},false);addEventListener("click",function(_28){var _29=findParent(_28.target,"a");if(_29){function unselect(){_29.removeAttribute("selected");}if(_29.href&&_29.hash&&_29.hash!="#"&&!_29.target){_29.setAttribute("selected","true");iui.showPage($(_29.hash.substr(1)));setTimeout(unselect,500);}else{if(_29==$("backButton")){history.back();}else{if(_29.getAttribute("type")=="submit"){var _2a=findParent(_29,"form");if(_2a.target=="_self"){_2a.submit();return;}submitForm(_2a);}else{if(_29.getAttribute("type")=="cancel"){cancelDialog(findParent(_29,"form"));}else{if(_29.target=="_replace"){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,_29,unselect);}else{if(iui.isNativeUrl(_29.href)){return;}else{if(_29.target=="_webapp"){location.href=_29.href;}else{if(!_29.target){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,null,unselect);}else{return;}}}}}}}}_28.preventDefault();}},true);addEventListener("click",function(_2b){var div=findParent(_2b.target,"div");if(div&&hasClass(div,"toggle")){div.setAttribute("toggled",div.getAttribute("toggled")!="true");_2b.preventDefault();}},true);function getPageFromLoc(){var _2d;var _2e=location.hash.match(/#_([^\?_]+)/);if(_2e){_2d=_2e[1];}if(_2d){_2d=$(_2d);}return _2d;}function orientChangeHandler(){var _2f=window.orientation;switch(_2f){case 0:setOrientation(_c);break;case 90:case -90:setOrientation(_d);break;}}function checkOrientAndLocation(){if(!_b){if(window.innerWidth!=_5){_5=window.innerWidth;var _30=_5==320?_c:_d;setOrientation(_30);}}if(location.hash!=_6){var _31=location.hash.substr(_7.length);iui.showPageById(_31);}}function setOrientation(_32){document.body.setAttribute("orient",_32);setTimeout(scrollTo,100,0,1);}function showDialog(_33){_4=_33;_33.setAttribute("selected","true");if(hasClass(_33,"dialog")&&!_33.target){showForm(_33);}}function showForm(_34){_34.onsubmit=function(_35){_35.preventDefault();submitForm(_34);};_34.onclick=function(_36){if(_36.target==_34&&hasClass(_34,"dialog")){cancelDialog(_34);}};}function cancelDialog(_37){_37.removeAttribute("selected");}function updatePage(_38,_39){if(!_38.id){_38.id="__"+(++_9)+"__";}location.hash=_6=_7+_38.id;_8.push(_38.id);var _3a=$("pageTitle");if(_38.title){_3a.innerHTML=_38.title;}if(_38.localName.toLowerCase()=="form"&&!_38.target){showForm(_38);}var _3b=$("backButton");if(_3b){var _3c=$(_8[_8.length-2]);if(_3c&&!_38.getAttribute("hideBackButton")){_3b.style.display="inline";_3b.innerHTML=_3c.title?_3c.title:"Back";}else{_3b.style.display="none";}}}function slidePages(_3d,_3e,_3f){var _40=(_3f?_3d:_3e).getAttribute("axis");clearInterval(_a);if(canDoSlideAnim()&&_40!="y"){slide2(_3d,_3e,_3f,slideDone);}else{slide1(_3d,_3e,_3f,_40,slideDone);}function slideDone(){if(!hasClass(_3e,"dialog")){_3d.removeAttribute("selected");}_a=setInterval(checkOrientAndLocation,300);setTimeout(updatePage,0,_3e,_3d);_3d.removeEventListener("webkitTransitionEnd",slideDone,false);}}function canDoSlideAnim(){return (iui.animOn)&&(typeof WebKitCSSMatrix=="object");}function slide1(_41,_42,_43,_44,cb){if(_44=="y"){(_43?_41:_42).style.top="100%";}else{_42.style.left="100%";}scrollTo(0,1);_42.setAttribute("selected","true");var _46=100;slide();var _47=setInterval(slide,_2);function slide(){_46-=_1;if(_46<=0){_46=0;clearInterval(_47);cb();}if(_44=="y"){_43?_41.style.top=(100-_46)+"%":_42.style.top=_46+"%";}else{_41.style.left=(_43?(100-_46):(_46-100))+"%";_42.style.left=(_43?-_46:_46)+"%";}}}function slide2(_48,_49,_4a,cb){_49.style.webkitTransitionDuration="0ms";var _4c="translateX("+(_4a?"-":"")+window.innerWidth+"px)";var _4d="translateX("+(_4a?"100%":"-100%")+")";_49.style.webkitTransform=_4c;_49.setAttribute("selected","true");_49.style.webkitTransitionDuration="";function startTrans(){_48.style.webkitTransform=_4d;_49.style.webkitTransform="translateX(0%)";}_48.addEventListener("webkitTransitionEnd",cb,false);setTimeout(startTrans,0);}function preloadImages(){var _4e=document.createElement("div");_4e.id="preloader";document.body.appendChild(_4e);}function submitForm(_4f){iui.showPageByHref(_4f.action||"POST",encodeForm(_4f),_4f.method);}function encodeForm(_50){function encode(_51){for(var i=0;i<_51.length;++i){if(_51[i].name){args.push(_51[i].name+"="+escape(_51[i].value));}}}var _53=[];encode(_50.getElementsByTagName("input"));encode(_50.getElementsByTagName("textarea"));encode(_50.getElementsByTagName("select"));return _53;}function findParent(_54,_55){while(_54&&(_54.nodeType!=1||_54.localName.toLowerCase()!=_55)){_54=_54.parentNode;}return _54;}function hasClass(_56,_57){var re=new RegExp("(^|\\s)"+_57+"($|\\s)");return re.exec(_56.getAttribute("class"))!=null;}function replaceElementWithSource(_59,_5a){var _5b=_59.parentNode;var _5c=_59;while(_5b.parentNode!=document.body){_5b=_5b.parentNode;_5c=_5c.parentNode;}var _5d=document.createElement(_5c.localName);_5d.innerHTML=_5a;_5b.removeChild(_5c);while(_5d.firstChild){_5b.appendChild(_5d.firstChild);}}function $(id){return document.getElementById(id);}function ddd(){console.log.apply(console,arguments);}})();
\ No newline at end of file diff --git a/plugins/mobile/iui/listArrow.png b/plugins/mobile/iui/listArrow.png Binary files differdeleted file mode 100644 index 6421a1676..000000000 --- a/plugins/mobile/iui/listArrow.png +++ /dev/null diff --git a/plugins/mobile/iui/listArrowSel.png b/plugins/mobile/iui/listArrowSel.png Binary files differdeleted file mode 100644 index 86832ebc7..000000000 --- a/plugins/mobile/iui/listArrowSel.png +++ /dev/null diff --git a/plugins/mobile/iui/listGroup.png b/plugins/mobile/iui/listGroup.png Binary files differdeleted file mode 100644 index 221553ae9..000000000 --- a/plugins/mobile/iui/listGroup.png +++ /dev/null diff --git a/plugins/mobile/iui/loading.gif b/plugins/mobile/iui/loading.gif Binary files differdeleted file mode 100644 index 8522ddf1a..000000000 --- a/plugins/mobile/iui/loading.gif +++ /dev/null diff --git a/plugins/mobile/iui/pinstripes.png b/plugins/mobile/iui/pinstripes.png Binary files differdeleted file mode 100644 index c99777512..000000000 --- a/plugins/mobile/iui/pinstripes.png +++ /dev/null diff --git a/plugins/mobile/iui/redButton.png b/plugins/mobile/iui/redButton.png Binary files differdeleted file mode 100644 index 210f156af..000000000 --- a/plugins/mobile/iui/redButton.png +++ /dev/null diff --git a/plugins/mobile/iui/selection.png b/plugins/mobile/iui/selection.png Binary files differdeleted file mode 100644 index 537e3f0b1..000000000 --- a/plugins/mobile/iui/selection.png +++ /dev/null diff --git a/plugins/mobile/iui/thumb.png b/plugins/mobile/iui/thumb.png Binary files differdeleted file mode 100644 index cefa8fc5e..000000000 --- a/plugins/mobile/iui/thumb.png +++ /dev/null diff --git a/plugins/mobile/iui/toggle.png b/plugins/mobile/iui/toggle.png Binary files differdeleted file mode 100644 index 3b62ebf26..000000000 --- a/plugins/mobile/iui/toggle.png +++ /dev/null diff --git a/plugins/mobile/iui/toggleOn.png b/plugins/mobile/iui/toggleOn.png Binary files differdeleted file mode 100644 index b016814de..000000000 --- a/plugins/mobile/iui/toggleOn.png +++ /dev/null diff --git a/plugins/mobile/iui/toolButton.png b/plugins/mobile/iui/toolButton.png Binary files differdeleted file mode 100644 index afe4d7a3e..000000000 --- a/plugins/mobile/iui/toolButton.png +++ /dev/null diff --git a/plugins/mobile/iui/toolbar.png b/plugins/mobile/iui/toolbar.png Binary files differdeleted file mode 100644 index 3dde94c07..000000000 --- a/plugins/mobile/iui/toolbar.png +++ /dev/null diff --git a/plugins/mobile/iui/whiteButton.png b/plugins/mobile/iui/whiteButton.png Binary files differdeleted file mode 100644 index 5514b2700..000000000 --- a/plugins/mobile/iui/whiteButton.png +++ /dev/null diff --git a/plugins/mobile/login_form.php b/plugins/mobile/login_form.php deleted file mode 100644 index be44ef1ab..000000000 --- a/plugins/mobile/login_form.php +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<title>Tiny Tiny RSS</title> -<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> -<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" /> -<meta name="apple-touch-fullscreen" content="YES" /> -<style type="text/css" media="screen">@import "iui/iui.css";</style> -<script type="application/x-javascript" src="iui/iui.js"></script> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> -</head> - - -<script type="text/javascript"> -function do_login() { - var f = document.forms['login']; - f.submit(); -} -</script> - -<body> - - <div class="toolbar"> - <h1 id="pageTitle"></h1> - <a id="backButton" class="button" href="#"></a> - <a class="button blueButton" onclick='do_login()'><?php echo __('Log in') ?></a> - </div> - - <form target="_self" title="Login" id="login" class="panel" name="login" selected="true" - action="../../public.php?return=<?php echo htmlspecialchars($_SERVER["REQUEST_URI"]) ?>" - method="post"> - - <input type="hidden" name="op" value="login"> - - <fieldset> - - <div class="row"> - <label><?php echo __("Login:") ?></label> - <input type="text" autocapitalize="off" name="login"> - </div> - - <div class="row"> - <label><?php echo __("Password:") ?></label> - <input type="password" name="password"> - </div> - - </fieldset> - - <div align='center'><a target='_self' href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'> - <?php echo __("Open regular version") ?></a> - - </form> - -</body> -</html> - diff --git a/plugins/mobile/logout.php b/plugins/mobile/logout.php deleted file mode 100644 index afc411abc..000000000 --- a/plugins/mobile/logout.php +++ /dev/null @@ -1,15 +0,0 @@ -<?php - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - require_once "mobile-functions.php"; - - logout_user(); - - header("Location: index.php"); -?> diff --git a/plugins/mobile/mobile-functions.php b/plugins/mobile/mobile-functions.php deleted file mode 100644 index 8e5cb7010..000000000 --- a/plugins/mobile/mobile-functions.php +++ /dev/null @@ -1,539 +0,0 @@ -<?php - require_once "functions.php"; - require_once "sessions.php"; - require_once "version.php"; - require_once "db-prefs.php"; - - define('TTRSS_SESSION_NAME', 'ttrss_m_sid'); - - /* TODO replace with interface to db-prefs */ - - function mobile_pref_toggled($link, $id) { - if (get_pref($link, "_MOBILE_$id")) - return "true"; - else - return ""; - } - - function mobile_get_pref($link, $id) { - //return $_SESSION["mobile-prefs"][$id]; - return get_pref($link, "_MOBILE_$id"); - } - - function mobile_set_pref($link, $id, $value) { - //$_SESSION["mobile-prefs"][$id] = $value; - return set_pref($link, "_MOBILE_$id", $value); - } - - function mobile_feed_has_icon($id) { - return file_exists("../../".ICONS_DIR."/$id.ico"); - } - - function render_flat_feed_list($link, $offset) { - $owner_uid = $_SESSION["uid"]; - $limit = 0; - - if (!$offset) $offset = 0; - - if (mobile_get_pref($link, "SORT_FEEDS_UNREAD")) { - $order_by = "unread DESC, title"; - } else { - $order_by = "title"; - } - - if ($limit > 0) { - $limit_qpart = "LIMIT $limit OFFSET $offset"; - } else { - $limit_qpart = ""; - } - - $result = db_query($link, "SELECT id, - title, - (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries - WHERE feed_id = ttrss_feeds.id AND unread = true - AND ttrss_user_entries.ref_id = ttrss_entries.id - AND owner_uid = '$owner_uid') AS unread - FROM ttrss_feeds - WHERE - ttrss_feeds.owner_uid = '$owner_uid' - ORDER BY $order_by $limit_qpart"); - - if (!$offset) print '<ul id="home" title="'.__('Home').'" selected="true" - myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">'; - - - // print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>"; - - $num_feeds = 0; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $unread = $line["unread"]; - - // $unread = rand(0, 100); - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($id)) { - $icon_url = "../../".ICONS_URL."/$id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'><a href='feed.php?id=$id'>" . - "<img class='tinyIcon' src='$icon_url'/>". - $line["title"] . "</a></li>"; - } - - ++$num_feeds; - } - -/* $next_offset = $offset + $num_feeds; - - print "<li><a href=\"home.php?skip=$next_offset\" - target=\"_replace\">Show more feeds...</a></li>"; */ - - if (!$offset) print "</ul>"; - - } - - function render_category($link, $cat_id, $offset) { - $owner_uid = $_SESSION["uid"]; - - if ($cat_id >= 0) { - - if ($cat_id != 0) { - $cat_query = "cat_id = '$cat_id'"; - } else { - $cat_query = "cat_id IS NULL"; - } - - if (mobile_get_pref($link, "SORT_FEEDS_UNREAD")) { - $order_by = "unread DESC, title"; - } else { - $order_by = "title"; - } - - $result = db_query($link, "SELECT id, - title, - (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries - WHERE feed_id = ttrss_feeds.id AND unread = true - AND ttrss_user_entries.ref_id = ttrss_entries.id - AND owner_uid = '$owner_uid') as unread - FROM ttrss_feeds - WHERE - ttrss_feeds.owner_uid = '$owner_uid' AND - $cat_query - ORDER BY $order_by"); - - $title = getCategoryTitle($link, $cat_id); - - print "<ul id='cat-$cat_id' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - // print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>"; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $unread = $line["unread"]; - - // $unread = rand(0, 100); - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($id)) { - $icon_url = "../../".ICONS_URL."/$id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'><a href='feed.php?id=$id&cat=$cat_id'>" . - "<img class='tinyIcon' src='$icon_url'/>". - $line["title"] . "</a></li>"; - } - } - - print "</ul>"; - } else if ($cat_id == -1) { - - $title = __('Special'); - - print "<ul id='cat--1' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - foreach (array(-4, -3, -1, -2, 0) as $id) { - $title = getFeedTitle($link, $id); - $unread = getFeedUnread($link, $id, false); - $icon = getFeedIcon($id); - - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'> - <a href='feed.php?id=$id&cat=-1'> - <img class='tinyIcon' src='../$icon'/>$title</a></li>"; - } - } - - print "</ul>"; - } else if ($cat_id == -2) { - - $title = __('Labels'); - - print "<ul id='cat--2' title='$title' myBackLabel='".__("Home")."' - myBackHref='home.php'>"; - - $result = db_query($link, "SELECT id, caption FROM ttrss_labels2 - WHERE owner_uid = '$owner_uid'"); - - $label_data = array(); - - while ($line = db_fetch_assoc($result)) { - - $id = label_to_feed_id($line["id"]); - - $unread = getFeedUnread($link, $id); - $title = $line["caption"]; - - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - print "<li class='$class'> - <a href='feed.php?id=$id&cat=-2'>$title</a></li>"; - } - } - print "</ul>"; - } - } - - function render_categories_list($link) { - $owner_uid = $_SESSION["uid"]; - - $cat_browse = mobile_get_pref($link, "BROWSE_CATS"); - - print '<ul id="home" title="'.__('Home').'" selected="true" - myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">'; - -// print "<li><a href='#searchForm'>Search...</a></li>"; - - foreach (array(-1, -2) as $id) { - $title = getCategoryTitle($link, $id); - $unread = getFeedUnread($link, $id, true); - if ($unread > 0) { - $title = $title . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=$id'>$title</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>$title</a></li>"; - } - - $result = db_query($link, "SELECT - ttrss_feed_categories.id, - ttrss_feed_categories.title, - COUNT(ttrss_feeds.id) AS num_feeds - FROM ttrss_feed_categories, ttrss_feeds - WHERE ttrss_feed_categories.owner_uid = $owner_uid - AND ttrss_feed_categories.id = cat_id - GROUP BY ttrss_feed_categories.id, - ttrss_feed_categories.title - ORDER BY ttrss_feed_categories.title"); - - while ($line = db_fetch_assoc($result)) { - - if ($line["num_feeds"] > 0) { - - $unread = getFeedUnread($link, $line["id"], true); - $id = $line["id"]; - - if ($unread > 0) { - $line["title"] = $line["title"] . " ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=$id'>" . - $line["title"] . "</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>". - $line["title"] . "</a></li>"; - } - } - } - - - $result = db_query($link, "SELECT COUNT(*) AS nf FROM ttrss_feeds WHERE - cat_id IS NULL and owner_uid = '$owner_uid'"); - - $num_feeds = db_fetch_result($result, 0, "nf"); - - if ($num_feeds > 0) { - $unread = getFeedUnread($link, 0, true); - $title = "Uncategorized"; - - if ($unread > 0) { - $title = "$title ($unread)"; - $class = ''; - } else { - $class = 'oldItem'; - } - - if ($unread > 0 || !mobile_get_pref($link, "HIDE_READ")) { - if ($cat_browse) - print "<li class='$class'><a href='cat.php?id=0'>$title</a></li>"; - else - print "<li class='$class'><a href='feed.php?id=0&is_cat=true'>$title</a></li>"; - - } - } - - print "</ul>"; - } - - function render_headlines_list($link, $feed_id, $cat_id, $offset, $search, - $is_cat = false) { - - $feed_id = $feed_id; - $limit = 15; - $filter = ''; - - if (!mobile_get_pref($link, "HIDE_READ")) - $view_mode = "all_articles"; - else - $view_mode = 'adaptive'; - - if ($search) { - $search_mode = 'this_feed'; - } else { - $search_mode = ''; - } - - $qfh_ret = queryFeedHeadlines($link, $feed_id, $limit, - $view_mode, $is_cat, $search, $search_mode, - "score DESC, date_entered ".(mobile_get_pref($link, 'REVERSE_HEADLINES') ? 'ASC' : 'DESC'), $offset); - - $result = $qfh_ret[0]; - $feed_title = $qfh_ret[1]; - - if (!$offset) { - - print "<form id=\"searchForm-$feed_id-$cat_id\" class=\"dialog\" method=\"POST\" - action=\"feed.php\"> - - <input type=\"hidden\" name=\"id\" value=\"$feed_id\"> - <input type=\"hidden\" name=\"cat\" value=\"$cat_id\"> - - <fieldset> - <h1>Search</h1> - <a class=\"button leftButton\" type=\"cancel\">Cancel</a> - <a class=\"button blueButton\" type=\"submit\">Search</a> - - <label>Search:</label> - <input id=\"search\" type=\"text\" name=\"search\"/> - </fieldset> - </form>"; - - if ($cat_id) { - $cat_title = getCategoryTitle($link, $cat_id); - - print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\" - myBackLabel='$cat_title' myBackHref='cat.php?id=$cat_id'>"; - } else { - print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\" - myBackLabel='".__("Home")."' myBackHref='home.php'>"; - } - - print "<li><a href='#searchForm-$feed_id-$cat_id'>Search...</a></li>"; - } - - $num_headlines = 0; - - while ($line = db_fetch_assoc($result)) { - $id = $line["id"]; - $real_feed_id = $line["feed_id"]; - - if (sql_bool_to_bool($line["unread"])) { - $class = ''; - } else { - $class = 'oldItem'; - } - - if (mobile_feed_has_icon($real_feed_id)) { - $icon_url = "../../".ICONS_URL."/$real_feed_id.ico"; - } else { - $icon_url = "../../images/blank_icon.gif"; - } - - print "<li class='$class'><a href='article.php?id=$id&feed=$feed_id&cat=$cat_id&is_cat=$is_cat'> - <img class='tinyIcon' src='$icon_url'>"; - print $line["title"]; - print "</a></li>"; - - ++$num_headlines; - - } - - if ($num_headlines == 0 && $search) { - $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset"; - - print "<li><a href=\"$articles_url\">" . __("Nothing found (click to reload feed).") . "</a></li>"; - - } - -// print "<a target='_replace' href='feed.php?id=$feed_id&cat=$cat_id&skip=0'>Next $limit articles...</a>"; - - $next_offset = $offset + $num_headlines; - $num_unread = getFeedUnread($link, $feed_id, $is_cat); - - /* FIXME needs normal implementation */ - - if ($num_headlines > 0 && ($num_unread == 0 || $num_unread > $next_offset)) { - - if ($is_cat) { - $articles_url = "feed.php?id=$feed_id&skip=$next_offset". - "&search=$search&is_cat=true"; - } else { - $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset". - "&search=$search"; - } - - print "<li><a href=\"$articles_url\" - target=\"_replace\">Get more articles...</a></li>"; - } - - if (!$offset) print "</ul>"; - - } - - function render_article($link, $id, $feed_id, $cat_id, $is_cat) { - - $query = "SELECT title,link,content,feed_id,comments,int_id, - marked,unread,published, - ".SUBSTRING_FOR_DATE."(updated,1,16) as updated, - author - FROM ttrss_entries,ttrss_user_entries - WHERE id = '$id' AND ref_id = id AND owner_uid = " . - $_SESSION["uid"] ; - - $result = db_query($link, $query); - - if (db_num_rows($result) != 0) { - - $line = db_fetch_assoc($result); - - $tmp_result = db_query($link, "UPDATE ttrss_user_entries - SET unread = false,last_read = NOW() - WHERE ref_id = '$id' - AND owner_uid = " . $_SESSION["uid"]); - - $updated_fmt = make_local_datetime($link, $line['updated'], false); - - $title = $line["title"]; - $article_link = $line["link"]; - - if (!$is_cat) - $feed_title = getFeedTitle($link, $feed_id); - else - $feed_title = getCategoryTitle($link, $feed_id); - - print "<div class=\"panel\" id=\"article-$id\" title=\"$title\" - selected=\"true\" - myBackLabel='$feed_title' myBackHref='feed.php?id=$feed_id&cat=$cat_id&is_cat=$is_cat'>"; - - if ($line['feed_id'] != $feed_id) { - $real_feed_title = getFeedTitle($link, $line['feed_id']); - $real_feed_id = $line['feed_id']; - $feed_link = "(<a href=\"feed.php?id=$real_feed_id\">$real_feed_title</a>)"; - } -// print "<fieldset>"; - - print "<div style='float : right'>($updated_fmt)</div>"; - - print "<h2><a target='_blank' href='$article_link'>$title</a> $feed_link</h2>"; - - print "<hr>"; - -/* print "<div class=\"row\">"; - print "<label id='title'><a target='_blank' href='$article_link'>$title</a></label>"; - print "</div>"; */ - - $is_starred = (sql_bool_to_bool($line["marked"])) ? "true" : "false"; - $is_published = (sql_bool_to_bool($line["published"])) ? "true" : "false"; - - //print "<div class=\"row\">"; - //print "<label id='updated'>Updated:</label>"; - //print "<input type='text' enabled='false' name='updated' disabled value='$updated_fmt'/>"; - //print "</div>"; - -// print "</fieldset>"; - - $content = sanitize($link, $line["content"]); - $content = preg_replace("/href=/i", "target=\"_blank\" href=", $content); - - if (!mobile_get_pref($link, "SHOW_IMAGES")) { - $content = preg_replace('/<img[^>]+>/is', '', $content); - } - - print "<p>$content</p>"; - - print "<div class='nav'> - <label>Navigation</label> - <div class='button left' onclick='goPrev($id, $feed_id, this)'>Prev</div> - <div class='button right' onclick='goNext($id, $feed_id, this)'>Next</div> - </div>"; - - print "<fieldset>"; - - print "<div class=\"row\"> - <label>Starred</label> - <div class=\"toggle\" onclick=\"toggleMarked($id, this)\" toggled=\"$is_starred\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - print "<div class=\"row\"> - <label>Published</label> - <div class=\"toggle\" onclick=\"togglePublished($id, this)\" toggled=\"$is_published\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - print "<div class=\"row\"> - <label>Unread</label> - <div class=\"toggle\" onclick=\"toggleUnread($id, this)\" toggled=\"$is_unread\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div> - </div>"; - - - print "</fieldset>"; - - print "</div>"; - - } - } -?> diff --git a/plugins/mobile/mobile.css b/plugins/mobile/mobile.css deleted file mode 100644 index 8068e3d38..000000000 --- a/plugins/mobile/mobile.css +++ /dev/null @@ -1,38 +0,0 @@ -div.nav { - height: 40px; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - background-color: #ffffff; - border: 1px solid #999999; - text-align: center; - margin-bottom: 1em; -} -div.nav label { - line-height: 40px; - color: black; - font-weight: bold; -} -div.nav .button { - position: static; - margin: 5px 10px; - -webkit-border-image: url(../lib/iui/whiteButton.png) 0 12 0 12; - text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0; - color: black; - cursor: pointer; /* On a touch screen ? */ -} -div.nav .button.left { - float: left; -} -div.nav .button.right { - float: right; -} - -ul li a.read { - color: #666666; -} - -ul li span.browse { - color : #909090; - text-align : right; - float : right; -} diff --git a/plugins/mobile/mobile.js b/plugins/mobile/mobile.js deleted file mode 100644 index 3fed3a1d7..000000000 --- a/plugins/mobile/mobile.js +++ /dev/null @@ -1,163 +0,0 @@ -var backend = "backend.php"; - -function toggleMarked(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=toggleMarked&id=" + id + "&mark=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); -} - -function togglePublished(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=togglePublished&id=" + id + "&pub=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -function toggleUnread(id, elem) { - - var toggled = false; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=toggleUnread&id=" + id + "&unread=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -function setPref(elem) { - var toggled = false; - var id = elem.id; - - if (elem.getAttribute("toggled") == "true") { - toggled = 1; - } else { - toggled = 0; - } - - var query = "op=setPref&id=" + id + "&to=" + toggled; - - new Ajax.Request(backend, { - parameters: query, - onComplete: function (transport) { - // - } }); - -} - -// Go directly to another item in the same feed -function goToSibling(article_id, feed_id, link, step) { - var links = linksInFeed(feed_id); - for (var i=0 ; i<links.length ; i++) { - var re = new RegExp(".*article\\.php\\?id="+article_id+"&.*"); - if (!re.test(links[i].href)) continue; - // here, we've found the current article - var index = i + step; - if (index < 0) { - markAsRead(feed_id); - iui.showPage($("feed-"+feed_id), true); - return false; - } - if (index >= links.length) { - showRestOfFeed(feed_id); - return false; - } - console.log(links[index]); - var match = links[index].href.match(/.*article\.php\?(.*)/); - var qs = match[1]; - var backwards = false; - if (step < 0) backwards = true; - link.setAttribute("selected", "progress"); - function unselect() { link.removeAttribute("selected"); } - iui.showPageByHref("article.php?"+qs, null, null, null, unselect, backwards); - return false; - } - return false; -} -function goPrev(article_id, feed_id, link) { - return goToSibling(article_id, feed_id, link, -1); -} -function goNext(article_id, feed_id, link) { - return goToSibling(article_id, feed_id, link, 1); -} - -// Get all the links in the feed. The all_links variable includes the "get more article" link -function linksInFeed(feed_id, all_links) { - var feed_content = $("feed-"+feed_id); - var links_raw = feed_content.getElementsByTagName("a"); - if (all_links) return links_raw; - var links = []; - // filter the array to remove the "get more articles" link - // and the "search" link (which is always first) - for (var i=1 ; i<links_raw.length ; i++) { - if (links_raw[i].href.match(/.*article\.php\?id=.*/)) { - links.push(links_raw[i]); - } - } - return links; -} - -// Adds the "read" class to all read links in the feed -function markAsRead(feed_id) { - var links = linksInFeed(feed_id); - for (var j=0 ; j<links.length ; j++) { - var match = links[j].href.match(/.*article\.php\?id=(\d+)&.*/); - if ($("article-"+match[1])) { - links[j].className = "read"; - } - } -} - -// Go the the articles list and expand the "get more articles" link -function showRestOfFeed(feed_id) { - var links_raw = linksInFeed(feed_id, true); - var lastlink = links_raw[links_raw.length - 1]; - if (lastlink.target == "_replace") { - // It's a "get more articles" link - iui.showPage($("feed-"+feed_id), true); - // Mark old items a "read" - markAsRead(feed_id); - // Simulate click on the "get more articles" link - lastlink.setAttribute("selected", "progress"); - function unselect() { lastlink.removeAttribute("selected"); } - setTimeout(window.scrollTo, 0, 0, 1000); - iui.showPageByHref(lastlink.href, null, null, lastlink, unselect); - } else { - iui.showPage($("home"), true); - } -} - diff --git a/plugins/mobile/prefs.php b/plugins/mobile/prefs.php deleted file mode 100644 index 323196254..000000000 --- a/plugins/mobile/prefs.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - error_reporting(E_ERROR | E_WARNING | E_PARSE); - - header('Content-Type: text/html; charset=utf-8'); - - define('MOBILE_VERSION', true); - - $basedir = dirname(dirname(dirname(__FILE__))); - - set_include_path( - dirname(__FILE__) . PATH_SEPARATOR . - $basedir . PATH_SEPARATOR . - "$basedir/include" . PATH_SEPARATOR . - get_include_path()); - - $basedir = dirname(dirname(__FILE__)); - - require_once "config.php"; - require_once "mobile-functions.php"; - - $link = db_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); - - init_connection($link); - - login_sequence($link, true); -?> - -<div class="panel" id="prefs" selected="yes" title="Preferences" - myBackLabel="<?php echo __('Home') ?>" myBackHref="home.php"> - -<fieldset> - -<div class="row"> - <label><?php echo __('Enable categories') ?></label> - <div class="toggle" id="ENABLE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "ENABLE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Browse categories like folders') ?></label> - <div class="toggle" id="BROWSE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "BROWSE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - - -<div class="row"> - <label><?php echo __('Show images in posts') ?></label> - <div class="toggle" id="SHOW_IMAGES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "SHOW_IMAGES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Hide read articles and feeds') ?></label> - <div class="toggle" id="HIDE_READ" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "HIDE_READ") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Sort feeds by unread count') ?></label> - <div class="toggle" id="SORT_FEEDS_UNREAD" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "SORT_FEEDS_UNREAD") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -<div class="row"> - <label><?php echo __('Reverse headline order (oldest first)') ?></label> - <div class="toggle" id="REVERSE_HEADLINES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled($link, "REVERSE_HEADLINES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div> -</div> - -</fieldset> diff --git a/plugins/note/init.php b/plugins/note/init.php index 7e8cfb57f..2a32961fc 100644 --- a/plugins/note/init.php +++ b/plugins/note/init.php @@ -1,6 +1,5 @@ <?php class Note extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Note extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -29,9 +27,9 @@ class Note extends Plugin { } function edit() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); - $result = db_query($this->link, "SELECT note FROM ttrss_user_entries WHERE + $result = db_query("SELECT note FROM ttrss_user_entries WHERE ref_id = '$param' AND owner_uid = " . $_SESSION['uid']); $note = db_fetch_result($result, 0, "note"); @@ -58,10 +56,10 @@ class Note extends Plugin { } function setNote() { - $id = db_escape_string($this->link, $_REQUEST["id"]); - $note = trim(strip_tags(db_escape_string($this->link, $_REQUEST["note"]))); + $id = db_escape_string($_REQUEST["id"]); + $note = trim(strip_tags(db_escape_string($_REQUEST["note"]))); - db_query($this->link, "UPDATE ttrss_user_entries SET note = '$note' + db_query("UPDATE ttrss_user_entries SET note = '$note' WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); $formatted_note = format_article_note($id, $note); @@ -70,5 +68,9 @@ class Note extends Plugin { "raw_length" => mb_strlen($note))); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/nsfw/init.php b/plugins/nsfw/init.php index 247d56a1e..a57aa4456 100644 --- a/plugins/nsfw/init.php +++ b/plugins/nsfw/init.php @@ -1,7 +1,5 @@ <?php class NSFW extends Plugin { - - private $link; private $host; function about() { @@ -12,7 +10,6 @@ class NSFW extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_RENDER_ARTICLE, $this); @@ -91,7 +88,7 @@ class NSFW extends Plugin { } function save() { - $tags = explode(",", db_escape_string($this->link, $_POST["tags"])); + $tags = explode(",", db_escape_string($_POST["tags"])); $tags = array_map("trim", $tags); $tags = array_map("mb_strtolower", $tags); $tags = join(", ", $tags); @@ -101,5 +98,9 @@ class NSFW extends Plugin { echo __("Configuration saved."); } + function api_version() { + return 2; + } + } ?> diff --git a/plugins/share/init.php b/plugins/share/init.php index 4d7e0437c..72a4d4bf9 100644 --- a/plugins/share/init.php +++ b/plugins/share/init.php @@ -1,6 +1,5 @@ <?php class Share extends Plugin { - private $link; private $host; function about() { @@ -10,7 +9,6 @@ class Share extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this); @@ -28,9 +26,9 @@ class Share extends Plugin { } function shareArticle() { - $param = db_escape_string($this->link, $_REQUEST['param']); + $param = db_escape_string($_REQUEST['param']); - $result = db_query($this->link, "SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '$param' + $result = db_query("SELECT uuid, ref_id FROM ttrss_user_entries WHERE int_id = '$param' AND owner_uid = " . $_SESSION['uid']); if (db_num_rows($result) == 0) { @@ -41,8 +39,8 @@ class Share extends Plugin { $ref_id = db_fetch_result($result, 0, "ref_id"); if (!$uuid) { - $uuid = db_escape_string($this->link, sha1(uniqid(rand(), true))); - db_query($this->link, "UPDATE ttrss_user_entries SET uuid = '$uuid' WHERE int_id = '$param' + $uuid = db_escape_string(sha1(uniqid(rand(), true))); + db_query("UPDATE ttrss_user_entries SET uuid = '$uuid' WHERE int_id = '$param' AND owner_uid = " . $_SESSION['uid']); } @@ -55,10 +53,10 @@ class Share extends Plugin { print "<a id='pub_opml_url' href='$url_path' target='_blank'>$url_path</a>"; print "</div>"; - /* if (!label_find_id($this->link, __('Shared'), $_SESSION["uid"])) - label_create($this->link, __('Shared'), $_SESSION["uid"]); + /* if (!label_find_id(__('Shared'), $_SESSION["uid"])) + label_create(__('Shared'), $_SESSION["uid"]); - label_add_article($this->link, $ref_id, __('Shared'), $_SESSION['uid']); */ + label_add_article($ref_id, __('Shared'), $_SESSION['uid']); */ } print "<div align='center'>"; @@ -69,6 +67,9 @@ class Share extends Plugin { print "</div>"; } + function api_version() { + return 2; + } } ?> diff --git a/plugins/swap_jk/init.php b/plugins/swap_jk/init.php index 34b09bd77..e60e7201f 100644 --- a/plugins/swap_jk/init.php +++ b/plugins/swap_jk/init.php @@ -1,7 +1,6 @@ <?php class Swap_JK extends Plugin { - private $link; private $host; function about() { @@ -11,7 +10,6 @@ class Swap_JK extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_HOTKEY_MAP, $this); @@ -23,7 +21,11 @@ class Swap_JK extends Plugin { $hotkeys["k"] = "prev_feed"; return $hotkeys; + } + function api_version() { + return 2; } + } ?> diff --git a/plugins/updater/init.php b/plugins/updater/init.php index 6bfaa82c4..fa283c8be 100644 --- a/plugins/updater/init.php +++ b/plugins/updater/init.php @@ -1,7 +1,6 @@ <?php class Updater extends Plugin { - private $link; private $host; function about() { @@ -12,7 +11,6 @@ class Updater extends Plugin { } function init($host) { - $this->link = $host->get_link(); $this->host = $host; $host->add_hook($host::HOOK_PREFS_TAB, $this); @@ -22,7 +20,7 @@ class Updater extends Plugin { $this); } - function update_self_step($link, $step, $params, $force = false) { + function update_self_step($step, $params, $force = false) { // __FILE__ is in plugins/updater so we need to go one level up $work_dir = dirname(dirname(dirname(__FILE__))); $parent_dir = dirname($work_dir); @@ -279,13 +277,13 @@ class Updater extends Plugin { return array("step" => $step, "stop" => $stop, "params" => $params, "log" => $log); } - function update_self_cli($link, $force = false) { + function update_self_cli($force = false) { $step = 0; $stop = false; $params = array(); while (!$stop) { - $rc = $this->update_self_step($link, $step, $params, $force); + $rc = $this->update_self_step($step, $params, $force); $params = $rc['params']; $stop = $rc['stop']; @@ -309,7 +307,7 @@ class Updater extends Plugin { if ($input != 'yes' && $input != 'force') exit; - $this->update_self_cli($link, $input == 'force'); + $this->update_self_cli($input == 'force'); } function get_prefs_js() { @@ -323,7 +321,7 @@ class Updater extends Plugin { print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Update Tiny Tiny RSS')."\">"; if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) { - $_SESSION["version_data"] = @check_for_update($this->link); + $_SESSION["version_data"] = @check_for_update(); $_SESSION["pref_last_version_check"] = time(); } @@ -378,9 +376,13 @@ class Updater extends Plugin { $force = (bool) $_REQUEST["force"]; if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) { - print json_encode($this->update_self_step($this->link, $step, $params, $force)); + print json_encode($this->update_self_step($step, $params, $force)); } } + function api_version() { + return 2; + } + } ?> |