2011-12-12 20:20:53 +00:00
< ? php
2012-08-17 13:03:39 +00:00
class Dlg extends Handler_Protected {
2011-12-12 20:20:53 +00:00
private $param ;
2011-12-13 10:15:42 +00:00
2012-07-05 18:43:44 +00:00
function before ( $method ) {
if ( parent :: before ( $method )) {
2013-04-01 06:47:41 +00:00
header ( " Content-Type: text/html " ); # required for iframe
2013-03-22 05:14:55 +00:00
$this -> param = db_escape_string ( $this -> link , $_REQUEST [ " param " ]);
2011-12-12 20:20:53 +00:00
return true ;
}
return false ;
}
2011-12-13 10:15:42 +00:00
2011-12-12 20:20:53 +00:00
function importOpml () {
2011-12-27 14:37:07 +00:00
print __ ( " If you have imported labels and/or filters, you might need to reload preferences to see your new data. " ) . " </p> " ;
2011-12-12 20:20:53 +00:00
print " <div class= \" prefFeedOPMLHolder \" > " ;
$owner_uid = $_SESSION [ " uid " ];
db_query ( $this -> link , " BEGIN " );
2012-08-15 11:47:13 +00:00
print " <ul class='nomarks'> " ;
2011-12-12 20:20:53 +00:00
2012-08-15 11:47:13 +00:00
$opml = new Opml ( $this -> link , $_REQUEST );
2011-12-12 20:20:53 +00:00
2012-08-15 11:47:13 +00:00
$opml -> opml_import ( $_SESSION [ " uid " ]);
2011-12-12 20:20:53 +00:00
2012-11-20 19:33:12 +00:00
db_query ( $this -> link , " COMMIT " );
2011-12-22 12:45:19 +00:00
print " </ul> " ;
2011-12-12 20:20:53 +00:00
print " </div> " ;
print " <div align='center'> " ;
print " <button dojoType= \" dijit.form.Button \"
2011-12-27 14:37:07 +00:00
onclick = \ " dijit.byId('opmlImportDlg').execute() \" > " .
2011-12-12 20:20:53 +00:00
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
print " </div> " ;
//return;
}
function editPrefProfiles () {
print " <div dojoType= \" dijit.Toolbar \" > " ;
2012-06-14 17:04:14 +00:00
print " <div dojoType= \" dijit.form.DropDownButton \" > " .
" <span> " . __ ( 'Select' ) . " </span> " ;
print " <div dojoType= \" dijit.Menu \" style= \" display: none; \" > " ;
print " <div onclick= \" selectTableRows('prefFeedProfileList', 'all') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'All' ) . " </div> " ;
print " <div onclick= \" selectTableRows('prefFeedProfileList', 'none') \"
dojoType = \ " dijit.MenuItem \" > " . __ ( 'None' ) . " </div> " ;
print " </div></div> " ;
print " <div style= \" float : right \" > " ;
2011-12-12 20:20:53 +00:00
print " <input name= \" newprofile \" dojoType= \" dijit.form.ValidationTextBox \"
required = \ " 1 \" >
< button dojoType = \ " dijit.form.Button \"
onclick = \ " dijit.byId('profileEditDlg').addProfile() \" > " .
__ ( 'Create profile' ) . " </button></div> " ;
2012-06-14 17:04:14 +00:00
print " </div> " ;
2011-12-12 20:20:53 +00:00
$result = db_query ( $this -> link , " SELECT title,id FROM ttrss_settings_profiles
WHERE owner_uid = " . $_SESSION["uid"] . " ORDER BY title " );
2013-04-01 06:51:38 +00:00
print " <div class= \" prefProfileHolder \" > " ;
2011-12-12 20:20:53 +00:00
print " <form id= \" profile_edit_form \" onsubmit= \" return false \" > " ;
print " <table width= \" 100% \" class= \" prefFeedProfileList \"
cellspacing = \ " 0 \" id= \" prefFeedProfileList \" > " ;
2012-06-14 17:04:14 +00:00
print " <tr class= \" placeholder \" id= \" FCATR-0 \" > " ; #odd
2011-12-12 20:20:53 +00:00
print " <td width='5%' align='center'><input
2012-06-14 17:04:14 +00:00
id = 'FCATC-0'
2011-12-12 20:20:53 +00:00
onclick = 'toggleSelectRow2(this);'
dojoType = \ " dijit.form.CheckBox \"
type = \ " checkbox \" ></td> " ;
if ( ! $_SESSION [ " profile " ]) {
$is_active = __ ( " (active) " );
} else {
$is_active = " " ;
}
print " <td><span> " .
__ ( " Default profile " ) . " $is_active </span></td> " ;
print " </tr> " ;
$lnum = 1 ;
while ( $line = db_fetch_assoc ( $result )) {
$class = ( $lnum % 2 ) ? " even " : " odd " ;
$profile_id = $line [ " id " ];
$this_row_id = " id= \" FCATR- $profile_id\ " " ;
2012-06-14 17:04:14 +00:00
print " <tr class= \" placeholder \" $this_row_id > " ;
2011-12-12 20:20:53 +00:00
$edit_title = htmlspecialchars ( $line [ " title " ]);
print " <td width='5%' align='center'><input
onclick = 'toggleSelectRow2(this);'
2012-06-14 17:04:14 +00:00
id = 'FCATC-$profile_id'
2011-12-12 20:20:53 +00:00
dojoType = \ " dijit.form.CheckBox \"
type = \ " checkbox \" ></td> " ;
if ( $_SESSION [ " profile " ] == $line [ " id " ]) {
$is_active = __ ( " (active) " );
} else {
$is_active = " " ;
}
print " <td><span dojoType= \" dijit.InlineEditBox \"
width = \ " 300px \" autoSave= \" false \"
profile - id = \ " $profile_id\ " > " . $edit_title .
" <script type= \" dojo/method \" event= \" onChange \" args= \" item \" >
var elem = this ;
dojo . xhrPost ({
url : 'backend.php' ,
content : { op : 'rpc' , method : 'saveprofile' ,
value : this . value ,
id : this . srcNodeRef . getAttribute ( 'profile-id' )},
load : function ( response ) {
elem . attr ( 'value' , response );
}
});
</ script >
</ span > $is_active </ td > " ;
print " </tr> " ;
++ $lnum ;
}
print " </table> " ;
print " </form> " ;
print " </div> " ;
print " <div class='dlgButtons'>
< div style = 'float : left' >
< button dojoType = \ " dijit.form.Button \" onclick= \" dijit.byId('profileEditDlg').removeSelected() \" > " .
__ ( 'Remove selected profiles' ) . " </button>
< button dojoType = \ " dijit.form.Button \" onclick= \" dijit.byId('profileEditDlg').activateProfile() \" > " .
__ ( 'Activate profile' ) . " </button>
</ div > " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" dijit.byId('profileEditDlg').hide() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
function pubOPMLUrl () {
2013-01-22 18:36:16 +00:00
$url_path = Opml :: opml_publish_url ( $this -> link );
2011-12-12 20:20:53 +00:00
print __ ( " Your Public OPML URL is: " );
print " <div class= \" tagCloudContainer \" > " ;
print " <a id='pub_opml_url' href=' $url_path ' target='_blank'> $url_path </a> " ;
print " </div> " ;
print " <div align='center'> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return opmlRegenKey() \" > " .
__ ( 'Generate new URL' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return closeInfoBox() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
//return;
}
function explainError () {
print " <div class= \" errorExplained \" > " ;
if ( $this -> param == 1 ) {
print __ ( " Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner. " );
$stamp = ( int ) file_get_contents ( LOCK_DIRECTORY . " /update_daemon.stamp " );
print " <p> " . __ ( " Last update: " ) . " " . date ( " Y.m.d, G:i " , $stamp );
}
if ( $this -> param == 3 ) {
print __ ( " Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner. " );
$stamp = ( int ) file_get_contents ( LOCK_DIRECTORY . " /update_daemon.stamp " );
print " <p> " . __ ( " Last update: " ) . " " . date ( " Y.m.d, G:i " , $stamp );
}
print " </div> " ;
print " <div align='center'> " ;
print " <button onclick= \" return closeInfoBox() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
//return;
}
function printTagCloud () {
print " <div class= \" tagCloudContainer \" > " ;
2011-12-13 12:23:31 +00:00
// from here: http://www.roscripts.com/Create_tag_cloud-71.html
$query = " SELECT tag_name, COUNT(post_int_id) AS count
FROM ttrss_tags WHERE owner_uid = " . $_SESSION["uid"] . "
GROUP BY tag_name ORDER BY count DESC LIMIT 50 " ;
$result = db_query ( $this -> link , $query );
$tags = array ();
while ( $line = db_fetch_assoc ( $result )) {
$tags [ $line [ " tag_name " ]] = $line [ " count " ];
}
if ( count ( $tags ) == 0 ){ return ; }
ksort ( $tags );
$max_size = 32 ; // max font size in pixels
$min_size = 11 ; // min font size in pixels
// largest and smallest array values
$max_qty = max ( array_values ( $tags ));
$min_qty = min ( array_values ( $tags ));
// find the range of values
$spread = $max_qty - $min_qty ;
if ( $spread == 0 ) { // we don't want to divide by zero
$spread = 1 ;
}
// set the font-size increment
$step = ( $max_size - $min_size ) / ( $spread );
// loop through the tag array
foreach ( $tags as $key => $value ) {
// calculate font-size
// find the $value in excess of $min_qty
// multiply by the font-size increment ($size)
// and add the $min_size set above
$size = round ( $min_size + (( $value - $min_qty ) * $step ));
$key_escaped = str_replace ( " ' " , " \\ ' " , $key );
echo " <a href= \" javascript:viewfeed(' $key_escaped ') \" style= \" font-size: " .
$size . " px \" title= \" $value articles tagged with " .
$key . '">' . $key . '</a> ' ;
}
2011-12-12 20:20:53 +00:00
print " </div> " ;
print " <div align='center'> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " return closeInfoBox() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
function printTagSelect () {
2011-12-13 10:15:42 +00:00
2011-12-12 20:20:53 +00:00
print __ ( " Match: " ) . " " .
2012-11-22 12:07:40 +00:00
" <input class= \" noborder \" dojoType= \" dijit.form.RadioButton \" type= \" radio \" checked value= \" any \" name= \" tag_mode \" id= \" tag_mode_any \" > " ;
print " <label for= \" tag_mode_any \" > " . __ ( " Any " ) . " </label> " ;
print " " ;
print " <input class= \" noborder \" dojoType= \" dijit.form.RadioButton \" type= \" radio \" value= \" all \" name= \" tag_mode \" id= \" tag_mode_all \" > " ;
print " <label for= \" tag_mode_all \" > " . __ ( " All tags. " ) . " </input> " ;
2011-12-12 20:20:53 +00:00
print " <select id= \" all_tags \" name= \" all_tags \" title= \" " . __ ( 'Which Tags?' ) . " \" multiple= \" multiple \" size= \" 10 \" style= \" width : 100% \" > " ;
$result = db_query ( $this -> link , " SELECT DISTINCT tag_name FROM ttrss_tags WHERE owner_uid = " . $_SESSION [ 'uid' ] . "
AND LENGTH ( tag_name ) <= 30 ORDER BY tag_name ASC " );
while ( $row = db_fetch_assoc ( $result )) {
$tmp = htmlspecialchars ( $row [ " tag_name " ]);
print " <option value= \" " . str_replace ( " " , " %20 " , $tmp ) . " \" > $tmp </option> " ;
}
print " </select> " ;
print " <div align='right'> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" viewfeed(get_all_tags( $ ('all_tags')),
get_radio_checked ( $ ( 'tag_mode' ))); \ " > " . __ ( 'Display entries' ) . " </button> " ;
print " " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " return closeInfoBox() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
function generatedFeed () {
2011-12-13 10:15:42 +00:00
2011-12-12 20:20:53 +00:00
$this -> params = explode ( " : " , $this -> param , 3 );
2013-03-22 05:14:55 +00:00
$feed_id = db_escape_string ( $this -> link , $this -> params [ 0 ]);
2011-12-12 20:20:53 +00:00
$is_cat = ( bool ) $this -> params [ 1 ];
$key = get_feed_access_key ( $this -> link , $feed_id , $is_cat );
$url_path = htmlspecialchars ( $this -> params [ 2 ]) . " &key= " . $key ;
2013-03-28 10:01:25 +00:00
print " <h2> " . __ ( " You can view this feed as RSS using the following URL: " ) . " </h2> " ;
2011-12-12 20:20:53 +00:00
print " <div class= \" tagCloudContainer \" > " ;
print " <a id='gen_feed_url' href=' $url_path ' target='_blank'> $url_path </a> " ;
print " </div> " ;
print " <div align='center'> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return genUrlChangeKey(' $feed_id ', ' $is_cat ') \" > " .
__ ( 'Generate new URL' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return closeInfoBox() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
//return;
}
function newVersion () {
2011-12-13 10:15:42 +00:00
2011-12-12 20:20:53 +00:00
$version_data = check_for_update ( $this -> link );
$version = $version_data [ 'version' ];
$id = $version_data [ 'version_id' ];
2013-02-06 16:13:44 +00:00
if ( $version && $id ) {
print " <div class='tagCloudContainer'> " ;
2011-12-12 20:20:53 +00:00
2013-02-06 16:13:44 +00:00
print T_sprintf ( " New version of Tiny Tiny RSS is available (%s). " ,
" <b> $version </b> " );
2011-12-12 20:20:53 +00:00
2013-02-06 16:13:44 +00:00
print " </div> " ;
2011-12-12 20:20:53 +00:00
2013-02-06 16:13:44 +00:00
$details = " http://tt-rss.org/redmine/versions/ $id " ;
$download = " http://tt-rss.org/#Download " ;
2011-12-12 20:20:53 +00:00
2013-02-06 16:13:44 +00:00
print " <p align='center'> " . __ ( " You can update using built-in updater in the Preferences or by using update.php " ) . " </p> " ;
2012-08-23 09:17:22 +00:00
2013-02-06 16:13:44 +00:00
print " <div style='text-align : center'> " ;
print " <button dojoType= \" dijit.form.Button \"
2013-03-25 17:47:38 +00:00
onclick = \ " return window.open(' $details ') \" > " . __ ( " See the release notes " ) . " </button> " ;
2013-02-06 16:13:44 +00:00
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " return window.open(' $download ') \" > " . __ ( " Download " ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " return dijit.byId('newVersionDlg').hide() \" > " .
__ ( 'Close this window' ) . " </button> " ;
} else {
print " <div class='tagCloudContainer'> " ;
print " <p align='center'> " . __ ( " Error receiving version information or no new version available. " ) . " </p> " ;
print " </div> " ;
print " <div style='text-align : center'> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " return dijit.byId('newVersionDlg').hide() \" > " .
__ ( 'Close this window' ) . " </button> " ;
print " </div> " ;
}
2011-12-12 20:20:53 +00:00
print " </div> " ;
}
function customizeCSS () {
$value = get_pref ( $this -> link , " USER_STYLESHEET " );
$value = str_replace ( " <br/> " , " \n " , $value );
2013-03-28 10:01:25 +00:00
print_notice ( T_sprintf ( " You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target= \" _blank \" class= \" visibleLink \" href= \" %s \" >This file</a> can be used as a baseline. " , " tt-rss.css " ));
2011-12-12 20:20:53 +00:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" rpc \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" setpref \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" key \" value= \" USER_STYLESHEET \" > " ;
print " <table width='100%'><tr><td> " ;
print " <textarea dojoType= \" dijit.form.SimpleTextarea \"
style = 'font-size : 12px; width : 100%; height: 200px;'
placeHolder = 'body#ttrssMain { font-size : 14px; };'
name = 'value' > $value </ textarea > " ;
print " </td></tr></table> " ;
print " <div class='dlgButtons'> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " dijit.byId('cssEditDlg').execute() \" > " . __ ( 'Save' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " dijit.byId('cssEditDlg').hide() \" > " . __ ( 'Cancel' ) . " </button> " ;
print " </div> " ;
}
function addInstance () {
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-instances \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" add \" > " ;
print " <div class= \" dlgSec \" > " . __ ( " Instance " ) . " </div> " ;
print " <div class= \" dlgSecCont \" > " ;
/* URL */
print __ ( " URL: " ) . " " ;
print " <input dojoType= \" dijit.form.ValidationTextBox \" required= \" 1 \"
placeHolder = \ " " . __ ( " Instance URL " ) . " \"
regExp = '^(http|https)://.*'
style = \ " font-size : 16px; width: 20em \" name= \" access_url \" > " ;
print " <hr/> " ;
$access_key = sha1 ( uniqid ( rand (), true ));
/* Access key */
print __ ( " Access key: " ) . " " ;
print " <input dojoType= \" dijit.form.ValidationTextBox \" required= \" 1 \"
placeHolder = \ " " . __ ( " Access key " ) . " \" regExp=' \ w { 40}'
style = \ " width: 20em \" name= \" access_key \" id= \" instance_add_key \"
value = \ " $access_key\ " > " ;
print " <p class='insensitive'> " . __ ( " Use one access key for both linked instances. " );
print " </div> " ;
print " <div class= \" dlgButtons \" >
< div style = 'float : left' >
< button dojoType = \ " dijit.form.Button \"
onclick = \ " return dijit.byId('instanceAddDlg').regenKey() \" > " .
__ ( 'Generate new key' ) . " </button>
</ div >
< button dojoType = \ " dijit.form.Button \"
onclick = \ " return dijit.byId('instanceAddDlg').execute() \" > " .
__ ( 'Create link' ) . " </button>
< button dojoType = \ " dijit.form.Button \"
onclick = \ " return dijit.byId('instanceAddDlg').hide() \" \" > " .
__ ( 'Cancel' ) . " </button></div> " ;
return ;
}
2012-01-29 13:51:00 +00:00
function batchSubscribe () {
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" rpc \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" batchaddfeeds \" > " ;
print " <table width='100%'><tr><td>
" .__( " Add one valid RSS feed per line ( no feed detection is done ) " ). "
</ td >< td align = 'right' > " ;
if ( get_pref ( $this -> link , 'ENABLE_FEED_CATS' )) {
print __ ( 'Place in category:' ) . " " ;
print_feed_cat_select ( $this -> link , " cat " , false , 'dojoType="dijit.form.Select"' );
}
print " </td></tr><tr><td colspan='2'> " ;
print " <textarea
style = 'font-size : 12px; width : 100%; height: 200px;'
placeHolder = \ " " . __ ( " Feeds to subscribe, One per line " ) . " \"
dojoType = \ " dijit.form.SimpleTextarea \" required= \" 1 \" name= \" feeds \" ></textarea> " ;
print " </td></tr><tr><td colspan='2'> " ;
print " <div id='feedDlg_loginContainer' style='display : none'>
" .
" <input dojoType= \" dijit.form.TextBox \" name='login' \"
placeHolder = \ " " . __ ( " Login " ) . " \"
style = \ " width : 10em; \" > " .
" <input
placeHolder = \ " " . __ ( " Password " ) . " \"
dojoType = \ " dijit.form.TextBox \" type='password'
style = \ " width : 10em; \" name='pass' \" > " .
2012-09-13 22:46:50 +00:00
" </div> " ;
2012-01-29 13:51:00 +00:00
print " </td></tr><tr><td colspan='2'> " ;
print " <div style= \" clear : both \" >
< input type = \ " checkbox \" name= \" need_auth \" dojoType= \" dijit.form.CheckBox \" id= \" feedDlg_loginCheck \"
onclick = 'checkboxToggleElement(this, \"feedDlg_loginContainer\")' >
< label for = \ " feedDlg_loginCheck \" > " .
__ ( 'Feeds require authentication.' ) . " </div> " ;
print " </form> " ;
print " </td></tr></table> " ;
print " <div class= \" dlgButtons \" >
< button dojoType = \ " dijit.form.Button \" onclick= \" return dijit.byId('batchSubDlg').execute() \" > " . __ ( 'Subscribe' ) . " </button>
< button dojoType = \ " dijit.form.Button \" onclick= \" return dijit.byId('batchSubDlg').hide() \" > " . __ ( 'Cancel' ) . " </button>
</ div > " ;
}
2011-12-12 20:20:53 +00:00
}
?>