English version just for user loged view
New plug in :
- xili-language
- xili-dictionary
- xili-tidy-tags
And theme modification
And widget modification
<?php
/*
Plugin Name: xili-theme-select
Plugin URI: http://dev.xiligroup.com/xilitheme-select/
Description: A plugin for WordPress that automatically redirects your blog's theme for optimized viewing on Apple's <a href="http://www.apple.com/iphone/">iPhone</a> and <a href="http://www.apple.com/ipodtouch/">iPod touch</a>.
Author: MS xiligroup dev
Version: 1.0.1
Author URI: http://dev.xiligroup.com
# inspired initially from iwphone from Robot Content - 2007 - (http://www.contentrobot.com)
# 2008-10 : optimized rewritting with class and optional dashboard settings
# the "iphone / itouch" theme folder must have the same name with an extension ('_4touch') declared in instantiation
# examples of instantiations :
# $wp_ismobile = new xilithemeselector(true); //true if dashboard part
# $wp_ismobile = new xilithemeselector(false); // false w/o dashboard (default extension = '_4touch')
# $wp_ismobile = new xilithemeselector(false,'_yourext'); //- false w/o dashboard and your extension
#
# USE var $wp_ismobile->iphone if necessary in your functions... (see code below at line > 105)
# This plugin is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This plugin is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this plugin; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
define('XILITHEME_VER','1.0.1');
class xilithemeselector{
var $themextend = ""; /*no extension = no touch theme*/
var $iphone = false;
var $currentthemefolder; /*the normal theme used by default*/
var $newfolder;
var $listofdevices = array("iPhone","iPod"); /* if present selector is activated - can be upgraded !*/
var $xitype; /*type of the selected device*/
var $xiversion; /*release of the selected device*/
/**/
var $testnoappledevices = true; /* if true call a function to check no apple devices*/
var $othermobile = false;
var $listnonappledevices = array(array("Opera","_4opera"),array("opera mini","_4touch"),array("Windows CE","_4touch"),array("Blackberry",""),array("Android","_4touch"));
var $othermobiletype = ""; /* filled when $othermobile == true */
/**/
var $cookienable = 0; /*disable by default see after instantiation*/
var $mode = 'mobilebrowser'; /*as usual*/
function xilithemeselector($dashboard = true, $extend = "_4touch"){
if ($extend != "" && $dashboard == false) $this->themextend = $extend;
add_action('plugins_loaded',array(&$this,'detectiPhone'));
add_filter('stylesheet',array(&$this,'get_stylesheet'));
add_filter('template',array(&$this,'get_template'));
//add_filter('template_directory', array(&$this,'change_template_path')); // add for pages (template)
/*admin part - if not : use extension only */
if ($dashboard == true) :
add_action('admin_menu', array(&$this, 'add_admin_pages'));
add_action('init', array(&$this, 'init_textdomain'));
add_filter('plugin_action_links', array(&$this, 'xilisel_filter_plugin_actions'), 10, 2); /*0.9.3*/
$options = get_option('xilithemeselect_options');
if (!is_array($options))
{
$options['xilithemeextension'] = "_4touch";
$options['isxilithemefullname'] = 'extension';
$options['xilithemefullname'] = "default_4touch";
}
if (!isset($options['xilithemeextension']))
$options['xilithemeextension'] = "_4touch";
if ('' == $options['xilithemefullname'])
$options['xilithemefullname'] = "default_4touch";
foreach ($options as $option_name => $option_value)
$this-> {$option_name} = $option_value;
$this->themextend = $this->xilithemeextension;
$this->isfullname = false;
if ($this->isxilithemefullname == 'full')
$this->isfullname = true;
endif;
}
function init_textdomain () {
load_plugin_textdomain('xilithemeselect', PLUGINDIR.'/'.dirname(plugin_basename(__FILE__)), dirname(plugin_basename(__FILE__)));
}
/**
* Add action link(s) to plugins page
*
* @since 0.9.3
* @author MS
* @copyright Dion Hulse, http://dd32.id.au/wordpress-plugins/?configure-link and scripts@schloebe.de
*/
function xilisel_filter_plugin_actions($links, $file){
static $this_plugin;
if( !$this_plugin ) $this_plugin = plugin_basename(__FILE__);
if( $file == $this_plugin ){
$settings_link = '<a href="options-general.php?page=xilithemeselect">' . __('Settings') . '</a>';
$links = array_merge( array($settings_link), $links); // before other links
}
return $links;
}
function detectiPhone($query){
/* prepare target theme folders according options and test them */
$this->currentthemefolder = str_replace(get_theme_root()."/","",get_template_directory());
if($this->isfullname) :
/*test if theme with fullname exist*/
$curpath = get_theme_root()."/".$this->xilithemefullname;
if (file_exists($curpath)) :
$this->newfolder = $this->xilithemefullname;
else :
//echo "CAUTION: THE ".$this->xilithemefullname." THEME FOLDER IS NOT PRESENT";
$this->newfolder = $this->currentthemefolder; /*display the theme for current browsers*/
endif;
else :
/*test if theme with extension exist*/
$curpath = get_theme_root()."/".$this->currentthemefolder.$this->themextend;
if (file_exists($curpath)) :
$this->newfolder = $this->currentthemefolder.$this->themextend;
else :
//echo "CAUTION: THE ".$this->currentthemefolder." THEME FOLDER WITH EXTENSION ".$this->themextend." IS NOT PRESENT";
$this->newfolder = $this->currentthemefolder; /*display the theme for current browsers*/
endif;
endif;
/* analyse type of browsers */
$container = $_SERVER['HTTP_USER_AGENT'];
//print_r($container); //this prints out the user agent array. uncomment to see it shown on page.
$userdevices = $this->listofdevices;
foreach ( $userdevices as $userdevice ) {
if (eregi($userdevice,$container)){
$this->iphone = true;
$this->xitype = $userdevice;
/* version for future uses - like 3D css 2.1 in theme*/
$this->xiversion = preg_replace('#((.+)(Version/)(.+) M(.+))#i','$4' ,$container);
//print_r(preg_grep("#i#",array('a'=>'opo','b'=>'uiop')));
//echo " ---";
break;
}
}
if ($this->testnoappledevices == true && $this->iphone == false) {
$this->checknoappledevices();
}
}
function checknoappledevices() {
$container = $_SERVER['HTTP_USER_AGENT'];
$userdevices = $this->listnonappledevices;
foreach ( $userdevices as $userdevice ) {
if (ereg($userdevice[0],$container)){
$this->othermobile = true;
$this->othermobiletype = $userdevice[0];
$this->otherthemextend = $userdevice[1];
$curpath = get_theme_root()."/".$this->currentthemefolder.$this->otherthemextend;
if (file_exists($curpath)) {
$this->newfolder = $this->currentthemefolder.$this->otherthemextend;
} else {
echo "<br />CAUTION: THE ".$this->currentthemefolder." THEME FOLDER WITH EXTENSION ".$this->otherthemextend." IS NOT PRESENT";
$this->newfolder = $this->currentthemefolder; /*display the theme for current browsers*/
}
break;
}
}
}
/* theme's selection according mobile */
function get_stylesheet($stylesheet) {
if($this->iphone && $this->mode=='mobilebrowser'){
return $this->newfolder;
} elseif ($this->othermobile){
return $this->newfolder;
} else {
return $stylesheet;
}
}
function get_template($template) {
if($this->cookienable == 1) $this->set_xilitheme_cookie();
if($this->iphone && $this->mode=='mobilebrowser'){
return $this->newfolder;
} elseif ($this->othermobile){
return $this->newfolder;
} else {
return $template;
}
}
function change_template_path($template_dir) {
if($this->iphone && $this->mode=='mobilebrowser'){
//because use TEMPLATEPATH absolute so find page.php or the template page...
// major add on inspired iwphone
$template_dir = get_theme_root() . "/".$this->newfolder;
} elseif ($this->othermobile) {
$template_dir = get_theme_root() . "/".$this->newfolder;
}
//echo "----".$template_dir;
return $template_dir;
}
/* cookie part for theme selection if iphone of ipod */
function set_xilitheme_cookie() {
$expire = time() + 30000000;
if (!empty($_GET["xilitheme"])):
setcookie("xilitheme" . COOKIEHASH,
stripslashes($_GET["xilitheme"]),
$expire,
COOKIEPATH
);
$this->mode = $_GET["xilitheme"];
$refreshinglink = $this->build_thelink();
if (function_exists('wp_redirect'))
wp_redirect($refreshinglink);
else
header("Location: ". $refreshinglink);
exit;/**/
endif;
if ($this->get_xilitheme_cookie()==''):
$this->mode = "mobilebrowser";
else:
$this->mode = $this->get_xilitheme_cookie();
endif;
}
function get_xilitheme_cookie() {
if (!empty($_COOKIE["xilitheme" . COOKIEHASH])) :
return $_COOKIE["xilitheme" . COOKIEHASH];
else:
return '';
endif;
}
function build_thelink($type4refresh=true,$modelink="browser") {
$querystring = "";
/*restore the _GET*/
$permalink = get_option('permalink_structure');
if ( '' != $permalink) :
$q = "?";
$querystring = str_replace(preg_replace('|/[^/]+?$|', '/', $_SERVER['PHP_SELF']),'',$_SERVER['REQUEST_URI']);
if ($type4refresh):
//ignore this ?xilitheme $_GET value
$querystring = preg_replace('#\?xilitheme(.+)browser#isU', '',$querystring );
endif;
else:
$q = "&";
$i=0;
foreach ($_GET as $key => $value) {
if ($key != "xilitheme") { // ignore this particular $_GET value
if ($i == 0) $querystring = "?";
if ($i > 0) $querystring .= "&";
$querystring .= $key."=".$value;
$i++;
}
}
endif;
if ($type4refresh):
return get_option('siteurl').'/'.$querystring;
else:
if ($querystring == "")
return get_option('siteurl').'/?xilitheme='.$modelink;
else
return get_option('siteurl').'/'.$querystring.$q.'xilitheme='.$modelink;
endif;
}
function display_themetype($displayhtml = array('before'=>'<span class="xilithemelink">','after'=>'</span>','bro'=>'browser','mobbro'=>'iTouch')){
/* return the link display in current theme or in mobile theme */
if ($this->iphone == true && $this->cookienable == 1) :
if (($this->get_xilitheme_cookie() == 'browser')) {
$output = stripslashes($displayhtml['before']).'<a href="'
.$this->build_thelink(false,"mobilebrowser").'">'
.stripslashes($displayhtml['mobbro']).'</a>'.stripslashes($displayhtml['after']);
} else {
$output = stripslashes($displayhtml['before']).'<a href="'
.$this->build_thelink(false,"browser").'">'
.stripslashes($displayhtml['bro']).'</a>'.stripslashes($displayhtml['after']);
}
return $output;
endif;
}
/* admin part */
function add_admin_pages()
{
add_options_page('Xilitheme select', 'Xilitheme select', 8, 'xilithemeselect', array(&$this, 'option_page'));
}
function option_page()
{
if ( isset($_POST['submitted']) ) {
$options = array();
$options['xilithemeextension'] = $_POST['xilithemeextension'];
$options['isxilithemefullname'] = $_POST['isxilithemefullname'];
$options['xilithemefullname'] = $_POST['xilithemefullname'];
update_option('xilithemeselect_options', $options);
foreach ($options as $option_name => $option_value)
$this-> {$option_name} = $option_value;
echo '<div id="message" class="updated fade"><p>'.__("Plugin<strong> xilithemeselect</strong> settings saved.","xilithemeselect").'</p></div>';
}
?>
<div class='wrap'>
<h2><?php _e("Xilitheme select settings","xilithemeselect"); ?></h2>
<p><cite><a href='http://www.xiliphone.mobi' target='_blank'>Xilitheme select</a></cite> <?php _e("provides an automatic selection of the theme for iphone's user when visiting your site.<br />Don't forget to upload a specific theme for ipod touch / iphone with a right folder's name in the wp-content/themes folder.<br /> If an error occur, the current theme is displayed in ipod touch / iphone browser.","xilithemeselect"); ?></p>
<p><?php _e("the current theme is","xilithemeselect"); echo ": <em>".$this->currentthemefolder ?>. </em><strong><br />
<?php _e("itouch theme's folder","xilithemeselect"); echo ": <em>".$this->currentthemefolder.$this->xilithemeextension."</em> ";
$curpath = get_theme_root()."/".$this->currentthemefolder.$this->xilithemeextension;
if (file_exists($curpath)) :
_e("is available","xilithemeselect");
else :
_e("is NOT available","xilithemeselect");
endif;
?>, </strong>
<br /><strong>
<?php _e("itouch theme's folder","xilithemeselect"); echo ": <em>".$this->xilithemefullname."</em> ";
$curpath = get_theme_root()."/".$this->xilithemefullname;
if (file_exists($curpath)) :
_e("is available","xilithemeselect");
else :
_e("is NOT available","xilithemeselect");
endif;
?> </strong>
<br /><?php _e("in the current wp-content/themes folder.","xilithemeselect");?></p>
<form name="xiliphone" action="<?php echo $action_url; ?>" method="post">
<input type="hidden" name="submitted" value="1" />
<fieldset class="options">
<ul>
<li>
<label for="xilithemeextension">
<?php _e("itouch theme's folder extension:","xilithemeselect"); ?>
<input type="text" id="xilithemeextension" name="xilithemeextension"
size="7" maxlength="8"
value="<?php echo $this->xilithemeextension; ?>" />
</label>
</li>
<li>
<label for="isxilithemefullname">
<?php _e("Option: extension or full name:","xilithemeselect"); ?>
<select name="isxilithemefullname">
<option value="full"<?php if ($this->isxilithemefullname == 'full') { ?> selected="selected"<?php } ?> ><?php _e('full name','xilithemeselect'); ?></option>
<option value="extension"<?php if ($this->isxilithemefullname == 'extension') { ?> selected="selected"<?php } ?> ><?php _e('extension','xilithemeselect'); ?></option>
</select>
</label>
</li>
<li>
<label for="xilithemefullname">
<?php _e("itouch theme's folder full name:","xilithemeselect"); ?>
<input type="text" id="xilithemefullname" name="xilithemefullname"
size="20" maxlength="30"
value="<?php echo $this->xilithemefullname; ?>" />
</label>
</li>
</ul>
</fieldset>
<p class="submit"><input type="submit" name="Submit" value="<?php _e('Save Changes'); ?> »" /></p>
</form>
<h4><a href="http://dev.xiligroup.com/xilitheme-select/" title="Plugin page and docs" target="_blank" style="text-decoration:none" ><img style="vertical-align:middle" src="<?php echo WP_PLUGIN_URL.'/'.dirname(plugin_basename(__FILE__)).'/xilitheme-logo-32.gif'; ?>" alt="xilitheme-select logo"/> xilitheme-select</a> - © <a href="http://dev.xiligroup.com" target="_blank" title="<?php _e('Author'); ?>" >xiligroup.com</a>™ - msc 2007-9 - v. <?php echo XILITHEME_VER; ?></h4>
</div>
<?php
}
}
global $wp_ismobile;
$wp_ismobile = new xilithemeselector(true); //true if dashboard part - false w/o dashboard - see doc on top
$wp_ismobile->cookienable = 1; /*0 to disable*/
/**** tag insertable in the theme's footer or elsewhere ****/
/* example 1 (in browser): if (function_exists('the_xilithemelink')) the_xilithemelink('mobbro=<img src="'.get_bloginfo("template_directory").'/images/mobilelink.gif" alt=""/>');
*/
/* example 2 (in mobilebrowser): if (function_exists('the_xilithemelink')) the_xilithemelink('bro=naviguer en mode normal');
*/
function the_xilithemelink($args = ''){
if ( is_array($args) )
$r = &$args;
else
parse_str($args, $r);
$defaults = array('before'=>'<span class="xilithemelink">','after'=>'</span>','bro'=>'browser','mobbro'=>'iTouch');
$r = array_merge($defaults, $r);
global $wp_ismobile;
echo $wp_ismobile->display_themetype($r);
}
?>