This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Plugin Name: WP Translit
Plugin URI: http://blog.urosevic.net/wp-translit/
Description: Transliterate text from Serbian Cyrillic to Latin script in posts and pages.
Author: Aleksandar Urošević
Version: 0.3.5
Author URI: http://urosevic.net
Thanks to:
http://www.emanueleferonato.com/2008/02/15/how-to-create-a-wordpress-widget/
http://lonewolf-online.net/computers/wordpress/create-widgets-control-panels/
http://kimmo.suominen.com/sw/srlatin/
http://us3.php.net/ob_start
*/
add_action("plugins_loaded", "init_wpt");
add_action("translit", "wpt_translit");
add_action('init', 'wpt_textdomain');
function init_wpt()
{
register_sidebar_widget("WP Translit", "wpt_widget");
register_widget_control("WP Translit", "wpt_widget_control");
// define dhr_lang only once, on init;
hdr_lang();
}
function wpt_textdomain()
{
load_plugin_textdomain( 'wpt', PLUGINDIR . '/' . dirname(plugin_basename(__FILE__)) . '/lang' );
}
function wpt_widget_control()
{
// Configuration panel for WP Translit Widget
$options = get_option("widget_wpt");
if (!is_array( $options ))
{
$options = array(
'title' => 'Избор писма',
'style' => 'list',
'float' => 'single,page'
);
}
if ($_POST['wpt-Submit'])
{
$options['title'] = htmlspecialchars($_POST['wpt-wTitle']);
$options['style'] = htmlspecialchars($_POST['wpt-wStyle']);
$wFloat = $_POST["wpt-wFloat"];
if ( is_array( $wFloat ) ) {
foreach ( $wFloat as $wf_page )
{
$tmp .= $wf_page.",";
}
$wFloat = substr($tmp, 0, -1);
}
$options['float'] = $wFloat;
update_option("widget_wpt", $options);
}
// Form generator
$wf_float = explode(",", $options['float']);
?>
/>
/>
/>
/>
/>
/>
/>
'Избор писма',
'style' => 'list',
'float' => 'single,page'
);
}
echo $before_widget;
echo $before_title;
echo $options['title'];
echo $after_title;
// Which wiget style to print out?
if ( $options['style'] == "list" )
{
wpt_widget_list();
} else {
wpt_widget_links();
}
echo $after_widget;
}
// Function to print floating widget
function wpt_widget_float()
{
$options = get_option("widget_wpt");
if (!is_array( $options ))
{
$options = array(
'title' => 'Избор писма',
'style' => 'list',
'float' => 'single,page'
);
}
$fw_out = 0;
// prvo ako treba podelim float u niz
if ( strpos($options['float'], ",") > 1 )
{
$float = explode(",", $options['float']);
foreach ( $float as $tmp )
{
$fw_out = $fw_out + wpt_fwout($tmp);
}
} elseif ( strlen($options['float']) != 0 )
{
$fw_out = wpt_fwout($options['float']);
}
// at end print (ro not) floating widget
if ( $fw_out != 0 )
{
printf ('
%s
', $options['title']);
// Which wiget style to print out?
if ( $options['style'] == "list" )
{
wpt_widget_list();
} else {
wpt_widget_links();
}
echo '
';
}
} // function wpt_widget_float
// Function to test if we need to print floating widget on current page style
function wpt_fwout($page_type)
{
$wpt_fwout = 0;
switch($page_type)
{
case "home":
if (is_home()) $wpt_fwout = 1;
break;
case "single":
if (is_single()) $wpt_fwout = 1;
break;
case "page":
if (is_page()) $wpt_fwout = 1;
break;
case "arch":
if (is_archive()) $wpt_fwout = 1;
break;
case "search":
if (is_search()) $wpt_fwout = 1;
break;
default:
}
return $wpt_fwout;
} // function wpt_fwout($page_type)
function wpt_widget_float_css()
{
print <<
EOF;
}
function wpt_widget_list()
{
if ( isset($_REQUEST['lng']) ) {
$wpt_lang = $_REQUEST['lng'];
} elseif ( isset( $_COOKIE["wpt_lang"] ) ) {
$wpt_lang = $_COOKIE["wpt_lang"];
} else {
$wpt_lang = $GLOBALS['hdr_lang'];
}
switch($wpt_lang) {
case "lat": $lc1 = 'selected="selected"'; break;
default: $cc1 = 'selected="selected"';
}
print <<
EOF;
} // wpt_widget_list()
function wpt_widget_links()
{
if ( isset($_REQUEST['lng']) ) {
$wpt_lang = $_REQUEST['lng'];
} elseif ( isset($_COOKIE["wpt_lang"]) ) {
$wpt_lang = $_COOKIE["wpt_lang"];
} else {
$wpt_lang = $GLOBALS['hdr_lang'];
}
$cc1 = '';
$lc1 = '';
$lc2 = $ac2 = $cc2 = "";
switch($wpt_lang) {
case "lat": $lc1 = ''; $lc2 = ""; break;
default: $cc1 = ''; $cc2 = "";
}
print <<
${cc1}ћирилица${cc2}
${lc1}latinica${lc2}
EOF;
} // wpt_widget_links()
// Function to set language from request headers to cookies
function wpt_set_lang()
{
$lng = "";
$wpt_lang = "";
if ( isset($_REQUEST['lng']) )
{
$wpt_lang = $_REQUEST['lng'];
if ( $wpt_lang == "cir" || $wpt_lang == "lat" )
{
setcookie("wpt_lang", $wpt_lang, strtotime("+3 months"), "/");
}
}
}
class wp_translit
{
function wp_translit()
{
add_action('wp_head', array(&$this,'buffer_start'), 1);
add_action('wp_footer', array(&$this,'buffer_end'), 1);
}
function buffer_start()
{
wpt_widget_float_css();
ob_start( array(&$this,"do_wptranslit") );
wpt_set_lang();
}
function buffer_end()
{
wpt_widget_float();
ob_end_flush();
}
// Function to do replace of text
function do_wptranslit($text)
{
// set default script to 'cir' (put in widget setup?)
$wpt_lang = "cir";
// get language from REQUEST (if 'lng' exists)
if ( isset($_REQUEST['lng']) )
{
$wpt_lang = $_REQUEST['lng'];
}
// if no language in REQUEST, get language from cookies (if cookie 'wpt_lang' exists)
elseif ( isset($_COOKIE['wpt_lang']) )
{
$wpt_lang = $_COOKIE['wpt_lang'];
}
// if no wpt_lang in cookies, get Accept Language from headers
elseif ( $GLOBALS['hdr_lang'] )
{
$wpt_lang = $GLOBALS['hdr_lang'];
}
// Do we even need to do transliteration (wpt_lang is 'lat')?
if ( $wpt_lang == "lat" )
{
$wpt_izlaz = "";
// set source script - Cyrillic
$str_from = array ("Џа", "Џе", "Џи", "Џо", "Џу", "Ња", "Ње", "Њи", "Њо", "Њу", "Ља", "Ље", "Љи", "Љо", "Љу", "а","б","в","г","д","ђ","е","ж","з","и","ј","к","л","љ","м","н","њ","о","п","р","с","т","ћ","у","ф","х","ц","ч","џ","ш","А","Б","В","Г","Д","Ђ","Е","Ж","З","И","Ј","К","Л","Љ","М","Н","Њ","О","П","Р","С","Т","Ћ","У","Ф","Х","Ц","Ч","Џ","Ш","č","Č","ć","Ć","ž","Ž","đ","Đ","š","Š");
// set destination script to UTF-8 Serbian Latin
$str_to = array ("Dža", "Dže", "Dži", "Džo", "Džu", "Nja", "Nje", "Nji", "Njo", "Nju", "Lja", "Lje", "Lji", "Ljo", "Lju", "a","b","v","g","d","đ","e","ž","z","i","j","k","l","lj","m","n","nj","o","p","r","s","t","ć","u","f","h","c","č","dž","š","A","B","V","G","D","Đ","E","Ž","Z","I","J","K","L","Lj","M","N","Nj","O","P","R","S","T","Ć","U","F","H","C","Č","Dž","Š","č","Č","ć","Ć","ž","Ž","đ","Đ","š","Š");
// do simple string replace
return str_replace($str_from, $str_to, $text);
} else {
// if there no need for transliteration, print out unchanged text
return $text;
} // wpt_lang == lat
} // function do_wptranslit()
} // class wp_translit
// Function to get language from Accept Language headers
function hdr_lang() {
// get language from HTTP headers and split it to array
$languages = split(',', $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
$hdr_lang = "";
// check first defined Accept Language
$hlang = $languages[0];
if ( ereg("^(sr|mk|bg|ru)", $hlang) && $hbr == 0 )
{
// for Serbian, Macedonian, Bulgarian and Russian set 'cir'
$hdr_lang = "cir";
} else {
// for all other set to 'lat'
$hdr_lang = "lat";
}
// set global variable
$GLOBALS['hdr_lang'] = $hdr_lang;
}
$_wp_wp_translit =& new wp_translit;
?>