one(array('uid' => $uid, 'product_id' => $product_id)); if (!$user) { $user['uid'] = $uid; $user['index'] = 1; $user['product_id'] = $product_id; $user['status'] = 2; $user['id'] = Dever::db('survey/user')->insert($user); } $user['question_total'] = Dever::db('survey/info')->total(array('product_id' => $product_id)); $result['user'] = $user; if ($page_number > 0) { $user['index'] = $page_number; } $result['info'] = Dever::db('survey/info')->state(array('product_id' => $product_id, 'page_number' => $user['index'])); if ($result['info']) { foreach ($result['info'] as $k => $v) { $answer = Dever::db('survey/user_answer')->one(array('info_id' => $v['id'], 'uid' => $uid)); if ($answer) { $result['info'][$k]['answer'] = $answer['value']; } else { $result['info'][$k]['answer'] = ''; } $result['info'][$k]['content'] = $this->getContent($v['type'], $v['content']); } } return $result; } /** * 提交问卷信息 * * @return mixed */ public function submit($uid, $product_id, $page_number, $survey_id, $survey_answer) { if ($survey_id && $survey_answer) { $survey_id = explode('||', $survey_id); $survey_answer = explode('||', $survey_answer); $num = 0; $total = count($survey_id); foreach ($survey_id as $k => $v) { $info = Dever::db('survey/info')->one($v); if ($info) { if ($info['must'] == 1 && !isset($survey_answer[$k]) && !$survey_answer[$k]) { $page = false; Dever::alert($info['name'] . '未填写答案'); } } } foreach ($survey_id as $k => $v) { $info = Dever::db('survey/info')->one($v); if ($info) { $answer = Dever::db('survey/user_answer')->one(array('info_id' => $v, 'uid' => $uid)); if ($answer) { Dever::db('survey/user_answer')->update(array('where_id' => $answer['id'], 'value' => $survey_answer[$k], 'product_id' => $product_id)); } else { Dever::db('survey/user_answer')->insert(array('info_id' => $v, 'uid' => $uid, 'value' => $survey_answer[$k], 'product_id' => $product_id)); $num++; } } } if ($num == $total || $page_number > 0) { $user = Dever::db('survey/user')->one(array('uid' => $uid)); if ($user) { $user['index'] = $user['index'] + 1; if ($page_number) { $user['index'] = $page_number; } Dever::db('survey/user')->update(array('where_id' => $user['id'], 'index' => $user['index'])); } } } return true; } /** * 查看问卷信息 * * @return mixed */ public function view($uid, $product_id) { $product = Dever::config('base', 'project')->product; $user = Dever::db('survey/user')->one(array('uid' => $uid)); $data['userinfo'] = Dever::db('passport/user')->one($uid); $data['product'] = Dever::db($product)->one($product_id); $data['info'] = Dever::db('survey/info')->state(array('uid' => $uid, 'product_id' => $product_id)); $data['question'] = array(); $data['page_number'] = 1; $i = 1; foreach ($data['info'] as $k => $v) { if ($v['page_number'] > $data['page_number']) { $data['page_number'] = $v['page_number']; } $v['content'] = $this->getContent($v['type'], $v['content']); $answer = Dever::db('survey/user_answer')->one(array('uid' => $uid, 'info_id' => $v['id'])); if ($answer) { if (($v['type'] == 3 || $v['type'] == 4) && strstr($answer['value'], 'http')) { $answer['value'] = $this->getImg($answer['id'], $answer['value']); } elseif ($v['type'] == 12 || $v['type'] == 13) { $v['content'] = $this->getOption($answer['id'], $answer['value'], $v['content']); } $v['answer'] = $answer['value']; } else { $v['answer'] = '未作答'; } $data['question'][$v['page_number']][$i] = $v; $i++; } //$user['index'] = 3; if ($user['index'] >= $data['page_number']) { # 完成了 $data['page'] = '100%'; } else { $num = ceil(($user['index'] / $data['page_number']) * 100); $data['page'] = $num . '%'; } return Dever::render('home', $data); } private function getOption($id, $answer, $option) { $array = explode(',', $answer); $total = count($option) - 1; foreach ($array as $k => $v) { if (is_numeric($v)) { $v = $v - 1; if (isset($option[$v])) { $option[$v]['checked'] = true; } } else { $option[$total]['checked'] = $v; } } return $option; } private function getImg($id, $answer) { $result = ''; $array = explode(',', $answer); foreach ($array as $k => $v) { $result .= '  '; } $result .= ''; return $result; } private function getContent($type, $content) { if ($type >= 11) { $content = Dever::array_decode($content); } else { $content = array(); } return $content; } }