Roundcube Community Forum

 

Select skin plugin

Started by bouba, February 28, 2010, 06:05:23 AM

Previous topic - Next topic

bouba

Hi all, this is the plugin to change the RC skin on login (now i use a GET var in the page to select the skin, like //url?skin=mobile or //url?skin=default). I read this GET var and i set a hidden field in the login html page. Then, in "login_after" i read this hidden field and I select the right skin.

<?php

/**
 * skin Selector on Logon Page
 *
 * Switch skin from Logon Page 
 */

class skin_sel extends rcube_plugin
{

function init(){

$this->add_hook('startup', array($this'switch_skin_before_login'));
$this->add_hook('template_object_skinselect', array($this'select_skin_template'));
$this->add_hook('login_after', array($this'switch_skin_after_login'));

}

function select_skin_template($p){

$content '';

if($_GET["setskin"]=="mobilecube"){
$content .= '<input type="hidden" name="skin_home" value="mobilecube" />';
}else{
$content .= '<input type="hidden" name="skin_home" value="default" />';
}

$p['content'] = $content;

return $p;

}

function switch_skin_before_login($args){

$skin "";
if( $_GET['setskin'] == "mobilecube"){
$skin "mobilecube";
}else{
$skin "default";
}
$rcmail rcmail::get_instance();
$a_prefs $rcmail->user->get_prefs();
$a_prefs['skin'] = $skin;
$rcmail->user->save_prefs($a_prefs);  

$output $rcmail->load_gui(); <-- 
$output->set_skin($skin); <--

return $args;

}

function switch_skin_after_login($args){

$skin "";
if( get_input_value('skin_home'RCUBE_INPUT_POST) == "mobilecube"){
$skin "mobilecube";
}else{
$skin "default";
}
$rcmail rcmail::get_instance();
$a_prefs $rcmail->user->get_prefs();
$a_prefs['skin'] = $skin;
$rcmail->user->save_prefs($a_prefs);   
return $args;

}

}

?>
?>



the problem apper if I try to change the skin on "startup". If i don't change the login page skin, it works ( comment out $this->add_hook('startup', array($this, 'switch_skin_before_login')); ). The problem is:

$output = $rcmail->load_gui(); <--
$output->set_skin($skin); <--

without this 2 lines, the login skin doesn't change and RC load the right skin for the webmail. With this 2 lines, RC use the right skin only if i reload the page (F5).
How can i use this 2 lines to change the login skin and tell RC to use the right skin without reload the page?

thanks
Marco

rosali

Check this:

f.e. ./?skin=groupvice4


<?php
/**
 * remember_skin
 *
 * @version 1.0 - 15.09.2010
 * @author 'rosali'
 * @website http://myroundcube.googlecode.com
 * @licence GNU GPL
 * 
 **/
 
/**
 *
 * Usage: http://mail4us.net/myroundcube/
 *
 * Notice: ./config/main.inc.php
 *
 *         Set skin config to: 
 *
 *         $rcmail_config['skin'] = get_input_value('skin', RCUBE_INPUT_GPC);
 *
 **/    
 
class remember_skin extends rcube_plugin {
  
  function 
init(){
    
$this->add_hook('startup', array($this'startup'));
    
$this->add_hook('login_after', array($this'login_after'));
    
$this->add_hook('preferences_save', array($this'preferences_save'));
  }
  
  function 
startup(){
    if(isset(
$_GET['skin']))
      
rcmail::setcookie('skin',$_GET['skin'],time()+60*60*24*365);  
  }
   
  function 
login_after(){
    
$rcmail rcmail::get_instance();
    
$skin $rcmail->config->get('skin');
    
rcmail::setcookie('skin',$skin,time()+60*60*24*365);   
  }
  
  function 
preferences_save($prefs){
    
rcmail::setcookie('skin',$prefs['skin'],time()+60*60*24*365);
    return 
$prefs;
  }
}
?>
?>

Regards,
Rosali