vote.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. <?php
  2. defined('IN_PHPCMS') or exit('No permission resources.');
  3. pc_base::load_app_class('admin','admin',0);
  4. class vote extends admin {
  5. private $db2, $db;
  6. function __construct() {
  7. parent::__construct();
  8. $this->M = new_html_special_chars(getcache('vote', 'commons'));
  9. $this->db = pc_base::load_model('vote_subject_model');
  10. $this->db2 = pc_base::load_model('vote_option_model');
  11. }
  12. public function init() {
  13. $page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;
  14. $infos = $this->db->listinfo(array('siteid'=>$this->get_siteid()),'subjectid DESC',$page, '14');
  15. $pages = $this->db->pages;
  16. $big_menu = array('javascript:window.top.art.dialog({id:\'add\',iframe:\'?m=vote&c=vote&a=add\', title:\''.L('vote_add').'\', width:\'700\', height:\'450\'}, function(){var d = window.top.art.dialog({id:\'add\'}).data.iframe;var form = d.document.getElementById(\'dosubmit\');form.click();return false;}, function(){window.top.art.dialog({id:\'add\'}).close()});void(0);', L('vote_add'));
  17. include $this->admin_tpl('vote_list');
  18. }
  19. /*
  20. *判断标题重复和验证
  21. */
  22. public function public_name() {
  23. $subject_title = isset($_GET['subject_title']) && trim($_GET['subject_title']) ? (pc_base::load_config('system', 'charset') == 'gbk' ? iconv('utf-8', 'gbk', trim($_GET['subject_title'])) : trim($_GET['subject_title'])) : exit('0');
  24. $subjectid = isset($_GET['subjectid']) && intval($_GET['subjectid']) ? intval($_GET['subjectid']) : '';
  25. $data = array();
  26. if ($subjectid) {
  27. $data = $this->db->get_one(array('subjectid'=>$subjectid), 'subject');
  28. if (!empty($data) && $data['subject'] == $subject_title) {
  29. exit('1');
  30. }
  31. }
  32. if ($this->db->get_one(array('subject'=>$subject_title), 'subjectid')) {
  33. exit('0');
  34. } else {
  35. exit('1');
  36. }
  37. }
  38. /*
  39. *判断结束时间是否比当前时间小
  40. */
  41. public function checkdate() {
  42. $nowdate = date('Y-m-d',SYS_TIME);
  43. $todate = $_GET['todate'];
  44. if($todate > $nowdate){
  45. exit('1');
  46. }else {
  47. exit('0');
  48. }
  49. }
  50. /**
  51. * 添加投票
  52. */
  53. public function add() {
  54. //读取配置文件
  55. $data = array();
  56. $data = $this->M;
  57. $siteid = $this->get_siteid();//当前站点
  58. if(isset($_POST['dosubmit'])) {
  59. $_POST['subject']['addtime'] = SYS_TIME;
  60. $_POST['subject']['siteid'] = $this->get_siteid();
  61. if(empty($_POST['subject']['subject'])) {
  62. showmessage(L('vote_title_noempty'),'?m=vote&c=vote&a=add');
  63. }
  64. //记录选项条数 optionnumber
  65. $_POST['subject']['optionnumber'] = count($_POST['option']);
  66. $_POST['subject']['template'] = $_POST['vote_subject']['vote_tp_template'];
  67. $post_data = trim_script($_POST);
  68. $subjectid = $this->db->insert($post_data['subject'],true);
  69. if(!$subjectid) return FALSE; //返回投票ID值, 以备下面添加对应选项用,不存在返回错误
  70. //添加选项操作
  71. $this->db2->add_options($post_data['option'],$subjectid,$this->get_siteid());
  72. //生成JS文件
  73. $this->update_votejs($subjectid);
  74. if(isset($_POST['from_api'])&& $_POST['from_api']) {
  75. showmessage(L('operation_success'),'?m=vote&c=vote&a=add','100', '',"window.top.$('#voteid').val('".$subjectid."');window.top.art.dialog({id:'addvote'}).close();");
  76. } else {
  77. showmessage(L('operation_success'),'?m=vote&c=vote','','add');
  78. }
  79. } else {
  80. $show_validator = $show_scroll = $show_header = true;
  81. pc_base::load_sys_class('form', '', 0);
  82. @extract($data[$siteid]);
  83. //模版
  84. pc_base::load_app_func('global', 'admin');
  85. $siteid = $this->get_siteid();
  86. $template_list = template_list($siteid, 0);
  87. $site = pc_base::load_app_class('sites','admin');
  88. $info = $site->get_by_id($siteid);
  89. foreach ($template_list as $k=>$v) {
  90. $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
  91. unset($template_list[$k]);
  92. }
  93. include $this->admin_tpl('vote_add');
  94. }
  95. }
  96. /**
  97. * 编辑投票
  98. */
  99. public function edit() {
  100. if(isset($_POST['dosubmit'])){
  101. //验证数据正确性
  102. $subjectid = intval($_GET['subjectid']);
  103. if($subjectid < 1) return false;
  104. if(!is_array($_POST['subject']) || empty($_POST['subject'])) return false;
  105. if((!$_POST['subject']['subject']) || empty($_POST['subject']['subject'])) return false;
  106. $post_data = trim_script($_POST);
  107. $this->db2->update_options($post_data['option']);//先更新已有 投票选项,再添加新增加投票选项
  108. if(is_array($_POST['newoption'])&&!empty($_POST['newoption'])){
  109. $siteid = $this->get_siteid();//新加选项站点ID
  110. $this->db2->add_options($post_data['newoption'],$subjectid,$siteid);
  111. }
  112. //模版
  113. $_POST['subject']['template'] = $_POST['vote_subject']['vote_tp_template'];
  114. $_POST['subject']['optionnumber'] = count($_POST['option'])+count($_POST['newoption']);
  115. $this->db->update($post_data['subject'],array('subjectid'=>$subjectid));//更新投票选项总数
  116. $this->update_votejs($subjectid);//生成JS文件
  117. showmessage(L('operation_success'),'?m=vote&c=vote&a=edit','', 'edit');
  118. }else{
  119. $show_validator = $show_scroll = $show_header = true;
  120. pc_base::load_sys_class('form', '', 0);
  121. //解出投票内容
  122. $info = $this->db->get_one(array('subjectid'=>$_GET['subjectid']));
  123. if(!$info) showmessage(L('operation_success'));
  124. extract($info);
  125. //解出投票选项
  126. $this->db2 = pc_base::load_model('vote_option_model');
  127. $options = $this->db2->get_options($_GET['subjectid']);
  128. //模版
  129. pc_base::load_app_func('global', 'admin');
  130. $siteid = $this->get_siteid();
  131. $template_list = template_list($siteid, 0);
  132. $site = pc_base::load_app_class('sites','admin');
  133. $info = $site->get_by_id($siteid);
  134. foreach ($template_list as $k=>$v) {
  135. $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
  136. unset($template_list[$k]);
  137. }
  138. include $this->admin_tpl('vote_edit');
  139. }
  140. }
  141. /**
  142. * 删除投票
  143. * @param intval $sid 投票的ID,递归删除
  144. */
  145. public function delete() {
  146. if((!isset($_GET['subjectid']) || empty($_GET['subjectid'])) && (!isset($_POST['subjectid']) || empty($_POST['subjectid']))) {
  147. showmessage(L('illegal_parameters'), HTTP_REFERER);
  148. } else {
  149. if(is_array($_POST['subjectid'])){
  150. foreach($_POST['subjectid'] as $subjectid_arr) {
  151. //删除对应投票的选项
  152. $this->db2 = pc_base::load_model('vote_option_model');
  153. $this->db2->del_options($subjectid_arr);
  154. $this->db->delete(array('subjectid'=>$subjectid_arr));
  155. }
  156. showmessage(L('operation_success'),'?m=vote&c=vote');
  157. }else{
  158. $subjectid = intval($_GET['subjectid']);
  159. if($subjectid < 1) return false;
  160. //删除对应投票的选项
  161. $this->db2 = pc_base::load_model('vote_option_model');
  162. $this->db2->del_options($subjectid);
  163. //删除投票
  164. $this->db->delete(array('subjectid'=>$subjectid));
  165. $result = $this->db->delete(array('subjectid'=>$subjectid));
  166. if($result)
  167. {
  168. showmessage(L('operation_success'),'?m=vote&c=vote');
  169. }else {
  170. showmessage(L("operation_failure"),'?m=vote&c=vote');
  171. }
  172. }
  173. showmessage(L('operation_success'), HTTP_REFERER);
  174. }
  175. }
  176. /**
  177. * 说明:删除对应投票选项
  178. * @param $optionid
  179. */
  180. public function del_option() {
  181. $result = $this->db2->del_option($_GET['optionid']);
  182. if($result) {
  183. echo 1;
  184. } else {
  185. echo 0;
  186. }
  187. }
  188. /**
  189. * 投票模块配置
  190. */
  191. public function setting() {
  192. //读取配置文件
  193. $data = array();
  194. $siteid = $this->get_siteid();//当前站点
  195. //更新模型数据库,重设setting 数据.
  196. $m_db = pc_base::load_model('module_model');
  197. $data = $m_db->select(array('module'=>'vote'));
  198. $setting = string2array($data[0]['setting']);
  199. $now_seting = $setting[$siteid];
  200. if(isset($_POST['dosubmit'])) {
  201. //多站点存储配置文件
  202. $siteid = $this->get_siteid();//当前站点
  203. $setting[$siteid] = $_POST['setting'];
  204. setcache('vote', $setting, 'commons');
  205. //更新模型数据库,重设setting 数据.
  206. $set = array2string($setting);
  207. $m_db->update(array('setting'=>$set), array('module'=>ROUTE_M));
  208. showmessage(L('setting_updates_successful'), '?m=vote&c=vote&a=init');
  209. } else {
  210. @extract($now_seting);
  211. pc_base::load_sys_class('form', '', 0);
  212. //模版
  213. pc_base::load_app_func('global', 'admin');
  214. $siteid = $this->get_siteid();
  215. $template_list = template_list($siteid, 0);
  216. $site = pc_base::load_app_class('sites','admin');
  217. $info = $site->get_by_id($siteid);
  218. foreach ($template_list as $k=>$v) {
  219. $template_list[$v['dirname']] = $v['name'] ? $v['name'] : $v['dirname'];
  220. unset($template_list[$k]);
  221. }
  222. include $this->admin_tpl('setting');
  223. }
  224. }
  225. /**
  226. * 检查表单数据
  227. * @param Array $data 表单传递过来的数组
  228. * @return Array 检查后的数组
  229. */
  230. private function check($data = array()) {
  231. if($data['name'] == '') showmessage(L('name_plates_not_empty'));
  232. if(!isset($data['width']) || $data['width']==0) {
  233. showmessage(L('plate_width_not_empty'), HTTP_REFERER);
  234. } else {
  235. $data['width'] = intval($data['width']);
  236. }
  237. if(!isset($data['height']) || $data['height']==0) {
  238. showmessage(L('plate_height_not_empty'), HTTP_REFERER);
  239. } else {
  240. $data['height'] = intval($data['height']);
  241. }
  242. return $data;
  243. }
  244. /**
  245. * 投票结果统计
  246. */
  247. public function statistics() {
  248. $subjectid = intval($_GET['subjectid']);
  249. if(!$subjectid){
  250. showmessage(L('illegal_operation'));
  251. }
  252. $show_validator = $show_scroll = $show_header = true;
  253. //获取投票信息
  254. $sdb = pc_base::load_model('vote_data_model'); //加载投票统计的数据模型
  255. $infos = $sdb->select("subjectid = $subjectid",'data');
  256. //新建一数组用来存新组合数据
  257. $total = 0;
  258. $vote_data =array();
  259. $vote_data['total'] = 0 ;//所有投票选项总数
  260. $vote_data['votes'] = 0 ;//投票人数
  261. //循环每个会员的投票记录
  262. foreach($infos as $subjectid_arr) {
  263. extract($subjectid_arr);
  264. $arr = string2array($data);
  265. foreach($arr as $key => $values){
  266. $vote_data[$key]+=1;
  267. }
  268. $total += array_sum($arr);
  269. $vote_data['votes']++ ;
  270. }
  271. $vote_data['total'] = $total ;
  272. //取投票选项
  273. $options = $this->db2->get_options($subjectid);
  274. include $this->admin_tpl('vote_statistics');
  275. }
  276. /**
  277. * 投票会员统计
  278. */
  279. public function statistics_userlist() {
  280. $subjectid = $_GET['subjectid'];
  281. if(empty($subjectid)) return false;
  282. $show_validator = $show_scroll = $show_header = true;
  283. $where = array ("subjectid" => $subjectid);
  284. $sdb = pc_base::load_model('vote_data_model'); //调用统计的数据模型
  285. $page = isset($_GET['page']) && intval($_GET['page']) ? intval($_GET['page']) : 1;
  286. $infos = $sdb->listinfo($where,'time DESC',$page,'7');
  287. $pages = $sdb->pages;
  288. include $this->admin_tpl('vote_statistics_userlist');
  289. }
  290. /**
  291. * 说明:生成JS投票代码
  292. * @param $subjectid 投票ID
  293. */
  294. function update_votejs($subjectid){
  295. if(!isset($subjectid)||intval($subjectid) < 1) return false;
  296. //解出投票内容
  297. $info = $this->db->get_subject($subjectid);
  298. if(!$info) showmessage(L('not_vote'));
  299. extract($info);
  300. //解出投票选项
  301. $options = $this->db2->get_options($subjectid);
  302. ob_start();
  303. include template('vote', $template);
  304. $voteform = ob_get_contents();
  305. ob_clean() ;
  306. @file_put_contents(CACHE_PATH.'vote_js/vote_'.$subjectid.'.js', $this->format_js($voteform));
  307. }
  308. /**
  309. * 更新js
  310. */
  311. public function create_js() {
  312. $infos = $this->db->select(array('siteid'=>$this->get_siteid()), '*');
  313. if(is_array($infos)){
  314. foreach($infos as $subjectid_arr) {
  315. $this->update_votejs($subjectid_arr['subjectid']);
  316. }
  317. }
  318. showmessage(L('operation_success'),'?m=vote&c=vote');
  319. }
  320. /**
  321. * 说明:对字符串进行处理
  322. * @param $string 待处理的字符串
  323. * @param $isjs 是否生成JS代码
  324. */
  325. function format_js($string, $isjs = 1){
  326. $string = addslashes(str_replace(array("\r", "\n"), array('', ''), $string));
  327. return $isjs ? 'document.write("'.$string.'");' : $string;
  328. }
  329. /**
  330. * 投票调用代码
  331. *
  332. */
  333. public function public_call() {
  334. $_GET['subjectid'] = intval($_GET['subjectid']);
  335. if(!$_GET['subjectid']) showmessage(L('illegal_action'), HTTP_REFERER, '', 'call');
  336. $r = $this->db->get_one(array('subjectid'=>$_GET['subjectid']));
  337. include $this->admin_tpl('vote_call');
  338. }
  339. /**
  340. * 信息选择投票接口
  341. */
  342. public function public_get_votelist() {
  343. $infos = $this->db->listinfo(array('siteid'=>$this->get_siteid()),'subjectid DESC',$page,'10');
  344. $target = isset($_GET['target']) ? $_GET['target'] : '';
  345. include $this->admin_tpl('get_votelist');
  346. }
  347. }
  348. ?>