wp_blog/wp-content/themes/nuzi/framework/sidebar_generator.php
2020-01-02 23:15:16 +07:00

253 lines
7.9 KiB
PHP

<?php
/*
Plugin Name: Sidebar Generator
Plugin URI: http://www.getson.info
Description: This plugin generates as many sidebars as you need. Then allows you to place them on any page you wish. Version 1.1 now supports themes with multiple sidebars.
Version: 1.1.0
Author: Kyle Getson
Author URI: http://www.kylegetson.com
Copyright (C) 2009 Kyle Robert Getson
*/
/*
Copyright (C) 2009 Kyle Robert Getson, kylegetson.com and getson.info
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 <http://www.gnu.org/licenses/>.
*/
class sidebar_generator {
function sidebar_generator(){
add_action('init',array('sidebar_generator','init'));
add_action('admin_menu',array('sidebar_generator','admin_menu'));
add_action('admin_print_scripts', array('sidebar_generator','admin_print_scripts'));
add_action('wp_ajax_add_sidebar', array('sidebar_generator','add_sidebar') );
add_action('wp_ajax_remove_sidebar', array('sidebar_generator','remove_sidebar') );
}
function init(){
//go through each sidebar and register it
$sidebars = sidebar_generator::get_sidebars();
if(is_array($sidebars)){
foreach($sidebars as $sidebar){
$sidebar_class = sidebar_generator::name_to_class($sidebar);
register_sidebar(array(
'name'=>$sidebar,
'before_widget' => '<aside class="widget '.$sidebar_class.'" id="%1$s">',
'after_widget' => '</aside>',
'before_title' => '<div class="widget-title-container"><h3 class="widget-title">',
'after_title' => '</h3></div>',
));
}
}
}
function admin_print_scripts(){
wp_print_scripts( array( 'sack' ));
?>
<script>
function add_sidebar( sidebar_name )
{
var mysack = new sack("<?php echo site_url(); ?>/wp-admin/admin-ajax.php" );
mysack.execute = 1;
mysack.method = 'POST';
mysack.setVar( "action", "add_sidebar" );
mysack.setVar( "sidebar_name", sidebar_name );
mysack.encVar( "cookie", document.cookie, false );
mysack.onError = function() { alert('Ajax error. Cannot add sidebar' )};
mysack.runAJAX();
return true;
}
function remove_sidebar( sidebar_name,num )
{
var mysack = new sack("<?php echo site_url(); ?>/wp-admin/admin-ajax.php" );
mysack.execute = 1;
mysack.method = 'POST';
mysack.setVar( "action", "remove_sidebar" );
mysack.setVar( "sidebar_name", sidebar_name );
mysack.setVar( "row_number", num );
mysack.encVar( "cookie", document.cookie, false );
mysack.onError = function() { alert('Ajax error. Cannot add sidebar' )};
mysack.runAJAX();
//alert('hi!:::'+sidebar_name);
return true;
}
</script>
<?php
}
function add_sidebar(){
$sidebars = sidebar_generator::get_sidebars();
$name = str_replace(array("\n","\r","\t"),'',$_POST['sidebar_name']);
$id = sidebar_generator::name_to_class($name);
if(isset($sidebars[$id])){
die("alert('Sidebar already exists, please use a different name.')");
}
$sidebars[$id] = $name;
sidebar_generator::update_sidebars($sidebars);
$js = "
var tbl = document.getElementById('sbg_table');
var lastRow = tbl.rows.length;
// if there's no header row in the table, then iteration = lastRow + 1
var iteration = lastRow;
var row = tbl.insertRow(lastRow);
// left cell
var cellLeft = row.insertCell(0);
var textNode = document.createTextNode('$name');
cellLeft.appendChild(textNode);
//middle cell
var cellLeft = row.insertCell(1);
var textNode = document.createTextNode('$id');
cellLeft.appendChild(textNode);
//var cellLeft = row.insertCell(2);
//var textNode = document.createTextNode('[<a href=\'javascript:void(0);\' onclick=\'return remove_sidebar_link($name);\'>Remove</a>]');
//cellLeft.appendChild(textNode)
var cellLeft = row.insertCell(2);
removeLink = document.createElement('a');
linkText = document.createTextNode('remove');
removeLink.setAttribute('onclick', 'remove_sidebar_link(\'$name\')');
removeLink.setAttribute('href', 'javacript:void(0)');
removeLink.appendChild(linkText);
cellLeft.appendChild(removeLink);
";
die( "$js");
}
function remove_sidebar(){
$sidebars = sidebar_generator::get_sidebars();
$name = str_replace(array("\n","\r","\t"),'',$_POST['sidebar_name']);
$id = sidebar_generator::name_to_class($name);
if(!isset($sidebars[$id])){
die("alert('Sidebar does not exist.')");
}
$row_number = $_POST['row_number'];
unset($sidebars[$id]);
sidebar_generator::update_sidebars($sidebars);
$js = "
var tbl = document.getElementById('sbg_table');
tbl.deleteRow($row_number)
";
die($js);
}
function admin_menu(){
add_theme_page('Sidebars', 'Sidebars', 'manage_options', 'multiple_sidebars', array('sidebar_generator','admin_page'));
}
function admin_page(){
?>
<script>
function remove_sidebar_link(name,num){
answer = confirm("Are you sure you want to remove " + name + "?\nThis will remove any widgets you have assigned to this sidebar.");
if(answer){
//alert('AJAX REMOVE');
remove_sidebar(name,num);
}else{
return false;
}
}
function add_sidebar_link(){
var sidebar_name = prompt("Sidebar Name:","");
//alert(sidebar_name);
add_sidebar(sidebar_name);
}
</script>
<div class="wrap">
<h2>Sidebar Generator</h2>
<p>
The sidebar name is for your use only. It will not be visible to any of your visitors.
A CSS class is assigned to each of your sidebar, use this styling to customize the sidebars.
</p>
<br />
<div class="add_sidebar">
<a href="javascript:void(0);" onclick="return add_sidebar_link()" title="Add a sidebar">+ Add Sidebar</a>
</div>
<br />
<table class="widefat page" id="sbg_table" style="width:600px;">
<tr>
<th>Name</th>
<th>CSS class</th>
<th>Remove</th>
</tr>
<?php
$sidebars = sidebar_generator::get_sidebars();
//$sidebars = array('bob','john','mike','asdf');
if(is_array($sidebars) && !empty($sidebars)){
$cnt=0;
foreach($sidebars as $sidebar){
$alt = ($cnt%2 == 0 ? 'alternate' : '');
?>
<tr class="<?php echo $alt?>">
<td><?php echo $sidebar; ?></td>
<td><?php echo sidebar_generator::name_to_class($sidebar); ?></td>
<td><a href="javascript:void(0);" onclick="return remove_sidebar_link('<?php echo $sidebar; ?>',<?php echo $cnt+1; ?>);" title="Remove this sidebar">remove</a></td>
</tr>
<?php
$cnt++;
}
}else{
?>
<tr>
<td colspan="3">No Sidebars defined</td>
</tr>
<?php
}
?>
</table>
</div>
<?php
}
/**
* replaces array of sidebar names
*/
function update_sidebars($sidebar_array){
$sidebars = update_option('sbg_sidebars',$sidebar_array);
}
/**
* gets the generated sidebars
*/
function get_sidebars(){
$sidebars = get_option('sbg_sidebars');
return $sidebars;
}
function name_to_class($name){
$class = str_replace(array(' ',',','.','"',"'",'/',"\\",'+','=',')','(','*','&','^','%','$','#','@','!','~','`','<','>','?','[',']','{','}','|',':',),'',$name);
return $class;
}
}
new sidebar_generator;
?>