📄 preferences.php
字号:
<?phpdefined('WikyBlog') or die("Not an entry point...");if( !isOwner(true,true) ) return false; // personal preferences, no need to let others change themglobal $page,$pageOwner,$dbObject,$lang;wbLang::getFile('specPreferences');$page->displayTitle = $lang['user_preferences']; //'User Preferences';$dbObject->links[$lang['user_preferences']] = '/Special/'.$pageOwner['username'].'/Preferences';$dbObject->links['?'] = 'User_Preferences'; //New class specPreferences{ var $emptyPrefs = array( /*user*/ 'email'=>null, 'timezone'=>null, 'lang'=>null, 'sig'=>null, /*javascript*/ 'ajax'=>null,'nTabs'=>null,'nWin'=>null, /*template*/ 'template'=>null, 'pTemplate'=>null, /*account display*/ 'homeTitle'=>null, 'quickComment'=>null,'share'=>null, /*blog*/ 'isBlog'=>null,'blogT'=>null, 'sBlog'=>null, 'uServices'=>null, /*editing*/ 'textareaY'=>null,'maxHistory'=>null,'fEdits'=>null, ); var $prefTypes = array( /*user*/ 'email'=>'string','timezone'=>'string', 'lang'=>'string', 'sig'=>'string', /*javascript*/ 'ajax'=>'bool2','nTabs'=>'int','nWin'=>'bool', /*template*/ 'template'=>'string','pTemplate'=>'string', /*account display*/ 'homeTitle'=>'string', 'quickComment'=>'bool', 'share'=>'bool', /*Blog*/ 'isBlog'=>'bool','blogT'=>'blogT', 'sBlog'=>'bool','uServices'=>'string', /*editing*/ 'textareaY'=>'int','maxHistory'=>'int','fEdits'=>'fEdits', ); var $values = array(); function specPreferences(){ global $lang,$dbInfo,$dbObject; $this->values['bool']['On'] = $lang['on']; $this->values['bool']['Off'] = $lang['off']; $this->values['bool2']['On'] = $lang['on']; $this->values['bool2']['Partial'] = $lang['partial']; $this->values['bool2']['Off'] = $lang['off']; $this->values['fEdits']['2'] = $lang['workgroup']; $this->values['fEdits']['1'] = $lang['registered']; $this->values['fEdits']['0'] = $lang['anonymous']; $this->values['fEdits']['-2'] = $lang['none']; // blog types $tempObject=null; $this->values['blogT'] = array(); foreach($dbInfo as $space => $info){ if( !isset($info['dbTable']) ){ continue; } $class = wbData::getClass($space,true); if( !$class ){ continue; } $methods = get_class_methods($class); //lower-cased in php4, normal case as of php5 $methods = array_flip($methods); if( isset($methods['abbrevoutput']) || isset($methods['abbrevOutput']) ){ if( isset($lang[$space]) ){ $this->values['blogT'][$space] = $lang[$space]; }else{ $this->values['blogT'][$space] = $space; } } } switch($dbObject->title){ case 'setpreference': $this->setPref($_GET); break; default: $this->prefPage(); break; } } function prefPage(){ global $page,$lang; switch( $page->userCmd ){ case 'save preferences': $this->save($_POST); break; default: $this->displayForm(); break; } } function save($array){ global $pageOwner,$page,$lang,$dbObject; $invalid = array(); //// check timezone if( !empty($array['timezone']) ){ $num = sscanf($array['timezone'], "%d:%d", $hr,$mim); if($num !== 2){ $invalid['timezone'] = true; } } ///// check template if( isset($array['pTemplate']) && ($array['pTemplate'] != '')){ $array['template'] = ''; }elseif( isset($array['template']) ){ $array['template'] = toStorage($array['template']); $temp = whichTemplate($array,false);//will be warned with the form display if( !is_array($temp) ){ $invalid['template'] = false; //idea is that false will prevent another message } } ///// Update Services if( isset($array['sBlog']) && ($array['sBlog'] == 'Off') ){ unset($array['uServices']); } if( isset($array['uServices']) ){ $goodUrls = true; $urls = stringToArray($array['uServices']); foreach($urls as $url){ $url = trim($url); if( empty($url) ){ continue; } $temp = parse_url($url); if( empty($temp['host']) || empty($temp['scheme']) ){ $goodUrls = false; } } if( !$goodUrls ){ message('BAD_UPDATE_SERVICES'); } } //// Max History global $maxHistory; if( !empty($array['maxHistory']) ){ $array['maxHistory'] = (int)$array['maxHistory']; if( isset($maxHistory) && $array['maxHistory'] > $maxHistory){ $array['maxHistory'] = $maxHistory; } } //// lang global $userLanguage; if( isset($array['lang'] )){ $possLangs = $this->getPossible('lang'); if( !isset($possLangs[$array['lang']]) ){ $array['lang'] = $userLanguage; } } //// check against types foreach($array as $key => $value){ if( !array_key_exists($key,$this->prefTypes) ){ unset($array[$key]); continue; } $type = $this->prefTypes[$key]; //this takes care of bool, bool2 if( isset($this->values[$type]) ){ if( !isset($this->values[$type][$value]) ){ unset($array[$key]); } continue; } switch($type){ case 'int': $array[$key] = (int)$array[$key]; break; case 'string': $array[$key] = htmlspecialchars($array[$key]); break; } } //// Valid? if( count($invalid) > 0){ message('INVALID_PREFS'); //message(showArray($invalid)); //after this.. $this->displayForm(); return false; } // // Which Have Changed? // foreach($array as $key => $value){ if( array_key_exists($key,$this->emptyPrefs) ){ if( empty($_SESSION[$key]) && empty($array[$key]) ){ //both empty, no change }else{ if( !isset($_SESSION[$key]) ){ $old[$key] = ''; }elseif( $_SESSION[$key] !== $array[$key] ){ $old[$key] = $_SESSION[$key]; } } if( empty($array[$key]) && ($value !== '0') ){ unset($_SESSION[$key]); }else{ $_SESSION[$key] = $array[$key]; } } } if( isset($_SESSION['template']) ){ unset($_SESSION['pTemplate']); } $array = $array + $this->emptyPrefs; //emptyPrefs won't overwrite values, but will set keys if( empty($old) ){ message('PREFERENCES_UNCHANGED'); }else{ // // Preferences Were Changed // // some values need to be changed in the user's browser.. $evalWhich = array('ajax'=>true,'nTabs'=>true,'nWin'=>true); $evalSet = array(); $_SESSION['wasModified'] = true; echo $lang['PREFS_CHANGED']; echo '<table class="tableRows" cellspacing="0">'; echo '<tr><th>'.$lang['preference'].'</th><th>'.$lang['old_value'].'</th><th>'.$lang['new_value'].'</th>'; $i = 0; $classes[] = ' class="tableRowEven" '; $classes[] = ' class="tableRowOdd" '; foreach($old as $key => $oldValue){ $class = $classes[($i%2)]; echo '<tr'.$class.'><td>'; if( isset($lang[$key]) && is_string($lang[$key]) ){ echo $lang[$key]; }else{ echo toDisplay($key); } echo '</td><td>'; if( isset($lang[$oldValue]) ){ echo $lang[$oldValue]; }else{ echo $oldValue; } echo '</td><td>'; if(isset($lang[$array[$key]]) && is_string($lang[$array[$key]]) ){ echo $lang[$array[$key]]; }else{ echo $array[$key]; } echo '</td></tr>'; if( isset($evalWhich[$key]) ){ $evalSet[$key] = $array[$key]; } $i++; } echo '<tr><td>'; echo wbLinks::local('/Special/'.$pageOwner['username'].'/Preferences?again=true',$lang['user_preferences']); echo '</td></tr>'; echo '</table>'; if( $page->ajaxRequest && count($evalSet) > 0){ $addContent = new content(); $addContent->aa = 'eval'; $addContent->bb = ''; foreach($evalSet as $key=>$value){ $addContent->bb .= $key.'="'.$value.'";'; } $page->contentClasses[] = $addContent; } } } /// Do not use checkboxes! function displayForm(){ global $page,$thisServer,$dbObject,$defaultUser,$pageOwner,$lang,$jsNum,$wbWritable,$wbNow; $page->scripts[] = '/include/'.$jsNum.'/preferences.js'; $page->formAction = '/Special/'.$pageOwner['username'].'/Preferences'; $_SESSION = $_SESSION + $this->emptyPrefs; //emptyPrefs won't overwrite values, but will set keys if( isset($_SESSION['pTemplate']) && ($_SESSION['pTemplate'] != '')){ $template = ''; }else{ $template = whichTemplate($_SESSION,true); } //!!version 1.3.1 if( empty($_SESSION['sBlog']) ){ $_SESSION['sBlog'] = 'Off'; } //!!version 1.3.5 if( empty($_SESSION['nWin']) ){ $_SESSION['nWin'] = 'Off'; } if( empty($_SESSION['sig']) ){ $_SESSION['sig'] = '--[[/'.$_SESSION['username'].'/Home|'.$_SESSION['username'].']]'; } //Go through dbFromDate function to get times //yyyy/mm/dd hh:mm:ss $adjusted = dbFromDate($wbNow,'unix'); $serverTime = date("H:i"); $adjustedTime = date("H:i",$adjusted);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -