Dotclear

source: plugins/pollsFactory/_widgets.php @ 2099

Revision 2099, 5.0 KB checked in by JcDenis, 14 years ago (diff)

pollsFactory 0.1:

  • First lab release
Line 
1<?php
2# -- BEGIN LICENSE BLOCK ----------------------------------
3# This file is part of pollsFactory, a plugin for Dotclear 2.
4#
5# Copyright (c) 2009-2010 JC Denis and contributors
6# jcdenis@gdwd.com
7#
8# Licensed under the GPL version 2.0 license.
9# A copy of this license is available in LICENSE file or at
10# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
11# -- END LICENSE BLOCK ------------------------------------
12
13if (!defined('DC_RC_PATH')){return;}
14
15$core->addBehavior('initWidgets',array('widgetPollsFactory','adminPollsList'));
16$core->addBehavior('initWidgets',array('widgetPollsFactory','adminPollsQuery'));
17$core->addBehavior('initWidgets',array('widgetPollsFactory','adminPollsPost'));
18
19class widgetPollsFactory
20{
21     public static function adminPollsList($w)
22     {
23          global $core;
24
25          $w->create('pollfactlist',
26               __('Polls list'),
27               array('widgetPollsFactory','publicPollsList')
28          );
29          # Title
30          $w->pollfactlist->setting('title',
31               __('Title:'),__('Polls list'),'text'
32          );
33          # Selected entries only
34          $w->pollfactlist->setting('selectedonly',
35               __('Selected entries only'),0,'check'
36          );
37          # Limit
38          $w->pollfactlist->setting('limit',
39               __('Polls limit:'),10,'text'
40          );
41          # Sort type
42          $w->pollfactlist->setting('sortby',
43               __('Order by:'),'poll_strdt','combo',
44               array(
45                    __('Entry date') => 'post_dt',
46                    __('Start date') => 'poll_strdt',
47                    __('End date') => 'poll_enddt'
48               )
49          );
50          # Sort order
51          $w->pollfactlist->setting('sort',
52               __('Sort:'),'desc','combo',
53               array(
54                    __('Ascending') => 'asc',
55                    __('Descending') => 'desc'
56               )
57          );
58          # Period
59          $w->pollfactlist->setting('period',
60               __('Period:'),'desc','combo',
61               array(
62                    __('All') => '-',
63                    __('Ongoing') => 'ongoing',
64                    __('Coming') => 'coming'
65               )
66          );
67          # Home only
68          $w->pollfactlist->setting('homeonly',
69               __('Home page only'),1,'check'
70          );
71     }
72
73     public static function adminPollsPost($w)
74     {
75          global $core;
76
77          $w->create('pollfactpost',
78               __('Poll of an entry'),
79               array('widgetPollsFactory','publicPollsPost')
80          );
81          $w->pollfactpost->setting('title',
82               __('Title:'),__('Poll'),'text'
83          );
84          $w->pollfactpost->setting('usegraph',
85               __('Use graphic results'),0,'check'
86          );
87     }
88
89     public static function adminPollsQuery($w)
90     {
91          global $core;
92
93          $params = array();
94          $params['sql'] = "AND poll_enddt > TIMESTAMP '".date('Y-m-d H:i:s')."' ";
95          $fact = new pollsFactory($core);
96          $rs = $fact->getPolls($params);
97
98          $list = array('-'=>'');
99          if (!$rs->isEmpty()) {
100               while($rs->fetch()) {
101                    $list[$rs->post_title] = $rs->post_id;
102               }
103          }
104
105          $w->create('pollfactquery',
106               __('Polls selection'),
107               array('widgetPollsFactory','publicPollsQuery')
108          );
109          $w->pollfactquery->setting('title',
110               __('Title:'),__('Poll'),'text'
111          );
112          $w->pollfactquery->setting('showposttitle',
113               __('Show title of entry below title of widget'),0,'check'
114          );
115          $w->pollfactquery->setting('post',
116               __('Entry:'),'-','combo',$list
117          );
118          $w->pollfactquery->setting('usegraph',
119               __('Use graphic results'),0,'check'
120          );
121          $w->pollfactquery->setting('homeonly',
122               __('Home page only'),1,'check'
123          );
124     }
125
126     public static function publicPollsList($w)
127     {
128          global $core; 
129
130          if (!$core->blog->settings->pollsFactory_active 
131           || $w->homeonly && $core->url->type != 'default') return;
132
133          $params = array('sql'=>'');
134          # Selected post
135          if ($w->selectedonly) {
136               $params['post_selected'] = 1;
137          }
138          # order
139          $params['order'] = in_array($w->sortby,array('post_dt','poll_strdt','poll_enddt')) ?
140               $w->sortby : 'post_dt ';
141          $params['order'] .= $w->sort == 'asc' ? ' asc' : ' desc';
142          # limit
143          $params['limit'] = abs((integer) $w->limit);
144          # period
145          if ($w->period == 'ongoing') {
146               $params['sql'] .= "AND poll_strdt < TIMESTAMP '".date('Y-m-d H:i:s')."' ";
147               $params['sql'] .= "AND poll_enddt > TIMESTAMP '".date('Y-m-d H:i:s')."' ";
148          }
149          else {
150               $params['sql'] .= "AND poll_strdt > TIMESTAMP '".date('Y-m-d H:i:s')."' ";
151          }
152          # skip content
153          $params['no_content'] = true;
154
155          # Find polls
156          $fact = new pollsFactory($core);
157          $polls = $fact->getPolls($params);
158          if ($polls->isEmpty()) return;
159
160          $res = '';
161          while($polls->fetch())
162          {
163               $res .= '<li><a href="'.$polls->getURL().'">'.html::escapeHTML($polls->post_title).'</a></li>';
164          }
165
166          return 
167          '<div class="pollsfactory poll-widget-query">'.
168          ($w->title ? '<h2>'.$w->title.'</h2>' : '').
169          '<ul>'.$res.'</ul>'.
170          '</div>';
171     }
172
173     public static function publicPollsPost($w)
174     {
175          global $core, $_ctx; 
176
177          # Is enabled
178          if (!$core->blog->settings->pollsFactory_active 
179           || $core->url->type != 'post') return;
180
181          return publicPollsFactoryForm($core,$_ctx->posts->post_id,$w->title,false,$w->usegraph);
182     }
183
184     public static function publicPollsQuery($w)
185     {
186          global $core; 
187
188          if (!$core->blog->settings->pollsFactory_active 
189           || $w->homeonly && $core->url->type != 'default'
190           || '' == $w->post) return;
191
192          return publicPollsFactoryForm($core,$w->post,$w->title,$w->showposttitle,$w->usegraph);
193     }
194}
195?>
Note: See TracBrowser for help on using the repository browser.

Sites map