2011-12-13 06:00:42 +00:00
< ? php
2012-08-17 10:20:55 +00:00
class Pref_Prefs extends Handler_Protected {
2011-12-13 06:00:42 +00:00
2011-12-26 08:02:52 +00:00
function csrf_ignore ( $method ) {
2012-08-23 16:23:19 +00:00
$csrf_ignored = array ( " index " , " updateself " );
2011-12-26 08:02:52 +00:00
return array_search ( $method , $csrf_ignored ) !== false ;
}
2011-12-13 06:00:42 +00:00
function changepassword () {
$old_pw = $_POST [ " old_password " ];
$new_pw = $_POST [ " new_password " ];
$con_pw = $_POST [ " confirm_password " ];
if ( $old_pw == " " ) {
print " ERROR: " . __ ( " Old password cannot be blank. " );
return ;
}
if ( $new_pw == " " ) {
print " ERROR: " . __ ( " New password cannot be blank. " );
return ;
}
if ( $new_pw != $con_pw ) {
print " ERROR: " . __ ( " Entered passwords do not match. " );
return ;
}
2012-12-27 11:14:44 +00:00
global $pluginhost ;
$authenticator = $pluginhost -> get_plugin ( $_SESSION [ " auth_module " ]);
2011-12-13 06:00:42 +00:00
2012-08-16 14:21:35 +00:00
if ( method_exists ( $authenticator , " change_password " )) {
print $authenticator -> change_password ( $_SESSION [ " uid " ], $old_pw , $new_pw );
2012-01-23 08:20:09 +00:00
} else {
2012-08-16 14:21:35 +00:00
print " ERROR: " . __ ( " Function not supported by authentication module. " );
2012-01-23 08:20:09 +00:00
}
2011-12-13 06:00:42 +00:00
}
function saveconfig () {
$_SESSION [ " prefs_cache " ] = false ;
2013-03-19 19:14:23 +00:00
$boolean_prefs = explode ( " , " , $_POST [ " boolean_prefs " ]);
foreach ( $boolean_prefs as $pref ) {
if ( ! isset ( $_POST [ $pref ])) $_POST [ $pref ] = 'false' ;
}
2011-12-13 06:00:42 +00:00
foreach ( array_keys ( $_POST ) as $pref_name ) {
2013-03-22 05:14:55 +00:00
$pref_name = db_escape_string ( $this -> link , $pref_name );
$value = db_escape_string ( $this -> link , $_POST [ $pref_name ]);
2011-12-13 06:00:42 +00:00
2012-01-31 11:52:33 +00:00
if ( $pref_name == 'DIGEST_PREFERRED_TIME' ) {
if ( get_pref ( $this -> link , 'DIGEST_PREFERRED_TIME' ) != $value ) {
db_query ( $this -> link , " UPDATE ttrss_users SET
last_digest_sent = NULL WHERE id = " . $_SESSION['uid'] );
}
}
2011-12-13 06:00:42 +00:00
set_pref ( $this -> link , $pref_name , $value );
}
2013-01-23 11:36:32 +00:00
print __ ( " The configuration was saved. " );
2011-12-13 06:00:42 +00:00
}
function getHelp () {
2013-03-22 05:14:55 +00:00
$pref_name = db_escape_string ( $this -> link , $_REQUEST [ " pn " ]);
2011-12-13 06:00:42 +00:00
$result = db_query ( $this -> link , " SELECT help_text FROM ttrss_prefs
WHERE pref_name = '$pref_name' " );
if ( db_num_rows ( $result ) > 0 ) {
$help_text = db_fetch_result ( $result , 0 , " help_text " );
print $help_text ;
} else {
printf ( __ ( " Unknown option: %s " ), $pref_name );
}
}
function changeemail () {
2013-03-22 05:14:55 +00:00
$email = db_escape_string ( $this -> link , $_POST [ " email " ]);
$full_name = db_escape_string ( $this -> link , $_POST [ " full_name " ]);
2011-12-13 06:00:42 +00:00
$active_uid = $_SESSION [ " uid " ];
db_query ( $this -> link , " UPDATE ttrss_users SET email = ' $email ',
full_name = '$full_name' WHERE id = '$active_uid' " );
print __ ( " Your personal data has been saved. " );
return ;
}
function resetconfig () {
$_SESSION [ " prefs_op_result " ] = " reset-to-defaults " ;
if ( $_SESSION [ " profile " ]) {
$profile_qpart = " profile = ' " . $_SESSION [ " profile " ] . " ' " ;
} else {
$profile_qpart = " profile IS NULL " ;
}
db_query ( $this -> link , " DELETE FROM ttrss_user_prefs
WHERE $profile_qpart AND owner_uid = " . $_SESSION["uid"] );
initialize_user_prefs ( $this -> link , $_SESSION [ " uid " ], $_SESSION [ " profile " ]);
print " PREFS_THEME_CHANGED " ;
}
function index () {
global $access_level_names ;
2013-03-28 16:44:43 +00:00
$prefs_blacklist = array ( " STRIP_UNSAFE_TAGS " , " REVERSE_HEADLINES " );
2013-03-27 08:42:01 +00:00
/* "FEEDS_SORT_BY_UNREAD", "HIDE_READ_FEEDS", "REVERSE_HEADLINES" */
2011-12-13 06:00:42 +00:00
$profile_blacklist = array ( " ALLOW_DUPLICATE_POSTS " , " PURGE_OLD_DAYS " ,
" PURGE_UNREAD_ARTICLES " , " DIGEST_ENABLE " , " DIGEST_CATCHUP " ,
" BLACKLISTED_TAGS " , " ENABLE_API_ACCESS " , " UPDATE_POST_ON_CHECKSUM_CHANGE " ,
" DEFAULT_UPDATE_INTERVAL " , " USER_TIMEZONE " , " SORT_HEADLINES_BY_FEED_DATE " ,
2012-01-30 12:36:21 +00:00
" SSL_CERT_SERIAL " , " DIGEST_PREFERRED_TIME " );
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
$_SESSION [ " prefs_op_result " ] = " " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <div dojoType= \" dijit.layout.AccordionContainer \" region= \" center \" > " ;
print " <div dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'Personal data / Authentication' ) . " \" > " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <form dojoType= \" dijit.form.Form \" id= \" changeUserdataForm \" > " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <script type= \" dojo/method \" event= \" onSubmit \" args= \" evt \" >
evt . preventDefault ();
if ( this . validate ()) {
notify_progress ( 'Saving data...' , true );
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
new Ajax . Request ( 'backend.php' , {
parameters : dojo . objectToQuery ( this . getValues ()),
onComplete : function ( transport ) {
notify_callback2 ( transport );
} });
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
}
</ script > " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <table width= \" 100% \" class= \" prefPrefsList \" > " ;
2011-12-13 06:00:42 +00:00
2012-09-03 14:33:46 +00:00
print " <h2> " . __ ( " Personal data " ) . " </h2> " ;
$result = db_query ( $this -> link , " SELECT email,full_name,otp_enabled,
2012-03-29 10:44:52 +00:00
access_level FROM ttrss_users
WHERE id = " . $_SESSION["uid"] );
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
$email = htmlspecialchars ( db_fetch_result ( $result , 0 , " email " ));
$full_name = htmlspecialchars ( db_fetch_result ( $result , 0 , " full_name " ));
2012-09-03 14:33:46 +00:00
$otp_enabled = sql_bool_to_bool ( db_fetch_result ( $result , 0 , " otp_enabled " ));
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <tr><td width= \" 40% \" > " . __ ( 'Full name' ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" name= \" full_name \" required= \" 1 \"
value = \ " $full_name\ " ></ td ></ tr > " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <tr><td width= \" 40% \" > " . __ ( 'E-mail' ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" name= \" email \" required= \" 1 \" value= \" $email\ " ></ td ></ tr > " ;
2011-12-13 06:00:42 +00:00
2012-08-16 11:30:35 +00:00
if ( ! SINGLE_USER_MODE && ! $_SESSION [ " hide_hello " ]) {
2012-05-16 07:56:21 +00:00
2012-03-29 10:44:52 +00:00
$access_level = db_fetch_result ( $result , 0 , " access_level " );
print " <tr><td width= \" 40% \" > " . __ ( 'Access level' ) . " </td> " ;
print " <td> " . $access_level_names [ $access_level ] . " </td></tr> " ;
}
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " </table> " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" changeemail \" > " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " <p><button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
__ ( " Save data " ) . " </button> " ;
2011-12-13 06:00:42 +00:00
2012-03-29 10:44:52 +00:00
print " </form> " ;
2011-12-13 06:00:42 +00:00
2012-12-27 11:14:44 +00:00
if ( $_SESSION [ " auth_module " ]) {
global $pluginhost ;
$authenticator = $pluginhost -> get_plugin ( $_SESSION [ " auth_module " ]);
2012-08-16 14:21:35 +00:00
} else {
$authenticator = false ;
}
if ( $authenticator && method_exists ( $authenticator , " change_password " )) {
2011-12-13 06:00:42 +00:00
2012-09-03 14:33:46 +00:00
print " <h2> " . __ ( " Password " ) . " </h2> " ;
2011-12-13 06:00:42 +00:00
$result = db_query ( $this -> link , " SELECT id FROM ttrss_users
WHERE id = " . $_SESSION["uid"] . " AND pwd_hash
= 'SHA1:5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8' " );
if ( db_num_rows ( $result ) != 0 ) {
print format_warning ( __ ( " Your password is at default value, please change it. " ), " default_pass_warning " );
}
print " <form dojoType= \" dijit.form.Form \" > " ;
print " <script type= \" dojo/method \" event= \" onSubmit \" args= \" evt \" >
evt . preventDefault ();
if ( this . validate ()) {
notify_progress ( 'Changing password...' , true );
new Ajax . Request ( 'backend.php' , {
parameters : dojo . objectToQuery ( this . getValues ()),
onComplete : function ( transport ) {
notify ( '' );
if ( transport . responseText . indexOf ( 'ERROR: ' ) == 0 ) {
notify_error ( transport . responseText . replace ( 'ERROR: ' , '' ));
} else {
notify_info ( transport . responseText );
var warn = $ ( 'default_pass_warning' );
if ( warn ) Element . hide ( warn );
}
}});
this . reset ();
}
</ script > " ;
2012-09-04 08:39:33 +00:00
if ( $otp_enabled ) {
2013-03-24 16:50:20 +00:00
print_notice ( __ ( " Changing your current password will disable OTP. " ));
2012-09-04 08:39:33 +00:00
}
2011-12-13 06:00:42 +00:00
print " <table width= \" 100% \" class= \" prefPrefsList \" > " ;
print " <tr><td width= \" 40% \" > " . __ ( " Old password " ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" type= \" password \" required= \" 1 \" name= \" old_password \" ></td></tr> " ;
print " <tr><td width= \" 40% \" > " . __ ( " New password " ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" type= \" password \" required= \" 1 \"
name = \ " new_password \" ></td></tr> " ;
print " <tr><td width= \" 40% \" > " . __ ( " Confirm password " ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" type= \" password \" required= \" 1 \" name= \" confirm_password \" ></td></tr> " ;
print " </table> " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" changepassword \" > " ;
print " <p><button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
__ ( " Change password " ) . " </button> " ;
print " </form> " ;
2012-12-27 11:14:44 +00:00
if ( $_SESSION [ " auth_module " ] == " auth_internal " ) {
2012-09-03 14:33:46 +00:00
print " <h2> " . __ ( " One time passwords / Authenticator " ) . " </h2> " ;
if ( $otp_enabled ) {
2013-03-24 16:50:20 +00:00
print_notice ( __ ( " One time passwords are currently enabled. Enter your current password below to disable. " ));
2012-09-04 08:39:33 +00:00
print " <form dojoType= \" dijit.form.Form \" > " ;
print " <script type= \" dojo/method \" event= \" onSubmit \" args= \" evt \" >
evt . preventDefault ();
if ( this . validate ()) {
notify_progress ( 'Disabling OTP' , true );
new Ajax . Request ( 'backend.php' , {
parameters : dojo . objectToQuery ( this . getValues ()),
onComplete : function ( transport ) {
notify ( '' );
if ( transport . responseText . indexOf ( 'ERROR: ' ) == 0 ) {
notify_error ( transport . responseText . replace ( 'ERROR: ' , '' ));
} else {
window . location . reload ();
}
}});
this . reset ();
}
</ script > " ;
print " <table width= \" 100% \" class= \" prefPrefsList \" > " ;
print " <tr><td width= \" 40% \" > " . __ ( " Enter your password " ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" type= \" password \" required= \" 1 \"
name = \ " password \" ></td></tr> " ;
print " </table> " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" otpdisable \" > " ;
print " <p><button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
__ ( " Disable OTP " ) . " </button> " ;
print " </form> " ;
2012-09-03 14:33:46 +00:00
} else {
print " <p> " . __ ( " You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP. " ) . " </p> " ;
print " <p> " . __ ( " Scan the following code by the Authenticator application: " ) . " </p> " ;
$csrf_token = $_SESSION [ " csrf_token " ];
print " <img src= \" backend.php?op=pref-prefs&method=otpqrcode&csrf_token= $csrf_token\ " > " ;
print " <form dojoType= \" dijit.form.Form \" id= \" changeOtpForm \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
2012-09-04 08:39:33 +00:00
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" otpenable \" > " ;
2012-09-03 14:33:46 +00:00
print " <script type= \" dojo/method \" event= \" onSubmit \" args= \" evt \" >
evt . preventDefault ();
if ( this . validate ()) {
notify_progress ( 'Saving data...' , true );
new Ajax . Request ( 'backend.php' , {
parameters : dojo . objectToQuery ( this . getValues ()),
onComplete : function ( transport ) {
2012-09-04 08:39:33 +00:00
notify ( '' );
if ( transport . responseText . indexOf ( 'ERROR: ' ) == 0 ) {
notify_error ( transport . responseText . replace ( 'ERROR: ' , '' ));
} else {
window . location . reload ();
}
2012-09-03 14:33:46 +00:00
} });
}
</ script > " ;
2012-09-04 08:39:33 +00:00
print " <table width= \" 100% \" class= \" prefPrefsList \" > " ;
print " <tr><td width= \" 40% \" > " . __ ( " Enter your password " ) . " </td> " ;
print " <td class= \" prefValue \" ><input dojoType= \" dijit.form.ValidationTextBox \" type= \" password \" required= \" 1 \"
name = \ " password \" ></td></tr> " ;
print " <tr><td colspan= \" 2 \" > " ;
2012-09-03 14:33:46 +00:00
print " <input dojoType= \" dijit.form.CheckBox \" required= \" 1 \"
type = \ " checkbox \" id= \" enable_otp \" name= \" enable_otp \" /> " ;
print " <label for= \" enable_otp \" > " . __ ( " I have scanned the code and would like to enable OTP " ) . " </label> " ;
2012-09-04 08:39:33 +00:00
print " </td></tr><tr><td colspan= \" 2 \" > " ;
print " </td></tr> " ;
print " </table> " ;
2012-09-03 14:33:46 +00:00
print " <p><button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
2012-09-04 08:39:33 +00:00
__ ( " Enable OTP " ) . " </button> " ;
2012-09-03 14:33:46 +00:00
print " </form> " ;
}
}
2011-12-13 06:00:42 +00:00
}
2012-12-26 21:12:28 +00:00
global $pluginhost ;
$pluginhost -> run_hooks ( $pluginhost :: HOOK_PREFS_TAB_SECTION ,
" hook_prefs_tab_section " , " prefPrefsAuth " );
2012-03-29 10:44:52 +00:00
print " </div> " ; #pane
2011-12-13 06:00:42 +00:00
print " <div dojoType= \" dijit.layout.AccordionPane \" selected= \" true \" title= \" " . __ ( 'Preferences' ) . " \" > " ;
print " <form dojoType= \" dijit.form.Form \" id= \" changeSettingsForm \" > " ;
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 ) {
var msg = transport . responseText ;
if ( msg . match ( 'PREFS_THEME_CHANGED' )) {
window . location . reload ();
} else {
notify_info ( msg );
}
} });
}
</ script > " ;
print '<div dojoType="dijit.layout.BorderContainer" gutters="false">' ;
print '<div dojoType="dijit.layout.ContentPane" region="center" style="overflow-y : auto">' ;
if ( $_SESSION [ " profile " ]) {
2013-03-24 16:50:20 +00:00
print_notice ( __ ( " Some preferences are only available in default profile. " ));
2011-12-13 06:00:42 +00:00
}
if ( $_SESSION [ " profile " ]) {
initialize_user_prefs ( $this -> link , $_SESSION [ " uid " ], $_SESSION [ " profile " ]);
$profile_qpart = " profile = ' " . $_SESSION [ " profile " ] . " ' " ;
} else {
initialize_user_prefs ( $this -> link , $_SESSION [ " uid " ]);
$profile_qpart = " profile IS NULL " ;
}
2013-03-27 08:29:51 +00:00
/* if ( $_SESSION [ " prefs_show_advanced " ])
2012-08-30 09:06:58 +00:00
$access_query = " true " ;
else
2013-03-27 08:29:51 +00:00
$access_query = " (access_level = 0 AND section_id != 3) " ; */
$access_query = 'true' ;
2012-08-30 09:06:58 +00:00
2012-06-14 17:04:14 +00:00
$result = db_query ( $this -> link , " SELECT DISTINCT
2011-12-13 06:00:42 +00:00
ttrss_user_prefs . pref_name , short_desc , help_text , value , type_name ,
2012-08-30 09:06:58 +00:00
ttrss_prefs_sections . order_id ,
2011-12-13 06:00:42 +00:00
section_name , def_value , section_id
FROM ttrss_prefs , ttrss_prefs_types , ttrss_prefs_sections , ttrss_user_prefs
WHERE type_id = ttrss_prefs_types . id AND
$profile_qpart AND
section_id = ttrss_prefs_sections . id AND
ttrss_user_prefs . pref_name = ttrss_prefs . pref_name AND
2012-08-30 09:06:58 +00:00
$access_query AND
2011-12-13 06:00:42 +00:00
short_desc != '' AND
owner_uid = " . $_SESSION["uid"] . "
2012-08-30 09:06:58 +00:00
ORDER BY ttrss_prefs_sections . order_id , short_desc " );
2011-12-13 06:00:42 +00:00
$lnum = 0 ;
$active_section = " " ;
2013-03-19 19:14:23 +00:00
$listed_boolean_prefs = array ();
2011-12-13 06:00:42 +00:00
while ( $line = db_fetch_assoc ( $result )) {
if ( in_array ( $line [ " pref_name " ], $prefs_blacklist )) {
continue ;
}
if ( $_SESSION [ " profile " ] && in_array ( $line [ " pref_name " ],
$profile_blacklist )) {
continue ;
}
if ( $active_section != $line [ " section_name " ]) {
if ( $active_section != " " ) {
print " </table> " ;
}
print " <table width= \" 100% \" class= \" prefPrefsList \" > " ;
$active_section = $line [ " section_name " ];
print " <tr><td colspan= \" 3 \" ><h3> " . __ ( $active_section ) . " </h3></td></tr> " ;
$lnum = 0 ;
}
print " <tr> " ;
$type_name = $line [ " type_name " ];
$pref_name = $line [ " pref_name " ];
$value = $line [ " value " ];
$def_value = $line [ " def_value " ];
$help_text = $line [ " help_text " ];
2013-03-19 19:14:23 +00:00
print " <td width= \" 40% \" class= \" prefName \" id= \" $pref_name\ " > " ;
print " <label for='CB_ $pref_name '> " ;
print __ ( $line [ " short_desc " ]);
print " </label> " ;
2011-12-13 06:00:42 +00:00
if ( $help_text ) print " <div class= \" prefHelp \" > " . __ ( $help_text ) . " </div> " ;
print " </td> " ;
print " <td class= \" prefValue \" > " ;
if ( $pref_name == " USER_TIMEZONE " ) {
$timezones = explode ( " \n " , file_get_contents ( " lib/timezones.txt " ));
print_select ( $pref_name , $value , $timezones , 'dojoType="dijit.form.FilteringSelect"' );
} else if ( $pref_name == " USER_STYLESHEET " ) {
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " customizeCSS() \" > " . __ ( 'Customize' ) . " </button> " ;
} else if ( $pref_name == " DEFAULT_ARTICLE_LIMIT " ) {
$limits = array ( 15 , 30 , 45 , 60 );
print_select ( $pref_name , $value , $limits ,
'dojoType="dijit.form.Select"' );
} else if ( $pref_name == " DEFAULT_UPDATE_INTERVAL " ) {
global $update_intervals_nodefault ;
print_select_hash ( $pref_name , $value , $update_intervals_nodefault ,
'dojoType="dijit.form.Select"' );
} else if ( $type_name == " bool " ) {
2013-03-19 19:14:23 +00:00
array_push ( $listed_boolean_prefs , $pref_name );
$checked = ( $value == " true " ) ? " checked= \" checked \" " : " " ;
2011-12-13 06:00:42 +00:00
if ( $pref_name == " PURGE_UNREAD_ARTICLES " && FORCE_ARTICLE_PURGE != 0 ) {
$disabled = " disabled= \" 1 \" " ;
2013-03-19 19:14:23 +00:00
$checked = " checked= \" checked \" " ;
2011-12-13 06:00:42 +00:00
} else {
$disabled = " " ;
}
2013-03-19 19:14:23 +00:00
print " <input type='checkbox' name=' $pref_name ' $checked $disabled
dojoType = 'dijit.form.CheckBox' id = 'CB_$pref_name' value = '1' > " ;
2011-12-13 06:00:42 +00:00
} else if ( array_search ( $pref_name , array ( 'FRESH_ARTICLE_MAX_AGE' , 'DEFAULT_ARTICLE_LIMIT' ,
'PURGE_OLD_DAYS' , 'LONG_DATE_FORMAT' , 'SHORT_DATE_FORMAT' )) !== false ) {
$regexp = ( $type_name == 'integer' ) ? 'regexp="^\d*$"' : '' ;
if ( $pref_name == " PURGE_OLD_DAYS " && FORCE_ARTICLE_PURGE != 0 ) {
$disabled = " disabled= \" 1 \" " ;
$value = FORCE_ARTICLE_PURGE ;
} else {
$disabled = " " ;
}
print " <input dojoType= \" dijit.form.ValidationTextBox \"
required = \ " 1 \" $regexp $disabled
name = \ " $pref_name\ " value = \ " $value\ " > " ;
} else if ( $pref_name == " SSL_CERT_SERIAL " ) {
print " <input dojoType= \" dijit.form.ValidationTextBox \"
id = \ " SSL_CERT_SERIAL \" readonly= \" 1 \"
name = \ " $pref_name\ " value = \ " $value\ " > " ;
$cert_serial = htmlspecialchars ( get_ssl_certificate_id ());
$has_serial = ( $cert_serial ) ? " false " : " true " ;
print " <button dojoType= \" dijit.form.Button \" disabled= \" $has_serial\ "
onclick = \ " insertSSLserial(' $cert_serial ') \" > " .
__ ( 'Register' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \"
onclick = \ " insertSSLserial('') \" > " .
__ ( 'Clear' ) . " </button> " ;
2012-01-31 11:26:16 +00:00
} else if ( $pref_name == 'DIGEST_PREFERRED_TIME' ) {
2012-01-30 12:34:45 +00:00
print " <input dojoType= \" dijit.form.ValidationTextBox \"
2012-01-31 11:53:46 +00:00
id = \ " $pref_name\ " regexp = \ " [012]? \ d: \ d \ d \" placeHolder= \" 12:00 \"
2012-01-30 12:34:45 +00:00
name = \ " $pref_name\ " value = \ " $value\ " >< div class = \ " insensitive \" > " .
2012-01-31 11:56:03 +00:00
T_sprintf ( " Current server time: %s (UTC) " , date ( " H:i " )) . " </div> " ;
2011-12-13 06:00:42 +00:00
} else {
$regexp = ( $type_name == 'integer' ) ? 'regexp="^\d*$"' : '' ;
print " <input dojoType= \" dijit.form.ValidationTextBox \"
$regexp
name = \ " $pref_name\ " value = \ " $value\ " > " ;
}
print " </td> " ;
print " </tr> " ;
$lnum ++ ;
}
print " </table> " ;
2013-03-19 19:14:23 +00:00
$listed_boolean_prefs = htmlspecialchars ( join ( " , " , $listed_boolean_prefs ));
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" boolean_prefs \" value= \" $listed_boolean_prefs\ " > " ;
2012-12-26 21:12:28 +00:00
global $pluginhost ;
$pluginhost -> run_hooks ( $pluginhost :: HOOK_PREFS_TAB_SECTION ,
" hook_prefs_tab_section " , " prefPrefsPrefsInside " );
2011-12-13 06:00:42 +00:00
print '</div>' ; # inside pane
print '<div dojoType="dijit.layout.ContentPane" region="bottom">' ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" saveconfig \" > " ;
print " <button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
__ ( 'Save configuration' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return editProfiles() \" > " .
__ ( 'Manage profiles' ) . " </button> " ;
print " <button dojoType= \" dijit.form.Button \" onclick= \" return validatePrefsReset() \" > " .
__ ( 'Reset to defaults' ) . " </button> " ;
2012-08-30 09:06:58 +00:00
print " " ;
2013-03-27 08:29:51 +00:00
/* $checked = $_SESSION [ " prefs_show_advanced " ] ? " checked='1' " : " " ;
2012-08-30 09:06:58 +00:00
print " <input onclick='toggleAdvancedPrefs()'
id = 'prefs_show_advanced'
dojoType = \ " dijit.form.CheckBox \"
$checked
type = \ " checkbox \" ></input>
< label for = 'prefs_show_advanced' > " .
2013-03-27 08:29:51 +00:00
__ ( " Show additional preferences " ) . " </label> " ; */
2012-08-30 09:06:58 +00:00
2012-12-26 21:12:28 +00:00
global $pluginhost ;
$pluginhost -> run_hooks ( $pluginhost :: HOOK_PREFS_TAB_SECTION ,
" hook_prefs_tab_section " , " prefPrefsPrefsOutside " );
2012-12-24 20:45:10 +00:00
print " </form> " ;
2011-12-13 06:00:42 +00:00
print '</div>' ; # inner pane
print '</div>' ; # border container
2012-12-24 20:45:10 +00:00
print " </div> " ; #pane
print " <div dojoType= \" dijit.layout.AccordionPane \" title= \" " . __ ( 'Plugins' ) . " \" > " ;
print " <h2> " . __ ( " Plugins " ) . " </h2> " ;
2013-03-27 18:03:52 +00:00
print " <p> " . __ ( " You will need to reload Tiny Tiny RSS for plugin changes to take effect. " ) . " </p> " ;
2013-03-27 12:24:43 +00:00
2013-03-27 18:03:52 +00:00
print_notice ( __ ( " Download more plugins at tt-rss.org <a class= \" visibleLink \" target= \" _blank \" href= \" http://tt-rss.org/forum/viewforum.php?f=22 \" >forums</a> or <a target= \" _blank \" class= \" visibleLink \" href= \" http://tt-rss.org/wiki/Plugins \" >wiki</a>. " ));
2012-12-24 20:45:10 +00:00
print " <form dojoType= \" dijit.form.Form \" id= \" changePluginsForm \" > " ;
print " <script type= \" dojo/method \" event= \" onSubmit \" args= \" evt \" >
evt . preventDefault ();
if ( this . validate ()) {
notify_progress ( 'Saving data...' , true );
new Ajax . Request ( 'backend.php' , {
parameters : dojo . objectToQuery ( this . getValues ()),
onComplete : function ( transport ) {
notify ( '' );
if ( confirm ( __ ( 'Selected plugins have been enabled. Reload?' ))) {
window . location . reload ();
}
} });
}
</ script > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" op \" value= \" pref-prefs \" > " ;
print " <input dojoType= \" dijit.form.TextBox \" style= \" display : none \" name= \" method \" value= \" setplugins \" > " ;
2012-12-25 08:31:07 +00:00
print " <table width='100%' class='prefPluginsList'> " ;
2012-12-24 20:45:10 +00:00
print " <tr><td colspan='4'><h3> " . __ ( " System plugins " ) . " </h3></td></tr> " ;
print " <tr class= \" title \" >
< td width = \ " 5% \" > </td>
< td width = '10%' > " .__('Plugin'). " </ td >
< td width = '' > " .__('Description'). " </ td >
< td width = '5%' > " .__('Version'). " </ td >
< td width = '10%' > " .__('Author'). " </ td ></ tr > " ;
$system_enabled = array_map ( " trim " , explode ( " , " , PLUGINS ));
$user_enabled = array_map ( " trim " , explode ( " , " , get_pref ( $this -> link , " _ENABLED_PLUGINS " )));
2012-12-27 15:20:12 +00:00
$tmppluginhost = new PluginHost ( $this -> link );
$tmppluginhost -> load_all ( $tmppluginhost :: KIND_ALL , $_SESSION [ " uid " ]);
$tmppluginhost -> load_data ( true );
2012-12-24 20:45:10 +00:00
foreach ( $tmppluginhost -> get_plugins () as $name => $plugin ) {
2012-12-25 06:02:08 +00:00
$about = $plugin -> about ();
2012-12-24 20:45:10 +00:00
2012-12-25 06:08:49 +00:00
if ( $about [ 3 ] && strpos ( $name , " example " ) === FALSE ) {
2012-12-24 20:45:10 +00:00
if ( in_array ( $name , $system_enabled )) {
$checked = " checked='1' " ;
} else {
$checked = " " ;
}
print " <tr> " ;
print " <td align='center'><input disabled='1'
dojoType = \ " dijit.form.CheckBox \" $checked
type = \ " checkbox \" ></td> " ;
print " <td> $name </td> " ;
2013-03-27 14:16:30 +00:00
print " <td> " . htmlspecialchars ( $about [ 1 ]);
if ( @ $about [ 4 ]) {
print " — <a target= \" _blank \" class= \" visibleLink \"
href = \ " " . htmlspecialchars ( $about [ 4 ]) . " \" > " . __ ( " more info " ) . " </a> " ;
}
print " </td> " ;
2012-12-24 20:45:10 +00:00
print " <td> " . htmlspecialchars ( sprintf ( " %.2f " , $about [ 0 ])) . " </td> " ;
print " <td> " . htmlspecialchars ( $about [ 2 ]) . " </td> " ;
2012-12-27 15:20:12 +00:00
if ( count ( $tmppluginhost -> get_all ( $plugin )) > 0 ) {
2013-02-23 17:27:50 +00:00
if ( in_array ( $name , $system_enabled )) {
print " <td><a href='#' onclick= \" clearPluginData(' $name ') \"
class = 'visibleLink' > " .__( " Clear data " ). " </ a ></ td > " ;
}
2012-12-27 15:20:12 +00:00
}
2012-12-24 20:45:10 +00:00
print " </tr> " ;
}
}
print " <tr><td colspan='4'><h3> " . __ ( " User plugins " ) . " </h3></td></tr> " ;
print " <tr class= \" title \" >
< td width = \ " 5% \" > </td>
< td width = '10%' > " .__('Plugin'). " </ td >
< td width = '' > " .__('Description'). " </ td >
< td width = '5%' > " .__('Version'). " </ td >
< td width = '10%' > " .__('Author'). " </ td ></ tr > " ;
foreach ( $tmppluginhost -> get_plugins () as $name => $plugin ) {
2012-12-25 06:02:08 +00:00
$about = $plugin -> about ();
2012-12-24 20:45:10 +00:00
2012-12-25 06:08:49 +00:00
if ( ! $about [ 3 ] && strpos ( $name , " example " ) === FALSE ) {
2012-12-24 20:45:10 +00:00
if ( in_array ( $name , $system_enabled )) {
$checked = " checked='1' " ;
$disabled = " disabled='1' " ;
2012-12-25 08:31:07 +00:00
$rowclass = '' ;
2012-12-24 20:45:10 +00:00
} else if ( in_array ( $name , $user_enabled )) {
$checked = " checked='1' " ;
$disabled = " " ;
2012-12-25 08:31:07 +00:00
$rowclass = " Selected " ;
2012-12-24 20:45:10 +00:00
} else {
$checked = " " ;
$disabled = " " ;
2012-12-25 08:31:07 +00:00
$rowclass = '' ;
2012-12-24 20:45:10 +00:00
}
2012-12-25 08:31:07 +00:00
print " <tr class=' $rowclass '> " ;
2012-12-24 20:45:10 +00:00
print " <td align='center'><input id='FPCHK- $name ' name='plugins[]' value=' $name ' onclick='toggleSelectRow2(this);'
dojoType = \ " dijit.form.CheckBox \" $checked $disabled
type = \ " checkbox \" ></td> " ;
2012-12-25 08:31:07 +00:00
print " <td><label for='FPCHK- $name '> $name </label></td> " ;
2013-03-27 14:16:30 +00:00
print " <td><label for='FPCHK- $name '> " . htmlspecialchars ( $about [ 1 ]) . " </label> " ;
if ( @ $about [ 4 ]) {
print " — <a target= \" _blank \" class= \" visibleLink \"
href = \ " " . htmlspecialchars ( $about [ 4 ]) . " \" > " . __ ( " more info " ) . " </a> " ;
}
print " </td> " ;
2012-12-24 20:45:10 +00:00
print " <td> " . htmlspecialchars ( sprintf ( " %.2f " , $about [ 0 ])) . " </td> " ;
print " <td> " . htmlspecialchars ( $about [ 2 ]) . " </td> " ;
2012-12-27 15:20:12 +00:00
if ( count ( $tmppluginhost -> get_all ( $plugin )) > 0 ) {
2013-02-23 17:27:50 +00:00
if ( in_array ( $name , $system_enabled ) || in_array ( $name , $user_enabled )) {
print " <td><a href='#' onclick= \" clearPluginData(' $name ') \" class='visibleLink'> " . __ ( " Clear data " ) . " </a></td> " ;
}
2012-12-27 15:20:12 +00:00
}
2012-12-24 20:45:10 +00:00
print " </tr> " ;
}
}
print " </table> " ;
print " <p><button dojoType= \" dijit.form.Button \" type= \" submit \" > " .
__ ( " Enable selected plugins " ) . " </button></p> " ;
2011-12-13 06:00:42 +00:00
print " </form> " ;
print " </div> " ; #pane
2012-08-23 16:23:19 +00:00
2012-12-23 12:15:34 +00:00
global $pluginhost ;
$pluginhost -> run_hooks ( $pluginhost :: HOOK_PREFS_TAB ,
" hook_prefs_tab " , " prefPrefs " );
2011-12-13 06:00:42 +00:00
print " </div> " ; #container
}
2012-08-23 16:23:19 +00:00
2012-08-30 09:06:58 +00:00
function toggleAdvanced () {
$_SESSION [ " prefs_show_advanced " ] = ! $_SESSION [ " prefs_show_advanced " ];
}
2012-09-03 14:33:46 +00:00
function otpqrcode () {
require_once " lib/otphp/vendor/base32.php " ;
require_once " lib/otphp/lib/otp.php " ;
require_once " lib/otphp/lib/totp.php " ;
require_once " lib/phpqrcode/phpqrcode.php " ;
2012-09-03 14:42:17 +00:00
$result = db_query ( $this -> link , " SELECT login,salt,otp_enabled
2012-09-03 14:33:46 +00:00
FROM ttrss_users
WHERE id = " . $_SESSION["uid"] );
$base32 = new Base32 ();
$login = db_fetch_result ( $result , 0 , " login " );
2012-09-03 14:42:17 +00:00
$otp_enabled = sql_bool_to_bool ( db_fetch_result ( $result , 0 , " otp_enabled " ));
2012-09-03 14:33:46 +00:00
2012-09-03 14:42:17 +00:00
if ( ! $otp_enabled ) {
$secret = $base32 -> encode ( sha1 ( db_fetch_result ( $result , 0 , " salt " )));
$topt = new \OTPHP\TOTP ( $secret );
print QRcode :: png ( $topt -> provisioning_uri ( $login ));
}
2012-09-03 14:33:46 +00:00
}
2012-09-04 08:39:33 +00:00
function otpenable () {
2013-03-22 05:14:55 +00:00
$password = db_escape_string ( $this -> link , $_REQUEST [ " password " ]);
2012-09-04 08:39:33 +00:00
$enable_otp = $_REQUEST [ " enable_otp " ] == " on " ;
2012-12-27 11:14:44 +00:00
global $pluginhost ;
$authenticator = $pluginhost -> get_plugin ( $_SESSION [ " auth_module " ]);
2012-09-04 08:39:33 +00:00
if ( $authenticator -> check_password ( $_SESSION [ " uid " ], $password )) {
if ( $enable_otp ) {
db_query ( $this -> link , " UPDATE ttrss_users SET otp_enabled = true WHERE
id = " . $_SESSION["uid"] );
print " OK " ;
}
} else {
print " ERROR: " . __ ( " Incorrect password " );
}
2012-09-03 14:33:46 +00:00
2012-09-04 08:39:33 +00:00
}
function otpdisable () {
2013-03-22 05:14:55 +00:00
$password = db_escape_string ( $this -> link , $_REQUEST [ " password " ]);
2012-09-04 08:39:33 +00:00
2012-12-27 11:14:44 +00:00
global $pluginhost ;
$authenticator = $pluginhost -> get_plugin ( $_SESSION [ " auth_module " ]);
2012-09-04 08:39:33 +00:00
if ( $authenticator -> check_password ( $_SESSION [ " uid " ], $password )) {
db_query ( $this -> link , " UPDATE ttrss_users SET otp_enabled = false WHERE
2012-09-03 14:33:46 +00:00
id = " . $_SESSION["uid"] );
2012-09-04 08:39:33 +00:00
print " OK " ;
} else {
print " ERROR: " . __ ( " Incorrect password " );
2012-09-03 14:33:46 +00:00
}
2012-09-04 08:39:33 +00:00
2012-09-03 14:33:46 +00:00
}
2012-12-24 20:45:10 +00:00
function setplugins () {
2013-02-28 05:13:00 +00:00
if ( is_array ( $_REQUEST [ " plugins " ]))
$plugins = join ( " , " , $_REQUEST [ " plugins " ]);
else
$plugins = " " ;
2012-12-24 20:45:10 +00:00
set_pref ( $this -> link , " _ENABLED_PLUGINS " , $plugins );
}
2012-12-27 15:20:12 +00:00
function clearplugindata () {
2013-03-22 05:14:55 +00:00
$name = db_escape_string ( $this -> link , $_REQUEST [ " name " ]);
2012-12-27 15:20:12 +00:00
global $pluginhost ;
$pluginhost -> clear_data ( $pluginhost -> get_plugin ( $name ));
}
2011-12-13 06:00:42 +00:00
}
?>