Roundcube Community Forum

Third Party Contributions => API Based Plugins => Topic started by: bouba on February 28, 2010, 06:05:23 AM

Title: Select skin plugin
Post by: bouba on February 28, 2010, 06:05:23 AM
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.


/**
 * 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 .= '';
}else{
$content .= '';
}

$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
Title: Select skin plugin
Post by: rosali on September 16, 2010, 01:13:28 AM
Check this:

f.e. ./?skin=groupvice4


/**
 * 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;
  }
}
?>