mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-03 08:41:39 +09:00
348 lines
11 KiB
PHP
348 lines
11 KiB
PHP
<?php
|
|
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
|
/**
|
|
* @class pollModel
|
|
* @author NAVER (developers@xpressengine.com)
|
|
* @brief The model class for the poll modules
|
|
*/
|
|
class PollModel extends Poll
|
|
{
|
|
/**
|
|
* @brief Initialization
|
|
*/
|
|
public function init()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @brief returns poll infomation
|
|
*/
|
|
public function _getPollinfo($poll_srl)
|
|
{
|
|
$args = new stdClass;
|
|
$args->poll_srl = intval($poll_srl);
|
|
$logged_info = Context::get('logged_info');
|
|
|
|
if(!$args->poll_srl || $args->poll_srl === 0) return $this->setError("poll_no_poll_srl");
|
|
|
|
// Get the information related to the survey
|
|
$columnList = array('poll_count', 'stop_date','poll_type','member_srl');
|
|
$output = executeQuery('poll.getPoll', $args, $columnList);
|
|
$poll_member_srl = $output->data->member_srl;
|
|
if(!$output->data) return $this->setError("poll_no_poll_or_deleted_poll");
|
|
|
|
$poll = new stdClass;
|
|
|
|
// if a person can vote is_polled=0, else 1
|
|
$poll->is_polled = 0;
|
|
if($output->data->stop_date < date("Ymd")) $poll->is_polled = 1;
|
|
elseif($this->isPolled($poll_srl)) $poll->is_polled = 1;
|
|
|
|
$poll->poll_count = (int)$output->data->poll_count;
|
|
$poll->poll_type = (int)$output->data->poll_type;
|
|
$poll->stop_date = zdate($output->data->stop_date, "Y-m-d");
|
|
$columnList = array('poll_index_srl', 'title', 'checkcount', 'poll_count');
|
|
$output = executeQueryArray('poll.getPollTitle', $args, $columnList);
|
|
if(!$output->data) return;
|
|
|
|
$poll->poll = array();
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
$poll->poll[$val->poll_index_srl] = new stdClass;
|
|
$poll->poll[$val->poll_index_srl]->poll_index_srl = $val->poll_index_srl;
|
|
$poll->poll[$val->poll_index_srl]->title = $val->title;
|
|
$poll->poll[$val->poll_index_srl]->checkcount = $val->checkcount;
|
|
$poll->poll[$val->poll_index_srl]->poll_count = $val->poll_count;
|
|
}
|
|
|
|
$output = executeQueryArray('poll.getPollItem', $args);
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
unset($val->upload_target_srl);
|
|
unset($val->poll_srl);
|
|
$val->my_item = false;
|
|
if(($val->add_user_srl==$logged_info->member_srl || $poll_member_srl == $logged_info->member_srl) && $val->add_user_srl!=0) $val->my_item = true;
|
|
$poll->poll[$val->poll_index_srl]->item[] = $val;
|
|
|
|
}
|
|
|
|
$output = new stdClass;
|
|
|
|
$poll->poll_srl = $poll_srl;
|
|
$output->caniadditem = $this->isAbletoAddItem($poll->poll_type) && !!$logged_info->member_srl;
|
|
|
|
$output->poll = $poll;
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* @brief returns poll infomation
|
|
*/
|
|
public function getPollinfo()
|
|
{
|
|
$output = $this->_getPollinfo(Context::get('poll_srl'));
|
|
|
|
$this->add('poll', $output->poll);
|
|
$this->add('caniadditem', $output->caniadditem);
|
|
}
|
|
|
|
/**
|
|
* @brief returns poll item infomation
|
|
*/
|
|
public function getPollitemInfo()
|
|
{
|
|
$args = new stdClass;
|
|
$poll_srl = Context::get('poll_srl');
|
|
$poll_item = Context::get('poll_item');
|
|
|
|
if(!$poll_srl || $poll_srl=='') return $this->setError("poll_no_poll_srl");
|
|
|
|
$args->poll_srl = $poll_srl;
|
|
$args->poll_item_srl = $poll_item;
|
|
|
|
// Get the information related to the survey
|
|
$columnList = array('poll_type');
|
|
$output = executeQuery('poll.getPoll', $args, $columnList);
|
|
if(!$output->data) return $this->setError("poll_no_poll_or_deleted_poll");
|
|
$type = $output->data->poll_type;
|
|
|
|
$poll = new stdClass();
|
|
|
|
if($this->checkMemberInfo($type))
|
|
{
|
|
$pollvar = new stdClass;
|
|
$pollvar->poll_srl = $poll_srl;
|
|
$pollvar->poll_item = $poll_item;
|
|
$pollvar->poll_item_srl = $poll_item;
|
|
$pollvar->page = !!Context::get('page') ? Context::get('page') : 1;
|
|
$pollvar->list_count = !!Context::get('list_count') ? Context::get('list_count') : 5;
|
|
|
|
$output = executeQueryArray('poll.getMemberbyPollitem', $pollvar);
|
|
$output_item = executeQuery('poll.getPollItem', $args);
|
|
$poll->title = $output_item->data->title;
|
|
|
|
$oMemberModel = getModel('member');
|
|
$poll->member = array();
|
|
|
|
$count = 0;
|
|
|
|
foreach($output->data as $key=>$value)
|
|
{
|
|
$count++;
|
|
$vars = $oMemberModel->getMemberInfoByMemberSrl($value->member_srl);
|
|
|
|
if(!$value->member_srl)
|
|
{
|
|
if(Context::get('logged_info')->is_admin === "Y")
|
|
{
|
|
$ip = md5($value->ip_address);
|
|
$poll->member[$ip] = new stdClass();
|
|
$poll->member[$ip]->member_srl = 0;
|
|
$poll->member[$ip]->nick_name = lang("anonymous") . ' IP: ' . $value->ip_address;
|
|
$poll->member[$ip]->profile_image = "";
|
|
}
|
|
else
|
|
{
|
|
$ip = md5($value->ip_address);
|
|
$poll->member[$ip] = new stdClass();
|
|
$poll->member[$ip]->member_srl = 0;
|
|
$poll->member[$ip]->nick_name = lang("anonymous");
|
|
$poll->member[$ip]->profile_image = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$poll->member[$vars->member_srl] = new stdClass();
|
|
$poll->member[$vars->member_srl]->member_srl = $vars->member_srl;
|
|
$poll->member[$vars->member_srl]->nick_name = $vars->nick_name;
|
|
if($vars->profile_image->file!='') $poll->member[$vars->member_srl]->profile_image = $vars->profile_image->file;
|
|
else $poll->member[$vars->member_srl]->profile_image = "";
|
|
}
|
|
}
|
|
|
|
$poll->count = $count;
|
|
}
|
|
|
|
$this->add('item', $poll);
|
|
$this->add("dummy_profile","data:image/gif;base64,R0lGODdhFgAWAPQAAMHBwcDAwPr6+t/f3/v7+9HR0fj4+MrKyvz8/PLy8uvr68/Pz+Li4ubm5vT09ODg4M3Nzdra2uzs7MjIyPDw8N3d3dTU1Pb29sLCwv39/cPDw8bGxv7+/sXFxf///8TExCwAAAAAFgAWAAAF2WDXbWRpnuT3iZ3qvjDMxqpGiyqGrbMGfL6dK+ViiTAHRiLROABaH6KxhVlcPByPx1D4RXFG4MbhyXDO28Nug4NhIlhOxpwdBDTQGKARP6MVGBo2KlN7HghZcR4KKzxTHQEVZXRYHgxPjywaBwZ9WAQLg5kqABYGfhwEERhsPI4jghMSfh4UBwGNbS6CAwJyc2YCA4GuLxgMWqhoHg2BMytvlVrTihUBbBs1BwLSyageAhDFGg9xc1nKWQy4UBoUfenAHgnG2+nKcQQQNh0aBYjLzCXLgKXAjhAAOw==");
|
|
$this->add("page",$output->page_navigation);
|
|
}
|
|
|
|
/**
|
|
* @brief returns poll status
|
|
* @see this function uses isPolled function below
|
|
*/
|
|
public function getPollstatus()
|
|
{
|
|
$poll_srl = Context::get('poll_srl');
|
|
if(!$poll_srl || $poll_srl=='') return $this->setError("poll_no_poll_srl");
|
|
|
|
if($this->isPolled($poll_srl)) $is_polled = 1;
|
|
else $is_polled = 0;
|
|
|
|
$this->add('is_polled', $is_polled);
|
|
}
|
|
|
|
/**
|
|
* @brief The function examines if the user has already been polled
|
|
*/
|
|
public function isPolled($poll_srl)
|
|
{
|
|
$args = new stdClass;
|
|
$args->poll_srl = $poll_srl;
|
|
|
|
if(Context::get('is_logged'))
|
|
{
|
|
$logged_info = Context::get('logged_info');
|
|
$args->member_srl = $logged_info->member_srl;
|
|
}
|
|
else
|
|
{
|
|
$args->ipaddress = \RX_CLIENT_IP;
|
|
}
|
|
$output = executeQuery('poll.getPollLog', $args);
|
|
if($output->data->count) return true;
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* @brief Return the HTML data of the survey
|
|
* Return the result after checking if the poll has responses
|
|
* @deprecated this function uses poll skin, which will be removed
|
|
*/
|
|
public function getPollHtml($poll_srl, $style = '', $skin = 'default')
|
|
{
|
|
$args = new stdClass;
|
|
$args->poll_srl = $poll_srl;
|
|
// Get the information related to the survey
|
|
$columnList = array('poll_count', 'stop_date');
|
|
$output = executeQuery('poll.getPoll', $args, $columnList);
|
|
if(!$output->data) return '';
|
|
|
|
$poll = new stdClass;
|
|
$poll->style = preg_replace('/[^a-zA-Z0-9_-]/', '', $style);
|
|
$poll->poll_count = (int)$output->data->poll_count;
|
|
$poll->stop_date = $output->data->stop_date;
|
|
$skin = preg_replace('/[^a-zA-Z0-9_-]/', '', $skin);
|
|
|
|
$columnList = array('poll_index_srl', 'title', 'checkcount', 'poll_count');
|
|
$output = executeQuery('poll.getPollTitle', $args, $columnList);
|
|
if(!$output->data) return;
|
|
if(!is_array($output->data)) $output->data = array($output->data);
|
|
|
|
$poll->poll = array();
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
$poll->poll[$val->poll_index_srl] = new stdClass;
|
|
$poll->poll[$val->poll_index_srl]->title = $val->title;
|
|
$poll->poll[$val->poll_index_srl]->checkcount = $val->checkcount;
|
|
$poll->poll[$val->poll_index_srl]->poll_count = $val->poll_count;
|
|
}
|
|
|
|
$output = executeQuery('poll.getPollItem', $args);
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
$poll->poll[$val->poll_index_srl]->item[] = $val;
|
|
}
|
|
|
|
$poll->poll_srl = $poll_srl;
|
|
// Only ongoing poll results
|
|
if($poll->stop_date >= date("Ymd"))
|
|
{
|
|
if($this->isPolled($poll_srl)) $tpl_file = "result";
|
|
else $tpl_file = "form";
|
|
}
|
|
else
|
|
{
|
|
$tpl_file = "result";
|
|
}
|
|
|
|
Context::set('poll',$poll);
|
|
Context::set('skin',$skin);
|
|
// The skin for the default configurations, and the colorset configurations
|
|
$tpl_path = sprintf("%sskins/%s/", $this->module_path, $skin);
|
|
|
|
$oTemplate = TemplateHandler::getInstance();
|
|
return $oTemplate->compile($tpl_path, $tpl_file);
|
|
}
|
|
|
|
/**
|
|
* @brief Return the result's HTML
|
|
* @deprecated this function uses poll skin, which will be removed
|
|
*/
|
|
public function getPollResultHtml($poll_srl, $skin = 'default')
|
|
{
|
|
$args = new stdClass;
|
|
$args->poll_srl = $poll_srl;
|
|
// Get the information related to the survey
|
|
$output = executeQuery('poll.getPoll', $args);
|
|
if(!$output->data) return '';
|
|
|
|
$poll = new stdClass;
|
|
$poll->style = preg_replace('/[^a-zA-Z0-9_-]/', '', $skin);
|
|
$poll->poll_count = (int)$output->data->poll_count;
|
|
$poll->stop_date = $output->data->stop_date;
|
|
|
|
$columnList = array('poll_index_srl', 'title', 'checkcount', 'poll_count');
|
|
$output = executeQuery('poll.getPollTitle', $args, $columnList);
|
|
if(!$output->data) return;
|
|
if(!is_array($output->data)) $output->data = array($output->data);
|
|
|
|
$poll->poll = array();
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
$poll->poll[$val->poll_index_srl] = new stdClass;
|
|
$poll->poll[$val->poll_index_srl]->title = $val->title;
|
|
$poll->poll[$val->poll_index_srl]->checkcount = $val->checkcount;
|
|
$poll->poll[$val->poll_index_srl]->poll_count = $val->poll_count;
|
|
}
|
|
|
|
$output = executeQuery('poll.getPollItem', $args);
|
|
foreach($output->data as $key => $val)
|
|
{
|
|
$poll->poll[$val->poll_index_srl]->item[] = $val;
|
|
}
|
|
|
|
$poll->poll_srl = $poll_srl;
|
|
|
|
$tpl_file = "result";
|
|
|
|
Context::set('poll',$poll);
|
|
// The skin for the default configurations, and the colorset configurations
|
|
$tpl_path = sprintf("%sskins/%s/", $this->module_path, $skin);
|
|
|
|
$oTemplate = TemplateHandler::getInstance();
|
|
return $oTemplate->compile($tpl_path, $tpl_file);
|
|
}
|
|
/** [TO REVIEW]
|
|
* @brief Selected poll - return the colorset of the skin
|
|
* @deprecated this function uses poll skin, which will be removed
|
|
*/
|
|
public function getPollGetColorsetList()
|
|
{
|
|
$skin = Context::get('skin') ?: 'default';
|
|
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $skin))
|
|
{
|
|
throw new Rhymix\Framework\Exceptions\InvalidRequest();
|
|
}
|
|
if (!Rhymix\Framework\Storage::isDirectory(RX_BASEDIR . 'modules/poll/skins/' . $skin))
|
|
{
|
|
$skin = 'default';
|
|
}
|
|
|
|
$oModuleModel = getModel('module');
|
|
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
|
|
|
for($i=0;$i<count($skin_info->colorset);$i++)
|
|
{
|
|
$colorset = sprintf('%s|@|%s', $skin_info->colorset[$i]->name, $skin_info->colorset[$i]->title);
|
|
$colorset_list[] = $colorset;
|
|
}
|
|
|
|
if(count($colorset_list)) $colorsets = implode("\n", $colorset_list);
|
|
$this->add('colorset_list', $colorsets);
|
|
}
|
|
}
|
|
/* End of file poll.model.php */
|
|
/* Location: ./modules/poll/poll.model.php */
|