Файловый менеджер - Редактировать - /var/www/html/components/com_community/controllers/polls.php
Ðазад
<?php /** * @copyright (C) 2013 iJoomla, Inc. - All rights reserved. * @license GNU General Public License, version 2 (http://www.gnu.org/licenses/gpl-2.0.html) * @author iJoomla.com <webmaster@ijoomla.com> * @url https://www.jomsocial.com/license-agreement * The PHP code portions are distributed under the GPL license. If not otherwise stated, all images, manuals, cascading style sheets, and included JavaScript *are NOT GPL, and are released under the IJOOMLA Proprietary Use License v1.0 * More info at https://www.jomsocial.com/license-agreement */ use Joomla\CMS\Factory; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Language\Text; // no direct access defined('_JEXEC') or die('Restricted access'); class CommunityPollsController extends CommunityBaseController { /** * Call the View object to compose the resulting HTML display * * @param string View function to be called * @param mixed extra data to be passed to the View */ public function renderView($viewfunc, $var = NULL) { $my = CFactory::getUser(); $jinput = Factory::getApplication()->input; $document = Factory::getDocument(); $viewType = $document->getType(); $viewName = $jinput->get('view', $this->getName()); $view = $this->getView($viewName, '', $viewType); echo $view->get($viewfunc, $var); } /** * Displays the default polls view * */ public function display($cacheable = false, $urlparams = false) { $config = CFactory::getConfig(); $my = CFactory::getUser(); if (!$my->authorise('community.view', 'polls.list')) { echo Text::_('COM_COMMUNITY_POLLS_DISABLE'); return; } $this->renderView(__FUNCTION__); } public function edit() { $document = Factory::getDocument(); $viewType = $document->getType(); $jinput = Factory::getApplication()->input; $viewName = $jinput->get('view', $this->getName()); $config = CFactory::getConfig(); $view = $this->getView($viewName, '', $viewType); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $pollId = $jinput->get('pollid', '', 'INT'); $model = $this->getModel('polls'); $my = CFactory::getUser(); $validated = true; $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($pollId); if (empty($poll->id)) { echo CSystemHelper::showErrorPage(); return; } if (!$my->authorise('community.edit', 'polls.' . $pollId, $poll)) { $errorMsg = $my->authoriseErrorMsg(); if ($errorMsg == 'blockUnregister') { return $this->blockUnregister(); } else { echo $errorMsg; } return; } if ($jinput->getMethod() == 'POST') { JSession::checkToken() or jexit(Text::_('COM_COMMUNITY_INVALID_TOKEN')); $data = $jinput->post->getArray(); $poll->bind($data); //CFactory::load( 'libraries' , 'apps' ); $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-polls-forms')); if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { $redirect = CRoute::_('index.php?option=com_community&view=polls&task=edit&pollid=' . $pollId, false); $title = $jinput->post->get('title', '', 'STRING'); $catid = $jinput->post->get('catid', '', 'INT'); $enddate = $jinput->post->get('enddate', '', 'STRING'); $permissions = $jinput->post->get('permissions', '', 'INT'); $multiple = $jinput->post->get('multiple', 0, 'INT'); $pollitems = $jinput->post->get('pollItem', '', 'STRING'); $pollitemIds = $jinput->post->get('pollItemId', '', 'STRING'); if (empty($title)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_EMPTY_NAME_ERROR'), 'error'); } if (empty($catid)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_CATEGORY_NOT_SELECTED'), 'error'); } if (empty($enddate)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_ENDDATE_ERROR'), 'error'); } if (empty($pollitems)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_ITEMS_ERROR'), 'error'); } // end datetime format $data = $this->_formatStartEndDate($data); $poll->enddate = $data['enddate']; $poll->multiple = $multiple; if ($validated) { if ($poll->store()) { foreach ($pollitems as $key => $item) { $pollitem = JTable::getInstance('PollItem', 'CTable'); if (isset($pollitemIds[$key])) { $pollitem->load($pollitemIds[$key]); } else { $pollitem->poll_id = $poll->id; $pollitem->count = 0; } $pollitem->value = $item; $pollitem->store(); } $db = Factory::getDBO(); $query = 'SELECT * FROM ' . $db->quoteName('#__community_activities') . ' ' . 'WHERE ' . $db->quoteName('app') . '=' . $db->Quote('polls') . ' ' . 'AND ' . $db->quoteName('cid') . '=' . $db->Quote($poll->id); $db->setQuery($query); $activityItem = $db->loadObject(); if ($activityItem) { $activity = JTable::getInstance('activity', 'CTable'); $activity->load($activityItem->id); $activity->title = $title; $activity->access = $permissions; $activity->store(); } } // Reupdate the display. $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_UPDATED')); if ($poll->groupid) { $url = CRoute::_('index.php?option=com_community&view=polls&groupid=' . $poll->groupid, false); } else if ($poll->eventid) { $url = CRoute::_('index.php?option=com_community&view=polls&eventid=' . $poll->eventid, false); } else { $url = CRoute::_('index.php?option=com_community&view=polls', false); } $mainframe->redirect($url); return; } } } $this->cacheClean(array(COMMUNITY_CACHE_TAG_POLLS_CAT, COMMUNITY_CACHE_TAG_POLLS)); echo $view->get(__FUNCTION__); } /** * Method to display the create poll form * */ public function create() { $my = CFactory::getUser(); $mainframe = Factory::getApplication(); $jinput = $mainframe->input; $config = CFactory::getConfig(); $pageId = $jinput->request->get('pageid', 0, 'Int'); $groupId = $jinput->request->get('groupid', 0, 'Int'); $eventId = $jinput->request->get('eventid', 0, 'Int'); $isBanned = false; if ($pageId) { $page = JTable::getInstance('Page', 'CTable'); $page->load($pageId); $isBanned = $page->isBanned($my->id); } else if ($groupId) { $group = JTable::getInstance('Group', 'CTable'); $group->load($groupId); $isBanned = $group->isBanned($my->id); } if ($my->authorise('community.add', 'polls') && !$isBanned) { $model = CFactory::getModel('Polls'); if (CLimitsLibrary::exceedDaily('polls')) { $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_LIMIT_REACHED'), 'error'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=polls', false)); } $model = $this->getModel('polls'); $data = new stdClass(); $data->categories = $model->getCategories(); if ($jinput->post->get('action', '', 'STRING') == 'save') { $appsLib = CAppPlugins::getInstance(); $saveSuccess = $appsLib->triggerEvent('onFormSave', array('jsform-polls-forms')); if (empty($saveSuccess) || !in_array(false, $saveSuccess)) { $pollid = $this->save(); if ($pollid !== FALSE) { $mainframe = Factory::getApplication(); $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($pollid); if ($config->get('moderatepollcreation')) { $mainframe->enqueueMessage(Text::sprintf('COM_COMMUNITY_POLLS_MODERATION_MSG', $poll->title), 'message'); $mainframe->redirect(CRoute::_('index.php?option=com_community&view=polls', false)); return; } if ($pageId) { $url = CRoute::_('index.php?option=com_community&view=polls&pageid=' . $pageId, false); } else if ($groupId) { $url = CRoute::_('index.php?option=com_community&view=polls&groupid=' . $groupId, false); } else if ($eventId) { $url = CRoute::_('index.php?option=com_community&view=polls&eventid=' . $eventId, false); } else { $url = CRoute::_('index.php?option=com_community&view=polls', false); } $mainframe->redirect($url); return; } } } } else { $errorMsg = $my->authoriseErrorMsg(); if ($errorMsg == 'blockUnregister') { return $this->blockUnregister(); } else { CSystemHelper::showErrorPage(); } return; } //Clear Cache in front page $this->cacheClean(array(COMMUNITY_CACHE_TAG_GROUPS, COMMUNITY_CACHE_TAG_GROUPS_CAT)); $this->renderView(__FUNCTION__, $data); } public function save() { $mainframe = Factory::getApplication(); $jinput = $mainframe->input; if (CStringHelper::strtoupper($jinput->getMethod()) != 'POST') { $document = Factory::getDocument(); $viewType = $document->getType(); $viewName = $jinput->get('view', $this->getName()); $view = $this->getView($viewName, '', $viewType); $view->addWarning(Text::_('COM_COMMUNITY_PERMISSION_DENIED_WARNING')); return false; } JSession::checkToken() or jexit(Text::_('COM_COMMUNITY_INVALID_TOKEN')); $config = CFactory::getConfig(); $my = CFactory::getUser(); $validated = true; $poll = JTable::getInstance('Poll', 'CTable'); $model = $this->getModel('polls'); $title = $jinput->post->get('title', '', 'STRING'); $catid = $jinput->post->get('catid', '', 'INT'); $enddate = $jinput->post->get('enddate', '', 'STRING'); $permissions = $jinput->post->get('permissions', '', 'INT'); $multiple = $jinput->post->get('multiple', '', 'INT'); $pollitems = $jinput->post->get('pollItem', '', 'STRING'); if (empty($title)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_EMPTY_NAME_ERROR'), 'error'); } if (empty($catid)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_CATEGORY_NOT_SELECTED'), 'error'); } if (empty($enddate)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_ENDDATE_ERROR'), 'error'); } if ($config->get('pollshowampm')) { $endHourType = $jinput->get('endtime-ampm'); $endHour = $endHourType === 'AM' ? $jinput->getInt('endtime-hour', 0) : $jinput->getInt('endtime-hour', 0) + 12; } else { $endHour = $jinput->getInt('endtime-hour', 0); } $endMinute = str_pad($jinput->getInt('endtime-min'), 2, '0', STR_PAD_RIGHT); $end = "$enddate $endHour:$endMinute:00"; $offset = Factory::getConfig()->get('offset'); $zone = new DateTimeZone($offset); $endUTC = Factory::getDate($end, $zone)->toUnix(); if ($endUTC <= time()) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_END_DATETIME_SHOULD_NOT_IN_THE_PAST'), 'error'); } if (empty($pollitems)) { $validated = false; $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_POLLS_ITEMS_ERROR'), 'error'); } if ($validated) { $now = new JDate(); // Bind the post with the table first $poll->title = $title; $poll->catid = $catid; $poll->creator = $my->id; $poll->pageid = $jinput->request->get('pageid', 0, 'Int'); $poll->groupid = $jinput->request->get('groupid', 0, 'Int'); $poll->eventid = $jinput->request->get('eventid', 0, 'Int'); if ($poll->pageid) { $poll->permissions = 0; } else if ($poll->groupid) { $poll->permissions = 0; } else if ($poll->eventid) { $poll->permissions = 0; } else { $poll->permissions = $permissions; } $poll->multiple = $multiple; $poll->created = $now->toSql(); $poll->published = ($config->get('moderatepollcreation') ? 0 : 1); // end datetime format $postData = $jinput->post->getArray(); $postData = $this->_formatStartEndDate($postData); $poll->enddate = $postData['enddate']; if ($poll->store()) { foreach ($pollitems as $item) { $pollitem = JTable::getInstance('PollItem', 'CTable'); $pollitem->poll_id = $poll->id; $pollitem->value = $item; $pollitem->count = 0; $pollitem->store(); } $act = new stdClass(); $act->access = $poll->permissions; $act->cmd = 'poll.create'; $act->actor = $my->id; $act->target = 0; $act->title = $poll->title; $act->content = ''; $act->app = 'polls'; $act->cid = $poll->id; if ($poll->pageid) { $page = JTable::getInstance('Page', 'CTable'); $page->load($poll->pageid); $act->access = 0; $act->pageid = $page->id; $act->page_access = $page->approvals; } else if ($poll->groupid) { $group = JTable::getInstance('Group', 'CTable'); $group->load($poll->groupid); $act->access = 0; $act->groupid = $group->id; $act->group_access = $group->approvals; } else if ($poll->eventid) { $event = JTable::getInstance('Event', 'CTable'); $event->load($poll->eventid); $act->access = 0; $act->eventid = $event->id; $act->group_access = $event->permission; } // Allow comments $act->comment_type = 'polls.create'; $act->like_type = 'polls.create'; $act->comment_id = CActivities::COMMENT_SELF; $act->like_id = CActivities::LIKE_SELF; $params = new CParameter(''); $params->set('action', 'poll.create'); $params->set('poll_url', 'index.php?option=com_community&view=polls'); $params->set('category_url', 'index.php?option=com_community&view=polls&categoryid=' . $poll->catid); // Add activity logging CActivityStream::add($act, $params->toString()); if ($config->get('moderatepollcreation')) { $db = Factory::getDbo(); $query = "UPDATE ".$db->quoteName('#__community_activities') ." SET ".$db->quoteName('archived')."=".$db->quote(1) ." WHERE ".$db->quoteName('cid')."=".$db->quote($poll->id) ." AND ".$db->quoteName('app')."=".$db->quote('polls'); $db->setQuery($query); $db->execute(); } } // if need approval should send email notification to admin if ($config->get('moderatepollcreation')) { $title_email = Text::_('COM_COMMUNITY_EMAIL_NEW_POLL_NEED_APPROVAL_TITLE'); $message_email = Text::sprintf('COM_COMMUNITY_EMAIL_NEW_POLL_NEED_APPROVAL_MESSAGE', $my->getDisplayName(), $poll->title); $from = $mainframe->get('mailfrom'); $to = $config->get('notifyMaxReport'); CNotificationLibrary::add('polls_create', $from, $to, $title_email, $message_email, '', ''); } //add user points CUserPoints::assignPoint('poll.create'); $validated = $poll->id; } return $validated; } public function ajaxCreate($postData, $title, $objResponse) { $objResponse = new JAXResponse(); $filter = InputFilter::getInstance(); $postData = $filter->clean($postData, 'array'); $config = CFactory::getConfig(); $my = CFactory::getUser(); if (!JSession::checkToken('post')) { $objResponse->addScriptCall('__throwError', Text::_('COM_COMMUNITY_INVALID_TOKEN')); $objResponse->sendResponse(); } //check for user daily limit first, then check for the total limit if (CFactory::getConfig()->get("limit_polls_perday") <= CFactory::getModel("polls")->getTotalToday($my->id)) { $pollLimit = CFactory::getConfig()->get("limit_polls_perday"); $objResponse->addScriptCall( '__throwError', Text::sprintf('COM_COMMUNITY_POLLS_DAILY_LIMIT', $pollLimit) ); $objResponse->sendResponse(); } else { if (CLimitsHelper::exceededPollCreation($my->id)) { $pollLimit = $config->get('pollcreatelimit'); $objResponse->addScriptCall('__throwError', Text::sprintf('COM_COMMUNITY_POLLS_LIMIT', $pollLimit)); $objResponse->sendResponse(); } } $poll = JTable::getInstance('Poll', 'CTable'); $poll->load(); if (!$my->authorise('community.add', 'polls')) { $objResponse->addScriptCall('__throwError', Text::_('COM_COMMUNITY_ACCESS_FORBIDDEN')); $objResponse->sendResponse(); } $postData['enddate'] = $postData['polltime']['enddate'][0] . ' ' . $postData['polltime']['endtime'][0] . ':00'; if ($postData['element'] == 'pages') { $page = JTable::getInstance('Page', 'CTable'); $page->load($postData['target']); $postData['privacy'] = 0; } else if ($postData['element'] == 'groups') { $group = JTable::getInstance('Group', 'CTable'); $group->load($postData['target']); $postData['privacy'] = 0; } else if ($postData['element'] == 'events') { $event = JTable::getInstance('Event', 'CTable'); $event->load($postData['target']); $postData['privacy'] = 0; } $now = new JDate(); // Bind the post with the table first $poll->title = $title; $poll->catid = $postData['catid']; $poll->creator = $my->id; $poll->permissions = $postData['privacy']; $poll->multiple = $postData['settings']['allow_multiple'] * 1; $poll->created = $now->toSql(); $poll->published = ($config->get('moderatepollcreation') ? 0 : 1); $poll->enddate = $postData['enddate']; if ($postData['element'] == 'pages') { $poll->pageid = $postData['target']; } else { $poll->pageid = 0; } if ($postData['element'] == 'groups') { $poll->groupid = $postData['target']; } else { $poll->groupid = 0; } if ($postData['element'] == 'events') { $poll->eventid = $postData['target']; } else { $poll->eventid = 0; } if ($poll->store()) { foreach ($postData['options'] as $item) { $pollitem = JTable::getInstance('PollItem', 'CTable'); $pollitem->poll_id = $poll->id; $pollitem->value = $item; $pollitem->count = 0; $pollitem->store(); } $act = new stdClass(); $act->access = $poll->permissions; $act->cmd = 'poll.create'; $act->actor = $my->id; $act->target = 0; $act->title = $poll->title; $act->content = ''; $act->app = 'polls'; $act->cid = $poll->id; if ($postData['element'] == 'pages') { $act->pageid = $postData['target']; } else { $act->pageid = 0; } if ($postData['element'] == 'groups') { $act->groupid = $postData['target']; } else { $act->groupid = 0; } if ($postData['element'] == 'events') { $act->eventid = $postData['target']; } else { $act->eventid = 0; } // Allow comments $act->comment_type = 'polls.create'; $act->like_type = 'polls.create'; $act->comment_id = CActivities::COMMENT_SELF; $act->like_id = CActivities::LIKE_SELF; $params = new CParameter(''); $params->set('action', 'poll.create'); $params->set('poll_url', 'index.php?option=com_community&view=polls'); $params->set('category_url', 'index.php?option=com_community&view=polls&categoryid=' . $poll->catid); // Add activity logging CActivityStream::add($act, $params->toString()); if ($config->get('moderatepollcreation')) { $db = Factory::getDbo(); $query = "UPDATE ".$db->quoteName('#__community_activities') ." SET ".$db->quoteName('archived')."=".$db->quote(1) ." WHERE ".$db->quoteName('cid')."=".$db->quote($poll->id) ." AND ".$db->quoteName('app')."=".$db->quote('polls'); $db->setQuery($query); $db->execute(); } } //Clear Cache in front page $this->cacheClean(array(COMMUNITY_CACHE_TAG_GROUPS, COMMUNITY_CACHE_TAG_GROUPS_CAT)); return $poll; } public function created() { $this->renderView(__FUNCTION__); } public function mypolls() { $jinput = Factory::getApplication()->input; $my = CFactory::getUser(); if (!$my->authorise('community.view', 'polls.my')) { $errorMsg = $my->authoriseErrorMsg(); if ($errorMsg == 'blockUnregister') { return $this->blockUnregister(); } else { echo $errorMsg; } return; } $userid = $jinput->getInt('userid',$my->id); $this->renderView(__FUNCTION__, $userid); } public function search() { $my = CFactory::getUser(); $mainframe = Factory::getApplication(); $config = CFactory::getConfig(); if (!$my->authorise('community.view', 'polls.search')) { $errorMsg = $my->authoriseErrorMsg(); if ($errorMsg == 'blockUnregister') { $mainframe->enqueueMessage(Text::_('COM_COMMUNITY_RESTRICTED_ACCESS'), 'notice'); return $this->blockUnregister(); } else { echo $errorMsg; } return; } $this->renderView(__FUNCTION__); } /* * polls event name * object array */ public function triggerPollEvents($eventName, &$args, $target = null) { CError::assert($args, 'object', 'istype', __FILE__, __LINE__); require_once( COMMUNITY_COM_PATH . '/libraries/apps.php' ); $appsLib = CAppPlugins::getInstance(); $appsLib->loadApplications(); $params = array(); $params[] = $args; if (!is_null($target)) $params[] = $target; $appsLib->triggerEvent($eventName, $params); return true; } private function _formatStartEndDate($postData) { if (isset($postData['endtime-ampm']) && $postData['endtime-ampm'] == 'PM' && $postData['endtime-hour'] != 12) { $postData['endtime-hour'] = $postData['endtime-hour'] + 12; } if (isset($postData['endtime-ampm']) && $postData['endtime-ampm'] == 'AM' && $postData['endtime-hour'] == 12) { $postData['endtime-hour'] = 0; } $postData['enddate'] = $postData['enddate'] . ' ' . $postData['endtime-hour'] . ':' . $postData['endtime-min'] . ':00'; unset($postData['enddatetime']); unset($postData['endtime-hour']); unset($postData['endtime-min']); unset($postData['endtime-ampm']); return $postData; } public function ajaxConfirmDeletePollOption($app, $pollItemId) { $filter = InputFilter::getInstance(); $pollItemId = $filter->clean($pollItemId, 'int'); $pollitem = JTable::getInstance('Pollitem', 'CTable'); $pollitem->load($pollItemId); $json = array( 'title' => Text::_('COM_COMMUNITY_POLL_ITEM_REMOVE'), 'message' => Text::sprintf('COM_COMMUNITY_POLL_ITEM_REMOVE_MESSAGE', $pollitem->value), 'btnYes' => Text::_('COM_COMMUNITY_YES'), 'btnCancel' => Text::_('COM_COMMUNITY_CANCEL_BUTTON') ); die( json_encode($json) ); } public function ajaxDeletePollOption($app, $pollItemId) { $my = CFactory::getUser(); $objResponse = new JAXResponse(); $filter = InputFilter::getInstance(); $pollItemId = $filter->clean($pollItemId, 'int'); $pollitem = JTable::getInstance('Pollitem', 'CTable'); $pollitem->load($pollItemId); $json = array(); $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($pollitem->poll_id); if ($my->authorise('community.edit', 'polls.' . $poll->id, $poll)) { $pollitem->delete(); $json = array( 'success' => true ); } else { $json = array( 'error' => true ); } die( json_encode($json) ); } public function ajaxWarnPollDeletion($app, $pollId) { $filter = InputFilter::getInstance(); $pollId = $filter->clean($pollId, 'int'); $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($pollId); $json = array( 'title' => Text::_('COM_COMMUNITY_POLLS_DELETE_POLL'), 'message' => Text::sprintf('COM_COMMUNITY_POLLS_DELETE_MESSAGE', $poll->title), 'btnYes' => Text::_('COM_COMMUNITY_YES'), 'btnCancel' => Text::_('COM_COMMUNITY_CANCEL_BUTTON') ); die( json_encode($json) ); } public function ajaxDeletePoll($app, $pollId) { $my = CFactory::getUser(); $db = Factory::getDbo(); $filter = InputFilter::getInstance(); $pollId = $filter->clean($pollId, 'int'); $json = array(); $response = new JAXResponse(); $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($pollId); if (!$my->authorise('community.delete', 'polls.' . $pollId, $poll)) { $json['error'] = Text::_('COM_COMMUNITY_POLLS_NOT_ALLOWED_DELETE'); die( json_encode($json) ); } if ($poll->delete()) { $query = "DELETE FROM ".$db->quoteName('#__community_polls_items') ." WHERE ".$db->quoteName('poll_id')."=".$db->quote($pollId); $db->setQuery($query); $db->execute(); $query = "DELETE FROM ".$db->quoteName('#__community_polls_users') ." WHERE ".$db->quoteName('poll_id')."=".$db->quote($pollId); $db->setQuery($query); $db->execute(); $query = "DELETE FROM ".$db->quoteName('#__community_activities') ." WHERE ".$db->quoteName('cid')."=".$db->quote($pollId) ." AND ".$db->quoteName('app')."=".$db->quote('polls'); $db->setQuery($query); $db->execute(); $content = Text::_('COM_COMMUNITY_POLLS_DELETED'); $json['success'] = 1; } else { $content = Text::_('COM_COMMUNITY_POLLS_DELETE_ERROR'); $json['error'] = 1; } $redirect = CRoute::_('index.php?option=com_community&view=polls'); $json['message'] = $content; $json['redirect'] = $redirect; $json['btnDone'] = Text::_('COM_COMMUNITY_DONE_BUTTON'); //Clear Cache for polls $this->cacheClean(array(COMMUNITY_CACHE_TAG_FRONTPAGE, COMMUNITY_CACHE_TAG_POLLS, COMMUNITY_CACHE_TAG_FEATURED, COMMUNITY_CACHE_TAG_POLLS_CAT, COMMUNITY_CACHE_TAG_ACTIVITIES)); die( json_encode($json) ); } public function ajaxPollVote( $poll_id, $option_id, $collapsed, $type) { $db = Factory::getDbo(); $my = CFactory::getUser(); if ($my->id == 0) { exit; } $filter = InputFilter::getInstance(); $poll_id = $filter->clean($poll_id, 'int'); $option_id = $filter->clean($option_id, 'int'); $collapsed = $filter->clean($collapsed, 'int'); $poll = JTable::getInstance('Poll', 'CTable'); $poll->load($poll_id); $poll->expired = $poll->isExpired(); if (!$poll->expired) { $_isVoted = $this->_isVoted($poll_id, $option_id); if ($_isVoted) { $this->_unvote($poll_id, $option_id); } else if($poll->multiple) { $this->_vote($poll_id, $option_id); } else { $this->_vote($poll_id, $option_id); $without = true; $this->_unvote($poll_id, $option_id, $without); } // update vote counter for poll item $pollItem = JTable::getInstance('Pollitem', 'CTable'); $pollItem->load($option_id); $pollItem->updateVoteCounter($poll->id); } $poll->collapsed = $collapsed; $pollHTML = $this->_renderPollContainer( $poll, $type ); $json = array(); $json['success'] = true; $json['html'] = $pollHTML; die(json_encode($json)); } private function _renderPollContainer( $poll, $type ) { $type = explode( '.', $type); $html = array(); if (in_array('stream', $type)) { $tmpl = new CTemplate(); $html['stream'] = $tmpl->set('poll', $poll)->fetch('stream/poll-container'); } if (in_array('module', $type)) { ob_start(); include JModuleHelper::getLayoutPath('mod_community_polls', 'default_item'); $html['module'] = ob_get_clean(); } return $html; } private function _vote($poll_id, $option_id) { $my = CFactory::getUser(); $pollUser = JTable::getInstance('Polluser', 'CTable'); $pollUser->poll_id = $poll_id; $pollUser->poll_itemid = $option_id; $pollUser->user_id = $my->id; $pollUser->state = 1; $pollUser->store(); } private function _unvote($poll_id, $option_id, $without = false) { $my = CFactory::getUser(); $db = Factory::getDbo(); $query = 'DELETE FROM ' . $db->quoteName('#__community_polls_users') . ' WHERE ' . $db->quoteName('poll_id') . '=' . $db->Quote($poll_id); if ($without) { $query .= ' AND ' . $db->quoteName('poll_itemid') . '!=' . $db->Quote($option_id); } else { $query .= ' AND ' . $db->quoteName('poll_itemid') . '=' . $db->Quote($option_id); } $query .= ' AND ' . $db->quoteName('user_id') . '=' . $db->Quote($my->id); $db->setQuery($query); $db->execute(); } private function _isVoted($poll_id, $option_id) { $db = Factory::getDbo(); $my = CFactory::getUser(); $query = 'SELECT COUNT(id) FROM ' . $db->quoteName('#__community_polls_users') . ' WHERE ' . $db->quoteName('poll_id') . '=' . $db->Quote($poll_id) . ' AND ' . $db->quoteName('poll_itemid') . '=' . $db->Quote($option_id) . ' AND ' . $db->quoteName('user_id') . '=' . $db->Quote($my->id); $db->setQuery($query); $result = $db->loadResult(); return (bool) $result; } public function ajaxShowVotedUsers($poll_id, $option_id) { $filter = InputFilter::getInstance(); $poll_id = $filter->clean($poll_id, 'int'); $option_id = $filter->clean($option_id, 'int'); $objResponse = new JAXResponse(); $json = array( 'success' => true, 'title' => Text::_('COM_COMMUNITY_POLLS_VOTED_PEOPLE'), 'html' => $this->_getVotedUsers($objResponse, $poll_id, $option_id) ); die( json_encode( $json ) ); } private function _getVotedUsers($objResponse, $poll_id, $option_id) { $db = Factory::getDbo(); $my = Factory::getUser(); $query = 'SELECT user_id FROM ' . $db->quoteName('#__community_polls_users') . ' WHERE ' . $db->quoteName('poll_id') . '=' . $db->Quote($poll_id) . ' AND ' . $db->quoteName('poll_itemid') . '=' . $db->Quote($option_id); $db->setQuery($query); $result = $db->loadColumn(); $votedHTML = ''; $users = array(); foreach ($result as $id) { $user = CFactory::getUser($id); $users[] = $user; } if (count($users)) { $tmpl = new CTemplate(); $tmpl->set('users', $users); $votedHTML = $tmpl->fetch('ajax.stream.showothers'); } return $votedHTML; } }
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка