1 | <?php
|
---|
2 |
|
---|
3 | //let's make some widgets
|
---|
4 | //Thanks to brainfart for the lesson ;-)
|
---|
5 | //http://brainfart.com.ua/post/lesson-wordpress-multi-widgets/
|
---|
6 |
|
---|
7 | add_action('init', 'pba_register_widgets');
|
---|
8 |
|
---|
9 | function pba_register_widgets() {
|
---|
10 | if(!function_exists('wp_register_sidebar_widget')) return false;
|
---|
11 |
|
---|
12 | $prefix = 'pba_itemtitles'; // $id prefix
|
---|
13 | $name = __('RSS Aggregator');
|
---|
14 | $widget_ops = array('classname' => 'widget_name_multi', 'description' => __('Add item titles of your aggregated feeds to your blog's sidebar'));
|
---|
15 | $control_ops = array('width' => 200, 'height' => 200, 'id_base' => $prefix);
|
---|
16 |
|
---|
17 | $options = get_option('widget_name_multi');
|
---|
18 | if(isset($options[0])) unset($options[0]);
|
---|
19 |
|
---|
20 | if(!empty($options)){
|
---|
21 | foreach(array_keys($options) as $widget_number){
|
---|
22 | wp_register_sidebar_widget($prefix.'-'.$widget_number, $name, 'widget_name_multi', $widget_ops, array( 'number' => $widget_number ));
|
---|
23 | wp_register_widget_control($prefix.'-'.$widget_number, $name, 'widget_name_multi_control', $control_ops, array( 'number' => $widget_number ));
|
---|
24 | }
|
---|
25 | } else{
|
---|
26 | $options = array();
|
---|
27 | $widget_number = 1;
|
---|
28 | wp_register_sidebar_widget($prefix.'-'.$widget_number, $name, 'widget_name_multi', $widget_ops, array( 'number' => $widget_number ));
|
---|
29 | wp_register_widget_control($prefix.'-'.$widget_number, $name, 'widget_name_multi_control', $control_ops, array( 'number' => $widget_number ));
|
---|
30 | }
|
---|
31 | }
|
---|
32 |
|
---|
33 | function widget_name_multi($args) {
|
---|
34 | if(!function_exists('wp_register_sidebar_widget')) return false;
|
---|
35 | $prefix = 'pba_itemtitles'; // $id prefix
|
---|
36 | extract($args);
|
---|
37 | $options = get_option('widget_name_multi');
|
---|
38 |
|
---|
39 | // echo "<br>See the calling arguments for the widget with id " . $widget_id . ":<br>";
|
---|
40 | // print_r($args);
|
---|
41 | // echo "<br>See all the saved options:";
|
---|
42 | // print_r($options);
|
---|
43 |
|
---|
44 | if(preg_match('/'.$prefix.'-([0-9]+)/i', $widget_id, $match)){
|
---|
45 | $widget_number = $match[1];
|
---|
46 | //echo "<br>Fine, this is our widget number " . $widget_number;
|
---|
47 | if(isset($options[$widget_number])){
|
---|
48 | $pba_option_set=$options[$widget_number];
|
---|
49 | // echo "<br>Great, we have an option set, which we can use as input parameter to our stuff: ";
|
---|
50 | //print_r($pba_option_set);
|
---|
51 | echo $before_widget; echo $before_title;
|
---|
52 | if(isset($pba_option_set['title'])) echo $pba_option_set['title'];
|
---|
53 | echo $after_title;
|
---|
54 | if(isset($pba_option_set['pba_outputid'])) {
|
---|
55 | //echo "Output ID: " . $pba_option_set['pba_outputid'];
|
---|
56 | $pba_config['outputid']=$pba_option_set['pba_outputid'];
|
---|
57 | $pba_config['show_sidebarwidget'] = 'Y';
|
---|
58 | $pba_return=@PBA::outputwrapper($pba_config);
|
---|
59 | echo $pba_return["result"];
|
---|
60 | }
|
---|
61 | echo $after_widget;
|
---|
62 | }
|
---|
63 | }
|
---|
64 | }
|
---|
65 |
|
---|
66 | function widget_name_multi_control($args) {
|
---|
67 | if(!function_exists('wp_register_sidebar_widget')) return false;
|
---|
68 |
|
---|
69 | $prefix = 'pba_itemtitles'; // $id prefix
|
---|
70 |
|
---|
71 | $options = get_option('widget_name_multi');
|
---|
72 | if(empty($options)) $options = array();
|
---|
73 | if(isset($options[0])) unset($options[0]);
|
---|
74 |
|
---|
75 | // update options array
|
---|
76 | if(!empty($_POST[$prefix]) && is_array($_POST)){
|
---|
77 | foreach($_POST[$prefix] as $widget_number => $values){
|
---|
78 | if(empty($values) && isset($options[$widget_number])) // user clicked cancel
|
---|
79 | continue;
|
---|
80 |
|
---|
81 | if(!isset($options[$widget_number]) && $args['number'] == -1){
|
---|
82 | $args['number'] = $widget_number;
|
---|
83 | $options['last_number'] = $widget_number;
|
---|
84 | }
|
---|
85 | $options[$widget_number] = $values;
|
---|
86 | }
|
---|
87 |
|
---|
88 | // update number
|
---|
89 | if($args['number'] == -1 && !empty($options['last_number'])){
|
---|
90 | $args['number'] = $options['last_number'];
|
---|
91 | }
|
---|
92 |
|
---|
93 | // clear unused options and update options in DB. return actual options array
|
---|
94 | $options = bf_smart_multiwidget_update($prefix, $options, $_POST[$prefix], $_POST['sidebar'], 'widget_name_multi');
|
---|
95 | }
|
---|
96 |
|
---|
97 | // $number - is dynamic number for multi widget, gived by WP
|
---|
98 | // by default $number = -1 (if no widgets activated). In this case we should use %i% for inputs
|
---|
99 | // to allow WP generate number automatically
|
---|
100 | $number = ($args['number'] == -1)? '%i%' : $args['number'];
|
---|
101 |
|
---|
102 | // now we can output control
|
---|
103 | $opts = @$options[$number];
|
---|
104 |
|
---|
105 | $title = @$opts['title'];
|
---|
106 |
|
---|
107 | echo 'Please enter a name for your widget:<br />';
|
---|
108 | echo '<input type="text" ' .
|
---|
109 | 'name="' . $prefix . '[' . $number . '][title]" ' .
|
---|
110 | 'value="' . $title . '" /><br /><br />';
|
---|
111 |
|
---|
112 | global $bdprss_db;
|
---|
113 | $pba_output_streams=$bdprss_db->get_all_pbaoutputs();
|
---|
114 | if($pba_output_streams) {
|
---|
115 | //print_r($pba_output_streams);
|
---|
116 | echo 'Please select an output stream:<br />';
|
---|
117 | echo '<select name="' . $prefix . '[' . $number . '][pba_outputid]">';
|
---|
118 | $didselect=false;
|
---|
119 | foreach($pba_output_streams as $pbaosnr => $pba_os_object){
|
---|
120 | $selected="";
|
---|
121 | if($pba_os_object->identifier == @$opts['pba_outputid']) {
|
---|
122 | $selected=" selected ";
|
---|
123 | $didselect=true;
|
---|
124 | }
|
---|
125 | if(($pbaosnr + 1) == count($pba_output_streams) && !$didselect) $selected=" selected ";
|
---|
126 | echo '<option value="'.$pba_os_object->identifier.'"'.$selected.' >ID: '.$pba_os_object->identifier.' - '.$pba_os_object->name.' </option>' . "\n";
|
---|
127 | }
|
---|
128 | echo '</select>';
|
---|
129 | }else{
|
---|
130 | echo 'Parteibuch Aggregator could not detect any output format to show in this widget.
|
---|
131 | You need to <a href="edit.php?page=parteibuch-aggregator/bdp-rssadmin.php&action=createpbaoutput">create an output format</a> first.';
|
---|
132 | }
|
---|
133 | }
|
---|
134 |
|
---|
135 | // helper function can be defined in another plugin
|
---|
136 | if(!function_exists('bf_smart_multiwidget_update')){
|
---|
137 | function bf_smart_multiwidget_update($id_prefix, $options, $post, $sidebar, $option_name = ''){
|
---|
138 | global $wp_registered_widgets;
|
---|
139 | static $updated = false;
|
---|
140 |
|
---|
141 | // get active sidebar
|
---|
142 | $sidebars_widgets = wp_get_sidebars_widgets();
|
---|
143 | if ( isset($sidebars_widgets[$sidebar]) )
|
---|
144 | $this_sidebar =& $sidebars_widgets[$sidebar];
|
---|
145 | else
|
---|
146 | $this_sidebar = array();
|
---|
147 |
|
---|
148 | // search unused options
|
---|
149 | foreach ( $this_sidebar as $_widget_id ) {
|
---|
150 | if(preg_match('/'.$id_prefix.'-([0-9]+)/i', $_widget_id, $match)){
|
---|
151 | $widget_number = $match[1];
|
---|
152 |
|
---|
153 | // $_POST['widget-id'] contain current widgets set for current sidebar
|
---|
154 | // $this_sidebar is not updated yet, so we can determine which was deleted
|
---|
155 | if(!in_array($match[0], $_POST['widget-id'])){
|
---|
156 | unset($options[$widget_number]);
|
---|
157 | }
|
---|
158 | }
|
---|
159 | }
|
---|
160 |
|
---|
161 | // update database
|
---|
162 | if(!empty($option_name)){
|
---|
163 | update_option($option_name, $options);
|
---|
164 | $updated = true;
|
---|
165 | }
|
---|
166 |
|
---|
167 | // return updated array
|
---|
168 | return $options;
|
---|
169 | }
|
---|
170 | }
|
---|
171 |
|
---|
172 | ?>
|
---|