From bef7cac25e4f1d12816b2af2da5d27414757354c Mon Sep 17 00:00:00 2001 From: = <=> Date: Tue, 25 Jul 2017 03:36:57 +0800 Subject: [PATCH 1/5] for PR --- .gitignore | 5 +- config.php | 17 +- config.sample.php | 71 +++++ data/edusystem.sql | 146 ++++++++++ extensions/controllers/BaseController.php | 104 +++++-- extensions/controllers/ProxyController.php | 261 +++++++++++++++--- libs/AmsProxy/AmsProxy.php | 71 ++++- libs/AmsProxy/curl.php | 7 +- libs/AmsProxy/functions/__base__.php | 23 +- libs/AmsProxy/functions/getArchivesEx.php | 20 +- libs/AmsProxy/functions/getClassSchedule.php | 61 ++++ libs/AmsProxy/functions/getGPA.php | 55 ++++ libs/AmsProxy/functions/getRankExamForm.php | 41 ++- libs/AmsProxy/functions/getScore.php | 250 ++++++++++------- libs/AmsProxy/functions/getScoreAffirm.php | 15 +- libs/AmsProxy/functions/getScoreMinor.php | 36 +++ libs/AmsProxy/functions/getValidScore.php | 60 ++++ libs/AmsProxy/functions/getValidScoreImg.php | 47 ++++ libs/AmsProxy/functions/noneCourse.jpg | Bin 0 -> 18340 bytes libs/AmsProxy/functions/noneCourse_.jpg | Bin 0 -> 100959 bytes libs/AmsProxy/functions/noneScore.jpg | Bin 0 -> 9698 bytes libs/AmsProxy/functions/noneScore_.jpg | Bin 0 -> 8433 bytes .../yii/gii/controllers/DefaultController.php | 2 +- models/Common.php | 6 + models/ims_jiaowu.php | 6 + .../admin/controllers/FeedbackController.php | 2 +- modules/admin/controllers/HomeController.php | 2 +- modules/admin/controllers/StatsController.php | 8 +- modules/admin/views/feedback/index.tpl | 2 +- modules/admin/views/home/index.tpl | 6 +- modules/admin/views/layouts/main.tpl | 6 +- modules/admin/views/student/index.tpl | 2 +- modules/proxy/controllers/ApiController.php | 2 +- .../proxy/controllers/CourseController.php | 22 ++ modules/proxy/controllers/HomeController.php | 41 ++- .../proxy/controllers/PersonalController.php | 3 + .../proxy/controllers/RankExamController.php | 21 +- modules/proxy/controllers/ScoreController.php | 131 +++++---- .../proxy/controllers/SettingController.php | 11 +- modules/proxy/views/common/login.css | 3 + modules/proxy/views/common/login.tpl | 24 +- modules/proxy/views/common/stats.tpl | 14 +- modules/proxy/views/common/table.tpl | 11 + modules/proxy/views/course/tableImg.tpl | 8 + modules/proxy/views/home/about.tpl | 5 + modules/proxy/views/home/feedback.tpl | 9 +- modules/proxy/views/home/index.tpl | 66 ++--- modules/proxy/views/layouts/main.tpl | 115 ++++---- modules/proxy/views/score/GPA.tpl | 16 ++ modules/proxy/views/score/score.tpl | 16 ++ modules/proxy/views/score/stats_.js | 107 +++++++ modules/proxy/views/score/table.tpl | 4 +- modules/proxy/views/score/validScore.tpl | 16 ++ modules/proxy/views/setting/update.tpl | 6 + public/css/bootstrap.min.css | 2 +- public/css/common.css | 2 +- public/css/proxy.css | 2 +- public/index.php | 2 + src/less/common.less | 4 +- 59 files changed, 1587 insertions(+), 408 deletions(-) create mode 100644 config.sample.php create mode 100644 data/edusystem.sql create mode 100644 libs/AmsProxy/functions/getClassSchedule.php create mode 100644 libs/AmsProxy/functions/getGPA.php create mode 100644 libs/AmsProxy/functions/getScoreMinor.php create mode 100644 libs/AmsProxy/functions/getValidScore.php create mode 100644 libs/AmsProxy/functions/getValidScoreImg.php create mode 100644 libs/AmsProxy/functions/noneCourse.jpg create mode 100644 libs/AmsProxy/functions/noneCourse_.jpg create mode 100644 libs/AmsProxy/functions/noneScore.jpg create mode 100644 libs/AmsProxy/functions/noneScore_.jpg create mode 100644 models/Common.php create mode 100644 models/ims_jiaowu.php create mode 100644 modules/proxy/views/common/login.css create mode 100644 modules/proxy/views/course/tableImg.tpl create mode 100644 modules/proxy/views/home/about.tpl create mode 100644 modules/proxy/views/score/GPA.tpl create mode 100644 modules/proxy/views/score/score.tpl create mode 100644 modules/proxy/views/score/stats_.js create mode 100644 modules/proxy/views/score/validScore.tpl diff --git a/.gitignore b/.gitignore index 5c67d54..4d3b378 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ /public/adminer.php /public/phpinfo.php /data/amsProxy.db -/runtime/cache -/runtime/views +/runtime +/public/img/captcha +/public/img/cache *.swp .idea /bower_components diff --git a/config.php b/config.php index 4a0d93c..45187c1 100644 --- a/config.php +++ b/config.php @@ -21,7 +21,12 @@ ), 'components' => array( 'db' => array( - 'connectionString' => 'sqlite:../data/amsProxy.db', + // 'connectionString' => 'sqlite:../data/amsProxy.db', + 'class'=>'CDbConnection', + 'connectionString'=>'mysql:host=localhost;dbname=eduSystem', + 'username'=>'root', + 'password'=>'sDA6kFbInOrtELb6lEI6!', + 'emulatePrepare'=>true, // needed by some MySQL installations ), 'viewRenderer' => array( 'class' => 'ext.view.CPradoViewRenderer', @@ -31,7 +36,8 @@ 'urlFormat' => 'path', 'showScriptName' => false, 'rules' => array( - '' => 'site/home/index', + '' => 'proxy/', + // '' => 'site/home/index', 'about' => 'site/home/about', 'faq' => 'site/home/faq', 'wechat' => 'site/wechat/index', @@ -52,11 +58,14 @@ ), 'params' => array( 'debug' => true, - 'baseUrl' => 'http://ams.gxun.edu.cn/', - 'schoolcode' => '10608', + 'curl_debug' => true, + 'useCaptcha'=>true, + 'baseUrl' => 'http://119.146.68.54/Jwweb/', + 'schoolcode' => '10577', 'superAdmin' => array( '110263100136', '111253050122', + '1514080902121' ), ), ); diff --git a/config.sample.php b/config.sample.php new file mode 100644 index 0000000..20fd2a3 --- /dev/null +++ b/config.sample.php @@ -0,0 +1,71 @@ + '..', + 'modules' => array( + 'admin' => array( + 'defaultController' => 'home', + ), + 'proxy' => array( + 'defaultController' => 'home', + ), + 'site' => array( + 'defaultController' => 'home', + ), + 'wechat', + ), + 'defaultController' => 'site', + 'import' => array( + 'ext.controllers.*', + 'application.libs.AmsProxy.AmsProxy', + 'application.models.*', + ), + 'components' => array( + 'db' => array( + // 'connectionString' => 'sqlite:../data/amsProxy.db', + 'class'=>'CDbConnection', + 'connectionString'=>'', + 'username'=>'', + 'password'=>'', + 'emulatePrepare'=>true, + ), + 'viewRenderer' => array( + 'class' => 'ext.view.CPradoViewRenderer', + 'fileExtension' => '.tpl', + ), + 'urlManager' => array( + 'urlFormat' => 'path', + 'showScriptName' => false, + 'rules' => array( + '' => 'proxy/', + // '' => 'site/home/index', + 'about' => 'site/home/about', + 'faq' => 'site/home/faq', + 'wechat' => 'site/wechat/index', + + 'proxy/login' => 'proxy/home/login', + + 'api' => 'site/home/api', + 'api/vcode' => 'site/api/vcode', + 'api/login' => 'site/api/login', + 'api/logout' => 'site/api/logout', + 'api/courses' => 'proxy/api/courses', + 'api/scores' => 'proxy/api/scores', + 'api/rankExam' => 'proxy/api/rankExam', + 'api/archives' => 'proxy/api/archives', + 'api/exam' => 'proxy/api/exam', + ), + ), + ), + 'params' => array( + 'debug' => true, + 'curl_debug' => true, + 'useCaptcha'=>true, + 'baseUrl' => '', + 'schoolcode' => '10577', + 'superAdmin' => array( + '110263100136', + '111253050122', + '1514080902121' + ), + ), +); diff --git a/data/edusystem.sql b/data/edusystem.sql new file mode 100644 index 0000000..1f887f7 --- /dev/null +++ b/data/edusystem.sql @@ -0,0 +1,146 @@ +-- phpMyAdmin SQL Dump +-- version 4.6.5.2 +-- https://www.phpmyadmin.net/ +-- +-- Host: localhost +-- Generation Time: 2017-01-19 06:53:57 +-- 服务器版本: 5.7.13 +-- PHP Version: 5.6.22 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Database: `edusystem` +-- + +-- -------------------------------------------------------- + +-- +-- 表的结构 `common` +-- + +CREATE TABLE `common` ( + `id` varchar(10) NOT NULL, + `rankExamForm` text +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +-- -------------------------------------------------------- + +-- +-- 表的结构 `message` +-- + +CREATE TABLE `message` ( + `id` int(11) NOT NULL, + `sender` text NOT NULL, + `receiver` text NOT NULL, + `message` text NOT NULL, + `time` decimal(10,0) NOT NULL, + `state` int(11) NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- 表的结构 `setting` +-- + +CREATE TABLE `setting` ( + `start_date` date NOT NULL, + `end_date` date NOT NULL, + `wechat_auto_reply` int(11) NOT NULL, + `wechat_token` text NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- 转存表中的数据 `setting` +-- + +INSERT INTO `setting` (`start_date`, `end_date`, `wechat_auto_reply`, `wechat_token`) VALUES +('2017-02-16', '2017-07-02', 1, 'you-token'); + +-- -------------------------------------------------------- + +-- +-- 表的结构 `student` +-- + +CREATE TABLE `student` ( + `sid` varchar(20) NOT NULL, + `pwd` varchar(20) DEFAULT NULL, + `archives` text, + `course` text, + `scoreAffirm` text, + `validScore` text, + `rank_exam` text, + `exam_arrangement` text, + `theory_subject` text, + `last_login_time` date DEFAULT NULL, + `openid_subscribe` text, + `openid_server` text, + `is_admin` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- 表的结构 `wechat_log` +-- + +CREATE TABLE `wechat_log` ( + `id` int(11) NOT NULL, + `message` text NOT NULL, + `state` int(11) NOT NULL DEFAULT '0' +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Indexes for dumped tables +-- + +-- +-- Indexes for table `common` +-- +ALTER TABLE `common` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `message` +-- +ALTER TABLE `message` + ADD PRIMARY KEY (`id`); + +-- +-- Indexes for table `student` +-- +ALTER TABLE `student` + ADD PRIMARY KEY (`sid`); + +-- +-- Indexes for table `wechat_log` +-- +ALTER TABLE `wechat_log` + ADD PRIMARY KEY (`id`); + +-- +-- 在导出的表使用AUTO_INCREMENT +-- + +-- +-- 使用表AUTO_INCREMENT `message` +-- +ALTER TABLE `message` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; +-- +-- 使用表AUTO_INCREMENT `wechat_log` +-- +ALTER TABLE `wechat_log` + MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/extensions/controllers/BaseController.php b/extensions/controllers/BaseController.php index bd6fba5..e8a39f5 100644 --- a/extensions/controllers/BaseController.php +++ b/extensions/controllers/BaseController.php @@ -54,36 +54,80 @@ public function init() { /** * @return string error message */ - public function login($sid, $pwd, $captcha) { - if ($error = $this->AmsProxy()->login($sid, $pwd, $captcha)) { - return $error; - } else { - $this->saveStudent(); - $this->updateStudentLastLoginTime( - Student::model()->findByPk($sid)); - $_SESSION['session'] = $this->AmsProxy()->getSession(); - $_SESSION['student'] = array( - 'sid' => $sid, - 'pwd' => $pwd, - 'isAdmin' => $this->isAdmin($sid), - ); + public function login($sid, $pwd, $captcha=null, $force=false) { + $student = Student::model()->findByPk($sid); + + if( ($captcha == null|| $captcha == '') && isset($student->sid) && $pwd == $student->pwd && !$force){ + $this->afterLogin($sid,$pwd,false); + }elseif($captcha){ + if ($error = $this->AmsProxy()->login($sid, $pwd, $captcha)) { + return $error; + } else { + $this->afterLogin($sid,$pwd,true); + } + }else{ + $count = 0; + $url = 'public/img/captcha/'.$sid.'.jpg'; + $url = dirname(__FILE__).'/../../'.$url; + do{ + $check = file_put_contents($url,$this->AmsProxy()->getCaptcha()); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $this->AmsProxy()->orcApi.'http://proxy.deepkolos.cn/img/captcha/'.$sid.'.jpg?t='.time()); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + curl_setopt($ch, CURLOPT_TIMEOUT, "3");//单位为秒 + curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); //完成重定向 + // curl_setopt($ch,CURLOPT_PROXY,'127.0.0.1:8887');//设置代理服务器 + // curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);//若PHP编译时不带openssl则需要此行 + $captcha = curl_exec($ch); + curl_close($ch); + + // $error = $captcha; + if(strlen($captcha) == 4) + if($error = $this->AmsProxy()->login($sid, $pwd, $captcha)){ + ; + }else{ + $this->afterLogin($sid,$pwd,true); + } + else{ + $error = '验证码错误!'; + // echo '收到的验证码长度为:'.$captcha.'
'; + } + $count++; + }while($error == '验证码错误!' && $count < 5); + // unlink($url); + if($error != null) + return $error; } } - /** * @return bool */ public function isLogged() { return isset($_SESSION['student']); } - - public function saveStudent() { - if (Student::model()->findByPk($this->AmsProxy()->sid) == null) { + public function afterLogin($sid,$pwd,$setSession){ + $this->saveStudent($sid,$pwd); + $this->updateStudentLastLoginTime( + Student::model()->findByPk($sid)); + if($setSession) + $_SESSION['session'] = $this->AmsProxy()->getSession(); + $_SESSION['student'] = array( + 'sid' => $sid, + 'pwd' => $pwd, + 'isAdmin' => $this->isAdmin($sid), + ); + } + public function saveStudent($sid,$pwd) { + $student = Student::model()->findByPk($sid); + if (!$student) { $student = new Student; - $student->sid = $this->AmsProxy()->sid; - $student->archives = json_encode($this->get_archives()); - $student->save(); } + $student->sid = $sid; + $student->pwd = $pwd; + // $student->archives = json_encode($this->get_archives()); + $student->save(); } /** @@ -120,7 +164,8 @@ public function AmsProxy() { } else { $this->amsProxy = new AmsProxy; - $_SESSION['session'] = $this->amsProxy->getSession(); + if($this->amsProxy->getSession()) + $_SESSION['session'] = $this->amsProxy->getSession(); } } @@ -228,12 +273,15 @@ public function information($message) { */ public function weekNumber($date=null) { if ($date) - $time = strtotime($date); + $now = strtotime($date); else - $time = time(); - - $time -= strtotime($this->setting['start_date']); - return (int)($time / 86400 / 7 + 1); + $now = time(); + $start = strtotime($this->setting['start_date']); + $week_offset = (int)date('N',$start) - 1; + $start_ajusted = $start - $week_offset * 86400; + $day = ($now - $start_ajusted)/86400; + $week = floor($day/7); + return $week; } /** @@ -244,6 +292,10 @@ public function createFullUrl($route, $params=array(), $ampersand='&') { $route, $params, $ampersand); } + public function noneNull(&$obj){ + return (isset($obj))?$obj:null; + }//我觉得应该这个使用宏比较好吧 + /** * get request param with get or post * diff --git a/extensions/controllers/ProxyController.php b/extensions/controllers/ProxyController.php index c34a2a4..baed11c 100644 --- a/extensions/controllers/ProxyController.php +++ b/extensions/controllers/ProxyController.php @@ -1,33 +1,88 @@ isLogged()) $this->notLoggedHandler(); + + global $config; + if($config['params']['useCaptcha']){ + if(isset($_GET['refreshed'])) + if(!$this->AmsProxy()->testCurl()){ + $lastsid = $_SESSION['student']['sid']; + $lastpwd = $_SESSION['student']['pwd']; + + $_SESSION = array(); + session_destroy(); + session_start(); + + $this->AmsProxy()->curl->cookies['ASP.NET_SessionId'] = null; + unset($this->AmsProxy()->curl->cookies['ASP.NET_SessionId']); + $_SESSION['session'] = $this->AmsProxy()->getSession(); + $this->AmsProxy()->setSession($_SESSION['session']); + + $this->notLoggedHandler($lastsid,$lastpwd,'更新数据需要登陆一下下~'); + } + + if(isset($_GET['referer'])){ + $this->redirect(urldecode($_GET['referer']).'?refreshed=true'); + } + } $this->student = Student::model()->findByPk( $_SESSION['student']['sid']); + if(!$this->common = Common::model()->findByPk('common')){ + $this->common = new Common; + $this->common->id = 'common'; + $this->common->save(); + } + $this->unread = $this->getUnreadMessage(); - $this->update(); + + $this->update(array( + 'fields'=>array('archives'), + 'fileFields'=>array(), + 'commonFields'=>array(), + 'force'=>false + )); } public function checkSession() { @@ -37,30 +92,58 @@ public function checkSession() { } else { setcookie( 'session', $this->AmsProxy()->getSession(), - time() + 4 * 365 * 24 * 60 * 60, '/'); + time() + 3 * 356 * 60 * 60, '/'); } } } - public function notLoggedHandler() { + public function notLoggedHandler($lastsid='', $lastpwd='',$message=null) { + // setcookie('sessionchanged','true',time()+3600*24); // 现在改为一天 + // if(isset($_SESSION['lastLoginId']) && isset($_SESSION['lastLoginPw'])){ + // $sid = $_SESSION['lastLoginId']; + // $pwd = $_SESSION['lastLoginPw']; + // if($student = Student::model()->findByPk($sid)) + // if ($error = $this->login($sid, $pwd)) { + // $this->render('/common/login', array( + // 'error' => $error, + // 'sid' => $sid, + // 'pwd' => $pwd, + // 'captcha' => '', + // )); + + // Yii::app()->end(); + // } + // } + global $config; + if ($_SERVER['REQUEST_METHOD'] == "POST") { $sid = $_POST['sid']; $pwd = $_POST['pwd']; - - if ($error = $this->login($sid, $pwd, $_POST['captcha'])) { + $captcha = (isset($_POST['captcha'])) ? $_POST['captcha'] : null; + if ($error = $this->login($sid, $pwd, $captcha)) { + $captchaImg = ($config['params']['useCaptcha'])?base64_encode($this->AmsProxy()->getCaptcha()):''; + //其实如果第一次自动识别验证码失败时候直接转为人工输入好了 $this->render('/common/login', array( 'error' => $error, 'sid' => $sid, - 'captcha' => base64_encode( - $this->AmsProxy()->getCaptcha()) + 'pwd' => $pwd, + 'captcha' => $captchaImg, + 'message' => $message )); Yii::app()->end(); } + $_SESSION['lastLoginId'] = $sid; + $_SESSION['lastLoginPw'] = $pwd; } else { + $captchaImg = ($config['params']['useCaptcha']) ? base64_encode($this->AmsProxy()->getCaptcha()) : ''; + // $sid = (isset($_SESSION['lastLoginId'])) ? $_SESSION['lastLoginId'] : ''; + // $pwd = (isset($_SESSION['lastLoginPw'])) ? $_SESSION['lastLoginPw'] : ''; $this->render('/common/login', array( - 'captcha' => base64_encode( - $this->AmsProxy()->getCaptcha()) + 'sid' => $lastsid, + 'pwd' => $lastpwd, + 'captcha' => $captchaImg, + 'message' => $message )); Yii::app()->end(); @@ -83,19 +166,39 @@ public function get_archives() { $this->AmsProxy()->invoke('getArchivesEx') ); } + public function get_rankExamForm() { + return $this->AmsProxy()->invoke('getRankExamForm'); + } /** * @return array */ public function get_score() { - return array( - // $this->AmsProxy()->invoke('getScore', 0), - // $this->AmsProxy()->invoke('getScore', 1), - $this->AmsProxy()->invoke( - 'getScoreAffirm', $this->get('archives')->{'入学年份'}), - ); + return $this->AmsProxy()->invoke('getScore'); } - + public function get_scoreMinor() { + return $this->AmsProxy()->invoke('getScoreMinor'); + } + public function get_GPA() { + return $this->AmsProxy()->invoke('getGPA'); + } + public function get_scoreAffirm() { + //获取行政班级 + // $archives = $this->get('archives'); + // $startYear = '20'.substr($archives->{'行政班级'},0,2); + $startYear = '20'.substr($_SESSION['student']['sid'],0,2);//还是从学号提取吧 + return $this->AmsProxy()->invoke('getScoreAffirm',$startYear); + } + public function get_validScore() { + return $this->AmsProxy()->invoke('getValidScore'); + } + public function get_validScoreImg() { + return $this->AmsProxy()->invoke('getValidScoreImg'); + } + public function get_classSchedule() { + return $this->AmsProxy()->invoke('getClassSchedule'); + } + /** * @return array */ @@ -114,7 +217,6 @@ public function get_rank_exam() { 'score' => $this->AmsProxy()->invoke('getRankExamScore'), ); } - /** * @return array */ @@ -122,39 +224,126 @@ public function get_theory_subject() { return $this->AmsProxy()->invoke('getTheorySubject'); } - /** - * @return array - */ public function get_exam_arrangement() { return $this->AmsProxy()->invoke('getExamArrangement'); } - /** - * @param bool $force - */ - public function update($force=false) { - foreach ($this->fields as $field) - if ($force || !$this->student->{$field}) - $this->updateItem($field); + public function update($config) { + if(is_array($config)){ + $config = (object)$config; + $force = $this->noneNULL($config->force); + $fields = $this->noneNULL($config->fields); + $fileFields = $this->noneNULL($config->fileFields); + $commonFields = $this->noneNULL($config->commonFields); + $this->updateItem('fields',$fields,$force); + $this->updateItem('fileFields',$fileFields,$force); + $this->updateItem('commonFields',$commonFields,$force); + } + } + public function updateItem($func,$fields,$force){ + if(is_array($fields)) + foreach ($fields as $field){ + if ($force || !$this->{'checkCache_'.$func}($field)){ + $this->getAuthToUpdate(); + $this->{'update_'.$func}($field); + } + } } - /** * @param string $field */ - public function updateItem($field) { + public function update_fields($field) { $this->student->{$field} = json_encode($this->{'get_' . $field}()); $this->student->save(); } + public function update_commonFields($field) { + $this->common->{$field} = json_encode($this->{'get_' . $field}()); + $this->common->save(); + } + public function update_fileFields($field) { + return file_put_contents($this->cacheUrl($field),$this->{'get_' . $field}()); + } + public function checkCache_fileFields($field){ + return file_exists($this->cacheUrl($field)); + } + public function checkCache_fields($field){ + return $this->student->{$field}; + } + public function checkCache_commonFields($field){ + return $this->common->{$field}; + } + + public function getCache($field){ + if(file_exists($this->cacheUrl($field))) + return file_get_contents($this->cacheUrl($field)); + return ''; + } + public function cacheUrl($field){ + return CACHE.$field.'/_hidden_'.$_SESSION['student']['sid'].'.jpg'; + } + public function webUrl($field){ + return 'img/cache/'.$field.'/_hidden_'.$_SESSION['student']['sid'].'.jpg'; + } + public function getAuthToUpdate(){ + if(!$this->AmsProxy()->testCurl()){ + global $config; + // echo '还没有获取到获取权限~'; + $this->AmsProxy()->curl->cookies['ASP.NET_SessionId'] = null; + unset($this->AmsProxy()->curl->cookies['ASP.NET_SessionId']); + $_SESSION['session'] = $this->AmsProxy()->getSession(); + $this->AmsProxy()->setSession($_SESSION['session']); + + if($config['params']['useCaptcha']){ + $this->redirect('/?refreshed=true&referer='.urlencode($_SERVER['HTTP_REFERER'])); + die(); + } + + $error = $this->login($this->student->sid, $this->student->pwd, null,true); + if($error){ + $this->warning('验证码自动识别失败了: '.$error.'~'); + Yii::app()->end(); + } + return true; + } + // echo '以获取到权限了'; + return true; + } /** * @param string $field * @param bool $json_encode * @return mixed */ - public function get($field, $json_encode=true) { - if ($json_encode) + public function get($field, $type='fields') {//分类就会牵动很多的变化了,要么就通过数字含义进行路由 + //还是单独检查是否更新吧 + if ($type == 'fields') return json_decode($this->student->{$field}); - else - return $this->student->{$field}; + elseif($type == 'fileFields')//文件类,读取原数据 + return $this->getCache($field); + elseif($type == 'commonFields'){ + return json_decode($this->common->{$field}); + } + } + public function getXNXQ() { + return $this->getXN() . $this->getXQ(); + } + public function getXN() { + $month = (int) date('m'); + $year = (int) date('Y'); + $day = (int) date('d'); + if ($month < 7) + $year -= 1; + return $year; + } + public function getXQ() { + $month = (int) date('m'); + $day = (int) date('d'); + return ( $month <= 2 || ($month >= 6) ) ? '0' : '1'; + } + public function lastXN(){ + return (!$this->lastXQ())? $this->getXN() : $this->getXN() -1; + } + public function lastXQ(){ + return ($this->getXQ()) ? 0 : 1 ; } } diff --git a/libs/AmsProxy/AmsProxy.php b/libs/AmsProxy/AmsProxy.php index 2af7eca..e3218de 100644 --- a/libs/AmsProxy/AmsProxy.php +++ b/libs/AmsProxy/AmsProxy.php @@ -28,6 +28,9 @@ class AmsProxy { */ public $schoolcode; + public $isTestOk = false; + + public $orcApi = 'http://meanchun.com/wb/wbocr/wbocr.php?url='; /** * @param string $session @@ -37,8 +40,8 @@ public function __construct($session=null) { $this->curl->setTimeout(4); $this->baseUrl = Yii::app()->params['baseUrl']; $this->schoolcode = Yii::app()->params['schoolcode']; - $session = $session ? $session : $this->generateSessionId(); - $this->setSession($session); + if($session != null) + $this->setSession($session); } /** @@ -65,7 +68,7 @@ public function login($sid, $pwd, $captcha) { preg_match( '/color:Red;">(.*?)sid = $sid; } } - + + public function testCurl(){//还有就是会多次测试,其实只要每个updateget一次权限就可以了 + // var_dump($this->isTestOk); + if(!$this->isTestOk){ + $month = (int) date('m'); + $year = (int) date('Y'); + if ($month <= 7) + $year -= 1; + $result = $this->POST( + 'xscj/c_ydcjrdjl_rpt.aspx', + array( + 'sel_xnxq' => $year.($month < 3 || $month > 7 ? '0' : '1'), + 'radCx' => 1, + 'btn_search' => '%BC%EC%CB%F7' + ) + ); + // echo "
{$result}
"; + if(strpos($result, '系统提示:您无权访问此页') !== false || $result == ''){ + return false; + } + } + return $this->isTestOk = true; + } /** * _login 旧版登陆接口 * @return string error message @@ -104,6 +129,9 @@ public function _login($sid, $pwd) { public function GET($url, $params=null, $referer=null) { return $this->request('get', $url, $params, null, $referer); } + public function GETRaw($url, $params=null, $referer=null) { + return $this->requestRaw('get', $url, $params, null, $referer); + } /** * @param string $url @@ -115,7 +143,6 @@ public function GET($url, $params=null, $referer=null) { public function POST($url, $data, $params=null, $referer=null) { return $this->request('post', $url, $params, $data, $referer); } - /** * @param string $method * @param string $url @@ -146,13 +173,34 @@ public function request( ); } + public function requestRaw( + $method, $url, $params=null, $data=null, $referer=null) { + + if (!$referer) + $referer = $this->baseUrl . $url; + + return $this->curl->request( + array( + 'method' => $method, + 'url' => $this->baseUrl . $url, + 'params' => $params, + 'data' => $data, + 'headers' => array( + 'Referer' => $referer, + ), + ) + )->body; + } /** * @return string */ public function getSession() { - if (!isset($this->curl->cookies['ASP.NET_SessionId'])) - $this->GET(''); - + if (!isset($this->curl->cookies['ASP.NET_SessionId'])){ + $this->GET('_data/LOGIN_NEW.ASPX'); + if (!isset($this->curl->cookies['ASP.NET_SessionId'])){ + return $this->generateSessionId(); + } + } return $this->curl->cookies['ASP.NET_SessionId']; } @@ -164,6 +212,9 @@ public function getCaptcha() { array( 'method' => 'get', 'url' => $this->baseUrl . 'sys/ValidateCode.aspx', + 'headers' => array( + 'Referer' => $this->baseUrl . '_data/home_login.aspx ', + ), ) )->body; } @@ -179,8 +230,8 @@ public function setSession($session) { * @param string $function * @param mixed $args */ - public function invoke($functionName, $args=null) { - if (!class_exists($functionName, false)) + public function invoke($functionName, $args=null) {//应该设置__call方法的使用起来是更加自然 + if (!class_exists($functionName, false))//好像我有比原作更方便的加载方法哦~ include 'functions/' . $functionName . '.php'; $function = new $functionName($this, $args); diff --git a/libs/AmsProxy/curl.php b/libs/AmsProxy/curl.php index 649f053..d83c4b5 100644 --- a/libs/AmsProxy/curl.php +++ b/libs/AmsProxy/curl.php @@ -5,7 +5,7 @@ class curl_request { * @var array */ public $cookies = array(); - + public $curl = null; /** * @var array */ @@ -17,6 +17,11 @@ public function __construct() { $this->curl = curl_init(); curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($this->curl, CURLOPT_HEADER, true); + // + if(CURL_DEBUG){ + curl_setopt($this->curl,CURLOPT_PROXY,'127.0.0.1:8887');//设置代理服务器 + curl_setopt($this->curl,CURLOPT_SSL_VERIFYPEER,0);//若PHP编译时不带openssl则需要此行 + } } /** diff --git a/libs/AmsProxy/functions/__base__.php b/libs/AmsProxy/functions/__base__.php index c3b8c20..9e59076 100644 --- a/libs/AmsProxy/functions/__base__.php +++ b/libs/AmsProxy/functions/__base__.php @@ -21,7 +21,7 @@ public function __construct($amsProxy, $args) { public function run() { $data = $this->getData(); if ($data !== false) - return $this->parse($this->createDom($data)); + return $this->parse($this->createDom($data),$data); else return array(); } @@ -67,7 +67,7 @@ public function getData() {} * @param mixed $data * @return array */ - public function parse($data) {} + //public function parse($data,$raw) {} /** * 2015.1 ~ 2015.2 @@ -79,10 +79,25 @@ public function parse($data) {} * @return string */ public function getXNXQ() { + return $this->getXN() . $this->getXQ(); + } + public function getXN() { $month = (int) date('m'); $year = (int) date('Y'); - if ($month <= 7) + $day = (int) date('d'); + if ($month < 7) $year -= 1; - return $year . ($month < 3 || $month > 7 ? '0' : '1'); + return $year; + } + public function getXQ() { + $month = (int) date('m'); + $day = (int) date('d'); + return ( $month <= 2 || ($month >= 6) ) ? '0' : '1'; + } + public function lastXN(){ + return (!$this->lastXQ())? $this->getXN() : $this->getXN() -1; + } + public function lastXQ(){ + return ($this->getXQ()) ? 0 : 1 ; } } diff --git a/libs/AmsProxy/functions/getArchivesEx.php b/libs/AmsProxy/functions/getArchivesEx.php index 195687c..216e73b 100644 --- a/libs/AmsProxy/functions/getArchivesEx.php +++ b/libs/AmsProxy/functions/getArchivesEx.php @@ -34,11 +34,19 @@ public function getFromOther() { $this->amsProxy->GET('xsxj/Stu_xszcxs_rpt.aspx') )->getElementsByTagName('tr'); - $tds = $trs->item($trs->length - 1)->getElementsByTagName('td'); - return array( - '院(系)/部' => $tds->item(2)->textContent, - '年级/专业' => $tds->item(3)->textContent, - '行政班级' => $tds->item(4)->textContent, - ); + if($trs->item($trs->length - 1) != null){ + $tds = $trs->item($trs->length - 1)->getElementsByTagName('td'); + return array( + '院(系)/部' => $tds->item(2)->textContent, + '年级/专业' => $tds->item(3)->textContent, + '行政班级' => $tds->item(4)->textContent, + ); + }else{ + return array( + '院(系)/部' => '', + '年级/专业' => '', + '行政班级' => '', + ); + } } } diff --git a/libs/AmsProxy/functions/getClassSchedule.php b/libs/AmsProxy/functions/getClassSchedule.php new file mode 100644 index 0000000..46a888c --- /dev/null +++ b/libs/AmsProxy/functions/getClassSchedule.php @@ -0,0 +1,61 @@ +getHidyzm(); + if ($hidyzm !== false) { + // $m 是一个随机字串, 这里就不随机了. + $m = 'hDIbFprNaT0AGib'; + $hidsjyzm = strtoupper(md5($this->amsProxy->schoolcode . $this->getXNXQ() . $m)); + + $domStr = $this->amsProxy->POST( + 'znpk/Pri_StuSel_rpt.aspx', + array( + 'Sel_XNXQ' => $this->getXNXQ(), + 'rad' => 0, + 'px' => 0, + 'hidyzm' => $hidyzm, + 'hidsjyzm' => $hidsjyzm, + ), + array( + 'm' => $m, + ) + ); + preg_match('/src=\'([^\']*)\'/',$domStr,$match); + + if(isset($match[1])) + return $this->amsProxy->curl->request( + array( + 'method' => 'get', + 'url' => $this->amsProxy->baseUrl . 'znpk/'.$match[1], + // 'params' => array( + // 'type'=>'1', + // 'w'=>'1100', + // 'h'=>'520', + // 'xnxq'=>$this->getXNXQ() + // ), + 'headers' => array( + 'Referer' => $this->amsProxy->baseUrl . 'znpk/Pri_StuSel_rpt.aspx?m=' . $m, + ), + ) + )->body; + else + return file_get_contents(dirname(__FILE__).'/noneCourse.jpg'); + } else { + return 'false'; + } + } + + public function parse($dom,$raw) { + return $raw; + } + public function getHidyzm() { + $page = $this->htmlFinishing($this->amsProxy->GET('znpk/Pri_StuSel.aspx')); + preg_match('/input type=\"hidden\" name=\"hidyzm\" value=\"(.+)\"/isU',$page,$match); + return $match[1]; + } +} diff --git a/libs/AmsProxy/functions/getGPA.php b/libs/AmsProxy/functions/getGPA.php new file mode 100644 index 0000000..c167a3f --- /dev/null +++ b/libs/AmsProxy/functions/getGPA.php @@ -0,0 +1,55 @@ +amsProxy->POST( + 'xscj/Stu_MyScore_rpt.aspx', + array( + 'SJ'=>1, + 'btn_search'=>'%BC%EC%CB%F7', + 'SelXNXQ'=>'0', + 'zfx_flag'=>'0', + 'zxf'=>'0' + ) + ); + } + + public function parse($dom,$raw) { + $tables = $dom->getElementsByTagName('table'); + $score = array( + 'thead'=>array(), + 'tbody'=>array( + '入学以来' => array() + ) + ); + //主要是部分同学是没有成绩统计的,所以导致抓取错误 + foreach($tables as $table) { + if($table->getAttribute('bgcolor') == '#89bfa7') + foreach ($table->getElementsByTagName('tr') as $num => $tr) { + $tds = $tr->getElementsByTagName('td'); + if($num == 0){ + $score['thead'] = array( + trim($tds->item(0)->textContent), + trim($tds->item(1)->textContent), + trim($tds->item(2)->textContent), + trim($tds->item(3)->textContent), + trim($tds->item(4)->textContent), + trim($tds->item(5)->textContent), + trim($tds->item(6)->textContent), + ); + } + else + $score['tbody']['入学以来'][] = array( + trim($tds->item(0)->textContent), + trim($tds->item(1)->textContent), + trim($tds->item(2)->textContent), + trim($tds->item(3)->textContent), + trim($tds->item(4)->textContent), + trim($tds->item(5)->textContent), + trim($tds->item(6)->textContent), + ); + } + } + return $score; + } + +} diff --git a/libs/AmsProxy/functions/getRankExamForm.php b/libs/AmsProxy/functions/getRankExamForm.php index 84b4c73..e7ae9b5 100644 --- a/libs/AmsProxy/functions/getRankExamForm.php +++ b/libs/AmsProxy/functions/getRankExamForm.php @@ -10,15 +10,25 @@ public function getData() { public function parse($dom) { $exam = (object)array( 'thead' => array( + '操作', '等级', - '构成', + '状态', + '剩余名额', + '收费(元)', '考试年月', - '收费标准(元)', '报名时间区段', '限定名额', - '剩余名额', - '状态', - '操作', + '构成', + + // '等级', + // '构成', + // '考试年月', + // '收费标准(元)', + // '报名时间区段', + // '限定名额', + // '剩余名额', + // '状态', + // '操作', ), 'tbody' => array(), ); @@ -34,16 +44,27 @@ public function parse($dom) { $exam->tbody[$typeName][] = (object)array( 'data' => array( + $tds->item(9)->textContent, $tds->item(2)->textContent, - $tds->item(3)->textContent, - $tds->item(4)->textContent, + $tds->item(8)->textContent, + $tds->item(11)->textContent, $tds->item(5)->textContent, + $tds->item(4)->textContent, $tds->item(6)->textContent . ' - ' . $tds->item(7)->textContent, $tds->item(10)->textContent, - $tds->item(11)->textContent, - $tds->item(8)->textContent, - $tds->item(9)->textContent, + $tds->item(3)->textContent, + + // $tds->item(2)->textContent, + // $tds->item(3)->textContent, + // $tds->item(4)->textContent, + // $tds->item(5)->textContent, + // $tds->item(6)->textContent . ' - ' + // . $tds->item(7)->textContent, + // $tds->item(10)->textContent, + // $tds->item(11)->textContent, + // $tds->item(8)->textContent, + // $tds->item(9)->textContent, ), 'id' => $tds->item(9)->getAttribute('id'), ); diff --git a/libs/AmsProxy/functions/getScore.php b/libs/AmsProxy/functions/getScore.php index 1405bc8..9ae8435 100644 --- a/libs/AmsProxy/functions/getScore.php +++ b/libs/AmsProxy/functions/getScore.php @@ -5,125 +5,165 @@ * @param bool is effective */ class getScore extends __base__ { - // 这个获取方法在广西民大里已经无效 public function getData() { - return $this->amsProxy->POST( + //默认是获取上一年的吧 + $domStr = $this->amsProxy->POST( 'xscj/Stu_MyScore_rpt.aspx', array( - 'SJ' => (int)$this->args, - 'SelXNXQ' => 0, - 'txt_xm' => null, - 'zfx_flag' => 0, - 'zxf' => 0, + 'SJ'=>(int)$this->args, + 'sel_xn'=>$this->lastXN(), + 'sel_xq'=>$this->lastXQ(), + 'btn_search'=>'%BC%EC%CB%F7', + 'SelXNXQ'=>'2',//0入学以来1学年2学期 + 'zfx_flag'=>'0',//0主修 1辅修 + 'zxf'=>'0' ) - ); - } + );//还是要发一下请求的 - public function parse($dom) { - if ($this->args) - return $this->parseEffectiveScore($dom); + preg_match('/src=\'([^\']*)\'/',$domStr,$match); + if(isset($match[1])) + return $this->amsProxy->GETRaw( + 'xscj/'.$match[1], + array( + // 'x'=>'1', + // 'h'=>'2', + // 'w'=>'782', + // 'xnxq'=>$this->lastXN().$this->lastXQ(), + // 'xn'=>$this->lastXN(), + // 'xq'=>$this->lastXQ(), + // 'rpt'=>'0', + // 'rad'=>'2', + // 'zfx'=>'0', + ) + ); else - return $this->parseOriginalScore($dom); + return file_get_contents(dirname(__FILE__).'/noneScore.jpg'); + } - /** - * @param DOMDocument $dom - * @return array - */ - public function parseEffectiveScore($dom) { - $score = array( - 'thead' => array( - '课程/环节', - '学分', - '类别', - '课程类别', - '考核方式', - '修读性质', - '成绩', - '取得学分', - '绩点', - '学分绩点', - ), - 'tbody' => array(), - ); + public function parse($dom,$raw) { + return $raw; + } + // public function getData() { + // return $this->amsProxy->POST( + // 'xscj/Stu_MyScore_rpt.aspx', + // array( + // 'SJ'=>(int)$this->args, + // 'sel_xn'=>$this->getXN(), + // 'sel_xq'=>$this->getXQ(), + // 'btn_search'=>'%BC%EC%CB%F7', + // 'SelXNXQ'=>'2',//0入学以来1学年2学期 + // 'zfx_flag'=>'0', + // 'zxf'=>'0' + // ) + // ); + // } - $tables = $dom->getElementsByTagName('table'); - if ($tables->length) { - foreach ($tables->item(2)->getElementsByTagName('tr') as $tr) { - $tds = $tr->getElementsByTagName('td'); + // public function parse($dom) { + // if ($this->args) + // return $this->parseEffectiveScore($dom); + // else + // return $this->parseOriginalScore($dom); + // } - if ($term_name = trim($tds->item(0)->textContent)) - $termName = $term_name; + // /** + // * @param DOMDocument $dom + // * @return array + // */ + // public function parseEffectiveScore($dom) { + // $score = array( + // 'thead' => array( + // '课程/环节', + // '学分', + // '类别', + // '课程类别', + // '考核方式', + // '修读性质', + // '成绩', + // '取得学分', + // '绩点', + // '学分绩点', + // ), + // 'tbody' => array(), + // ); - $score['tbody'][$termName][] = array( - preg_replace('/\[.*?\]/', '', - $tds->item(1)->textContent), - $tds->item(2)->textContent, - $tds->item(3)->textContent, - $tds->item(4)->textContent, - $tds->item(5)->textContent, - $tds->item(6)->textContent, - $tds->item(7)->textContent, - $tds->item(8)->textContent, - $tds->item(9)->textContent, - $tds->item(10)->textContent, - ); - } - } + // $tables = $dom->getElementsByTagName('table'); + // if ($tables->length) { + // foreach ($tables->item(2)->getElementsByTagName('tr') as $tr) { + // $tds = $tr->getElementsByTagName('td'); - return $score; - } + // if ($term_name = trim($tds->item(0)->textContent)) + // $termName = $term_name; - /** - * @param DOMDocument $dom - * @return array - */ - public function parseOriginalScore($dom) { - $score = array( - 'thead' => array( - '课程/环节', - '学分', - '类别', - '课程类别', - '考核方式', - '修读性质', - '平时', - '中考', - '末考', - '技能', - '综合', - ), - ); + // $score['tbody'][$termName][] = array( + // preg_replace('/\[.*?\]/', '', + // $tds->item(1)->textContent), + // $tds->item(2)->textContent, + // $tds->item(3)->textContent, + // $tds->item(4)->textContent, + // $tds->item(5)->textContent, + // $tds->item(6)->textContent, + // $tds->item(7)->textContent, + // $tds->item(8)->textContent, + // $tds->item(9)->textContent, + // $tds->item(10)->textContent, + // ); + // } + // } - $tables = $dom->getElementsByTagName('table'); - for ($i = 1; $i < $tables->length; $i += 3) { - $termName = $tables - ->item($i) - ->getElementsByTagName('td') - ->item(0) - ->textContent; - $termName = substr($termName, 15); - $termScore = $tables->item($i + 2); + // return $score; + // } - foreach ($termScore->getElementsByTagName('tr') as $tr) { - $tds = $tr->getElementsByTagName('td'); - $score['tbody'][$termName][] = array( - preg_replace('/\[.*?\]/', '', - $tds->item(1)->textContent), - $tds->item(2)->textContent, - $tds->item(3)->textContent, - $tds->item(4)->textContent, - $tds->item(5)->textContent, - $tds->item(6)->textContent, - $tds->item(7)->textContent, - $tds->item(8)->textContent, - $tds->item(9)->textContent, - $tds->item(10)->textContent, - $tds->item(11)->textContent, - ); - } - } + // /** + // * @param DOMDocument $dom + // * @return array + // */ + // public function parseOriginalScore($dom) { + // $score = array( + // 'thead' => array( + // '课程/环节', + // '学分', + // '类别', + // '课程类别', + // '考核方式', + // '修读性质', + // '平时', + // '中考', + // '末考', + // '技能', + // '综合', + // ), + // ); - return $score; - } + // $tables = $dom->getElementsByTagName('table'); + // for ($i = 1; $i < $tables->length; $i += 3) { + // $termName = $tables + // ->item($i) + // ->getElementsByTagName('td') + // ->item(0) + // ->textContent; + // $termName = substr($termName, 15); + // $termScore = $tables->item($i + 2); + + // foreach ($termScore->getElementsByTagName('tr') as $tr) { + // $tds = $tr->getElementsByTagName('td'); + // $score['tbody'][$termName][] = array( + // preg_replace('/\[.*?\]/', '', + // $tds->item(1)->textContent), + // $tds->item(2)->textContent, + // $tds->item(3)->textContent, + // $tds->item(4)->textContent, + // $tds->item(5)->textContent, + // $tds->item(6)->textContent, + // $tds->item(7)->textContent, + // $tds->item(8)->textContent, + // $tds->item(9)->textContent, + // $tds->item(10)->textContent, + // $tds->item(11)->textContent, + // ); + // } + // } + + // return $score; + // } } diff --git a/libs/AmsProxy/functions/getScoreAffirm.php b/libs/AmsProxy/functions/getScoreAffirm.php index 0973532..8fac9fa 100644 --- a/libs/AmsProxy/functions/getScoreAffirm.php +++ b/libs/AmsProxy/functions/getScoreAffirm.php @@ -8,8 +8,9 @@ public function getData() { return $this->amsProxy->POST( 'xscj/c_ydcjrdjl_rpt.aspx', array( - 'sel_xnxq' => $this->args, - 'radCx' => 1, + 'sel_xnxq' => $this->args, + 'radCx' => 1, + 'btn_search' => '%BC%EC%CB%F7' ) ); } @@ -27,13 +28,13 @@ public function parse($dom) { $score[$term_name][] = array( preg_replace('/\[.*?\]/', '', trim($tds->item(0)->textContent)), + trim($tds->item(6)->textContent), + trim($tds->item(7)->textContent), trim($tds->item(1)->textContent), trim($tds->item(2)->textContent), trim($tds->item(3)->textContent), trim($tds->item(4)->textContent), trim($tds->item(5)->textContent), - trim($tds->item(6)->textContent), - trim($tds->item(7)->textContent), ); } } @@ -69,7 +70,7 @@ public function getData() { return $scores; } - /** + /* * createDom * @overwrite * @param mixed $arr data @@ -83,13 +84,13 @@ public function parse($arr) { return array( 'thead' => array( '课程/环节', + '原始成绩', + '有效成绩', '学分', '课程类别', '修读性质', '考核方式', '辅修标记', - '原始成绩', - '有效成绩', ), 'tbody' => $arr, ); diff --git a/libs/AmsProxy/functions/getScoreMinor.php b/libs/AmsProxy/functions/getScoreMinor.php new file mode 100644 index 0000000..3162064 --- /dev/null +++ b/libs/AmsProxy/functions/getScoreMinor.php @@ -0,0 +1,36 @@ +amsProxy->POST( + 'xscj/Stu_MyScore_rpt.aspx', + array( + 'SJ'=>(int)$this->args, + 'sel_xn'=>$this->lastXN(), + 'sel_xq'=>$this->lastXQ(), + 'btn_search'=>'%BC%EC%CB%F7', + 'SelXNXQ'=>'2',//0入学以来1学年2学期 + 'zfx_flag'=>'1',//0主修 1辅修 + 'zxf'=>'0' + ) + ); + + preg_match('/src=\'([^\']*)\'/',$domStr,$match); + if(isset($match[1])) + return $this->amsProxy->GETRaw( + 'xscj/'.$match[1], + array() + ); + else + return ''; + + } + + public function parse($dom,$raw) { + return $raw; + } +} diff --git a/libs/AmsProxy/functions/getValidScore.php b/libs/AmsProxy/functions/getValidScore.php new file mode 100644 index 0000000..147ea80 --- /dev/null +++ b/libs/AmsProxy/functions/getValidScore.php @@ -0,0 +1,60 @@ +amsProxy->POST( + 'xscj/Stu_MyScore_rpt.aspx', + array( + 'SJ'=>1, + 'sel_xn'=>$this->lastXN(), + 'sel_xq'=>$this->lastXQ(), + 'btn_search'=>'%BC%EC%CB%F7', + 'SelXNXQ'=>'2',//0入学以来1学年2学期 + 'zfx_flag'=>'0', + 'zxf'=>'0' + ) + ); + } + + public function parse($dom,$raw) { + $tables = $dom->getElementsByTagName('table'); + $score = array( + 'thead'=>array(), + 'tbody'=>array( + '成绩统计' => array() + ) + ); + //主要是部分同学是没有成绩统计的,所以导致抓取错误 + if ($tables->length && $tables->item(3)->getAttribute('bgcolor') == '#89bfa7') { + foreach ($tables->item(3)->getElementsByTagName('tr') as $num => $tr) { + $tds = $tr->getElementsByTagName('td'); + if($num == 0){ + $score['thead'] = array( + trim($tds->item(0)->textContent), + trim($tds->item(1)->textContent), + trim($tds->item(2)->textContent), + trim($tds->item(3)->textContent), + trim($tds->item(4)->textContent), + trim($tds->item(5)->textContent), + trim($tds->item(6)->textContent), + ); + } + else + $score['tbody']['成绩统计'][] = array( + trim($tds->item(0)->textContent), + trim($tds->item(1)->textContent), + trim($tds->item(2)->textContent), + trim($tds->item(3)->textContent), + trim($tds->item(4)->textContent), + trim($tds->item(5)->textContent), + trim($tds->item(6)->textContent), + ); + } + } + return $score; + } +} \ No newline at end of file diff --git a/libs/AmsProxy/functions/getValidScoreImg.php b/libs/AmsProxy/functions/getValidScoreImg.php new file mode 100644 index 0000000..5cb2b9f --- /dev/null +++ b/libs/AmsProxy/functions/getValidScoreImg.php @@ -0,0 +1,47 @@ +amsProxy->POST( + 'xscj/Stu_MyScore_rpt.aspx', + array( + 'SJ'=>(int)$this->args, + 'sel_xn'=>$this->lastXN(), + 'sel_xq'=>$this->lastXQ(), + 'btn_search'=>'%BC%EC%CB%F7', + 'SelXNXQ'=>'2',//0入学以来1学年2学期 + 'zfx_flag'=>'0', + 'zxf'=>'0' + ) + );//还是要发一下请求的 + //链接还是直接提取出来好了 + preg_match('/src=\'([^\']*)\'/',$domStr,$match); + // return $this->amsProxy->GETRaw( + // 'xscj/Stu_MyScore_Drawimg.aspx', + // array( + // 'x'=>'1', + // 'h'=>'2', + // 'w'=>'670', + // 'xnxq'=>$this->lastXN().$this->lastXQ(), + // 'xn'=>$this->lastXN(), + // 'xq'=>$this->lastXQ(), + // 'rpt'=>'1', + // 'rad'=>'2', + // 'zfx'=>'0', + // ) + // ); + if(isset($match[1])) + return $this->amsProxy->GETRaw('xscj/'.$match[1],array()); + else + return file_get_contents(dirname(__FILE__).'/noneScore.jpg'); + + } + + public function parse($dom,$raw) { + return $raw; + } +} \ No newline at end of file diff --git a/libs/AmsProxy/functions/noneCourse.jpg b/libs/AmsProxy/functions/noneCourse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..965175f986ea84960cc54b3924e59c974ec45e24 GIT binary patch literal 18340 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 literal 0 HcmV?d00001 diff --git a/libs/AmsProxy/functions/noneCourse_.jpg b/libs/AmsProxy/functions/noneCourse_.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70e7462ccbacc8f3a29dd9a4f45a699e652370d3 GIT binary patch literal 100959 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�r1b4OHy3ACT4v7HH_YrZ-krJ^v~ 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 A&j0`b literal 0 HcmV?d00001 diff --git a/libs/AmsProxy/functions/noneScore.jpg b/libs/AmsProxy/functions/noneScore.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39a857db68132b8cf60f7a99ba12c91d2f51a16f GIT binary patch literal 9698 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 QAO0U5{QtZMz!q@ef8vA z6imlZ%jx(l!lfXq!pXu_WS4~t$7P$G``|2U&XT9R`#cG41Z=brDqWsulng_G zOBe9Aq$h~m=pVNkSc`L}>q)R5Qb<}))QOwVrQ5H46@bLAvWW5gKY0G6#)~W_JtEH3 zP8u>FjY(K@akAB;3qa`n&$d-3Mk7|oyBbWc-}=^l;=m0ZWqXQad9nE~M&Pf_Ov*$5 zMc5hw>_MEov5;sq+bhf2CN;XTchhSgyyYpgJCkRCYxFhNr=nJGLh|f{5iG-#zHoN9 ze97G$3}0zEw`y@?;*REy)D}~~P_K#I;^)Ix6oAI^rbpT|BpO0#y{=KgJZ+^bl<{LJ z_pXL9zA5B-n_tB|!YOQIIhVLYXhFtcw`i+1WdHd*e0JtJQm_9aX%b!R2aP>_7PUDo z0F5uZ$@2$u^#Ly$B#x*;&;{a~@%}lbi@O1I><)6@pyuiw;|_-XrRs=R?^#Y*A~(nH#uE z6&)b`#7wh-eq$x(hjs(U{;_ty`J(btCf+V5zcG|9&nTl2L6N1jnx`h&<-S2+m3ukP zo&(|b3J;YlDtyLNXBvCEye(xKR8KY>|MGJa947!x6_Y7Mt_~15y)&zWOwt%g=;9S)ijj$ zf+=@b;Jvju_2B~0mx7J0Jih^dL#_>fl)oPkfTHrh2|zp0#*wD2|hX$j;oiT_e=Fr`12EF=f1=}8crfp+?Ar$+% z@rKYL_l)pW-DsOAIM*6=hZUYo*H)O%)o}6OT5XBAT$Abj_~+&D*-O=rH%T8YZ_zg{^W4*U8t8b>v#2q8Dq!Hr z)4`|_Ve&EpP|LnKOsid_r5ih#OvDMT7Q9_P$eCN>+PvVz=G_=4-g~`zv>MU8P8}KL|s}7g7GVMyR!DON8(AvAqVVO})WYaA9Oj zjB+;vHlp6<)$6JwnSenp;0ngPs70JbF{Y@1q5l14^kH5ktM*wKR*DC%0aS|TN28w< zegZNm6ze4TxHXL4_$oj#3Hpts9q9h8d-;up>p&MuP5^pH;`c+;8e^unl~(B+&3W?J z$2P8biR2K=w!P+^iErUX)(@hPg+m4b_30C0N8~vDtAPg#!4#htKJCsw8Nu6zFk(hZ z+jiT;n&bG~EdfZEFdkt~Qua(i4+}swXY-bt>3N{YXs}r1I9>iJUw6UM8~OBoX z!KF{P)!&~C19JlS#psIav}%WeA6;eo-Cm$u7pxmh7oGX1gSwf*e65L&Hd)#VPn;zv zE$~f8c`9Q3{M#;T&hknCQOex*i9nwDQ*Kr73e~w+I7@7ECcSS52{+xy* zyN1$zmve9~ML&mqvtsiOB0GW{+g)ytkg|{@f6wn5c%yDRQS`8(a8>(utO(^->RX|| z%HXo$hB}rIsGobw@}PCL^P07C$yfZ9?yHQLD2Z9DXYr(Agd;BtF91E6yuGe{xdFC; z@wUwxfhu1(3;O?ImCaybcA97a4C&wmJ9U<78B2-UNjVHW{Yd^r(Pw8QPg(oJ{-HvGPIzD8|MacZ6yea^IoPY2C24*2c7OZPt<6-48J;FD&BX zGpOm|^Cd|^ln5tExScKF$Mpl4957Hn-H;lOkwM8%Yd^{RqugBnX|DK4Fe)@8Uo%0*vI!(s#|~i_WW$#kAJQ*>abg`ZeJQGjqr64b1OJO0K(}f5p+-vKx&~^ zq}rts-rkZ(*)Mj=F+Z@gto6s#qtu|IU;KB+gdGT<$*+yt|HLSA*x9Hmt&`tlCkK2- z?||j*WHY~TzuL&L#%X#v@30Sf_Mx<%5qAI6vT&7{sQvhQ2ga~>eyN|CPFM>u^JVv< zMhauNA>^47fw1IDS&TY1^u7ittZaZEe95^~gY>M)`r0z;1}!?iUVA7w7E9yruWn*% zGXmM7r{W>(Tk-FJAx`TVMq|%!je1G)rT*$qB;qdusy~DY$a#;OS z$$4K=clt->wNMTMxT2uX=#j$!VuY^?Brf!=w74Lp0upCO;iTGnn9g-A$AT#Bx)WPbWY)W<%~ozoFN?Yocr zKwa&Pd`ZpnfF2)5&r=8DE&*}$V9j56tvq(zMfP$UO;a<+U|yrgc)sp4p)L*azDZKo z=d0QU?D9nvBqrpMYs&tYfgEL%EpP2hF8ZVVzQW8))N|b(IPYhZ;Od!x(Uq+s*GW68 zh*%BhdnrdbMeNQF?H_8K24I7|aSnjcFzP&;QJyJnud&{6BXrAlvVB<1^ZTB%w+}nk zf9_+_CT=Mhh}}MdYF6Wv0jpdm^q{{Qu*kKUr;6DrVp=@Ft%fEyb4m1(rQ$>0pS&Nx zkw)r$zvlVIwmRh;O%gq~@pu)a|MBlEO>W#rnj@Vw)I?Gz)L>dS9!97Zs4 zOb!1rrz&sFw4fCq?<@9qo*p}!3oG9lBCR^o z*%5JTR5{2zL67aijMp0~tY~P;(MxoWwcxo{%8rVAT{pPC$FyOly~P}6-~j}DBQi*; zBV0>k;{k7ORpju!g>D=;#U?o%|ML2FY&)9NRAZCMsTmApMKDfs|NODwRFi21d4viO zAFL`?Xhds0^;H!s7m<7((&@cvG}YfahCama2#=O%qMIg!eV z1NWFUPFZ!Z54Dx}M9p+|t4w8IdEt4(JzdxmTq>Yn)GlYuIYB}l#0SQi@{M`d*!>Bn z>lhUu-`MhT8u~TXS)cPP3$Kr_LDK4E;sJB8^o_Kihww zfzxMeVOfzplY#2s>gK%(HMqpJv3#V*xMBKIf%VrasK1)nKb=-D3j9B1Hkrp5BTNJQ zsvF2*`31TSN${&Z)2?rd-Q64-^aP+x@<3H={X18eq7oPV`W3U>9p4F}^BGwlZFZKx zl-&#Axb=Mm=jeCpumET877!0cGSA=-4K+4N|4w+JB!~ zg-Hoyor*l#x`lbf7w1_F@lMjIyG{p+scpSluFDKvQ2JY;^=^k|q~7kXPYqWB58eSg z5R~{`S_a$MHpanhC!;(~o+nUS2<)P^WSKrTk9BhxTI-clf1B=n>{bo#kB*EP1<-uTyMG^r8&dt69W#qc6%_g_9S1FJ07 zi+6jzVoY+=-bIx6x@HfQeszMtyjr>bC?pU%?P5to=h2wsSiahmQq%T4v40x(Z4;;9 zLN`6L0Ty0b+9+6m24 zTdH7}4=$c%Q=g#Rtf`B+vMH7|Lt#li^8-%szQ2=|cPS_+SDg1ccO{0Hh`FIHjfxtv zPr`9ilPQ{`=5_mW7o94Adb*32u`RDq%Wdpl?}gh1VI7)X-A5%5{W%?m^N!A+f?U={ zoL=sW2?ubKW;m-`+Z$RbiV#4~(TSQ_f;mc$aT{|xH;93ko~;5jY1C%~6#zyX@0SD$ zTEMc^aCxa;8t1BPC(FxjXL{Qe7mtro+Yre8&mCud4eF8uR^Fvu46NjThe+F5@PAM% zu^pwoKCO7{ebm|a@C+?|;P~4GcbNM^mM!H40v0Okru&Sfpj}OEzmxs<@|h#g!vjT# zRS=$1s1vKULjX$2>$y+8iiR4>QsoSlSmA2#>wwY?PERcY<`L zTh;tL3ir$tU)!Rs%J1PT`k2O9$wV&uIkAg|J?Wn9Ooi^zw|{zAY*=32s;)aWtGn_% zcG=N9yAgWoaCnemC-%^ct~-aRZf!*Q>QxJW6~K5y#s~WkI^G>0bTlf2uTeUi!7^w& znDF$pOe7+M6SgjyB5q7$?rZHHy-|xHBIcl3J=HE>Hq)M7?DQ}nHB=~70Fq*H&k0LxQX6-+MFv>51i!M!8jHcR=0BK5Jf0P0VmIp^D9IASp}c1vC~R$1HafI?uC@> zPRNDI$eBy^g;mcy+q{hxfFMI8Zb?3ji0j@uapI|@_ zvJ|4dl*%5bn|!2*uxr~PiC_uT>3kq;xp8;Nk1M^AnOgEg>45KECr-C@l4_mo!H(s= z%J;hzt}VV2wtth;ZsSR`T1F{rh(`UAm#9&c#PeXA^m}GV;~=u*Ckr}}Spl!T-oLn_ z1v~O9vrFrTiz?6^m7T`f4yQ^Gp~3M~Eh03Hwb*Lqnr7NT)PSwdqb)|(HDR}Hj(#}( z_Q$xeZ@-apIwbV2UZTTPjgf{~65dPanW(5)Q4Rkj#J@99$Z{t{?BLL&bNm37%Bs< zGK;Z3o--j4-hV8Pl?8m89H&eScm|icqp$(N(cMn=##~eo+JXgX1IJNua(yqRu#$k= z)a>K(oS4%<(zM$5xglg2xYFlLugUAcl4hflg12XGO$@ztcii9DDJ&G(J+va83cQnI zIwHIPQo+@KCy4)8(0F4{N0;j5!3$eUgN|gss&kV!8+15_nEB}} z^M0WG=Bq0eGzYQ4M>k8(-li{XzJGI27wgm8v>UycQp_{#GkJ#pP`qgg8wz&KNNhlu zM%f-}VmbmU+|$5NCs=eHtPSL~5F|2B^S^3P?xX(z@QWSBbfaM1neFeHE)_j>QaYDb zZCZftslfghoNXYLHTQ)bBs3Q>Fi#U^S`MAN^!+N!a~yT6|IUqFS^foko1R5z#L~LN zv!o9V?bKNMOJ>q-ser2$M68tTNYx?(5bvRBK!;u|QC|Q!zQb6yM7Iq#P>r(#uU~QX z>03FRFdJndez|#T$5XQZ+C3LztIm7dkieR!D`P8(mPysPs^|?eB?;fO4$pSZwPhcj zo@kbvq%MAU)% z`yT$aFgNdQI2l@RUdTjd3{5f-d&eWHU}g+m3)Gw1(NSV9p0noT2M@c4c0>=der1Ad zGduS1oC`5XAdGJvsUGHH$vx=e!#y<&9D!J9S9GM?_N`42oH`hK;g7H1i8LManG%3n z_j=MgADG53F{iS%?k2}l`+CBA4(HST zO?bViacn1BjW7LnR2vtZOt5km-lQZ@41I`7P`>#PVQ(aobgt?N^Zbw*Ziwz>5_~_( zD>DXUQl_KH8c&e-g|vdlLZ{DCm+}dFnt&crAm6omO_fn-_z z#idR7;^cvaQ(Jy({_}KyQF{s_8$`r0CJ7Hd0HLil-o_t?mJsF$ zD?=G_tHSG?vICeSF8%ScbtUCC!elLM!iVVko&94Nx45aG$j4!6A=* z|4`>E$U$XMC5KeWiDPG$ik1c^dZj}5q#kl7bOBxhkXRd#NALg9KZR)pt4C&^2E597 za%}VX1P0H3D)~H+yV$n79Uis!+s~lrdy3vYW*h0wtL>2m&+odP&3gi=jBk^_pI05< z+61OiTN#-1EbJF12#9ONBZ<@fO0aMXf^oyJ>Am{talJPt$m_m76PZzF!2N^o&d-_O zd0zkyyfCS6?6FM$yddLAS$P>g=-apG?z_DG-mKBR_SRxwc-5q?E@C>MJWI=5s4a`- z_Ry4IjP3%nQc*g9HI2I0jb^I2NC1GE~p}Oz6)&mHQ1J zJ}QfSibanR6?xXvrn`fVpd{F5sV&T%@YHuMrB^0>{u&jJnXgTwoM z#xwnxSaU98bi-zda}8K5Lw~2JjIJ~6zmS;^))LlBlT78yYn3^|)4Zrn@iHH7lyEJ# z=UZlV^4x7u*^7{tyuser->logout(false); + // Yii::app()->user->logout(false); $this->redirect(array('index')); } } \ No newline at end of file diff --git a/models/Common.php b/models/Common.php new file mode 100644 index 0000000..e88d577 --- /dev/null +++ b/models/Common.php @@ -0,0 +1,6 @@ +findAll(array( 'order' => 'time DESC', )); - + $messages = array(); foreach ($_messages as $message) { if ($message->sender == 0 && $message->receiver != 0) { $messages[$message->receiver]['sender'] = $message->_receiver; diff --git a/modules/admin/controllers/HomeController.php b/modules/admin/controllers/HomeController.php index 190b030..144616b 100644 --- a/modules/admin/controllers/HomeController.php +++ b/modules/admin/controllers/HomeController.php @@ -3,7 +3,7 @@ class HomeController extends AdminController { public function actionIndex() { $this->render('index', array( 'studentCount' => Student::model()->count( - 'last_login_time>:time', array( + 'last_login_time>=:time', array( 'time' => date('Y-m-d'), ) ), diff --git a/modules/admin/controllers/StatsController.php b/modules/admin/controllers/StatsController.php index 7573c7d..3aaffb6 100644 --- a/modules/admin/controllers/StatsController.php +++ b/modules/admin/controllers/StatsController.php @@ -16,11 +16,11 @@ public function actionIndex() { while (($student = $reader->read()) !== false) { $archives = (array)json_decode($student['archives']); $college = isset($archives['院(系)/部']) ? $archives['院(系)/部'] : '未知'; - $discipline = isset($archives['专业']) ? $archives['专业'] : '未知'; - $grade = $archives['入学年份']; - $nation = isset($archives['民族']) ? $archives['民族'] : null; + $discipline = isset($archives['专    业']) ? $archives['专    业'] : '未知'; + $grade = '20' . substr($archives['行政班级'],0,2); + $nation = isset($archives['民    族']) ? $archives['民    族'] : null; - $stats['gender'][$archives['性别']]++; + $stats['gender'][$archives['性    别']]++; /** 年级统计 */ if (array_key_exists($grade, $stats['grade'])) diff --git a/modules/admin/views/feedback/index.tpl b/modules/admin/views/feedback/index.tpl index 9137523..8ace14d 100644 --- a/modules/admin/views/feedback/index.tpl +++ b/modules/admin/views/feedback/index.tpl @@ -50,7 +50,7 @@ data-toggle="modal" data-json='<%= $group['sender']->archives; %>'> - <%= $archives['行政班级'] . ' ' . $archives['姓名'] %> + <%= $archives['行政班级'] . ' ' . $archives['姓    名'] %> diff --git a/modules/admin/views/home/index.tpl b/modules/admin/views/home/index.tpl index c825c02..ea9f08b 100644 --- a/modules/admin/views/home/index.tpl +++ b/modules/admin/views/home/index.tpl @@ -1,13 +1,13 @@ +

今日使用人数:<%= $studentCount %>

- CNZZ 统计的查看密码是:amsproxy +

diff --git a/modules/admin/views/layouts/main.tpl b/modules/admin/views/layouts/main.tpl index 9860b33..c374155 100644 --- a/modules/admin/views/layouts/main.tpl +++ b/modules/admin/views/layouts/main.tpl @@ -9,7 +9,7 @@ <% if ($this->pageTitle) echo $this->pageTitle . ' - '; %> - 相思青果后台管理 + 后台管理 @@ -42,7 +42,7 @@ logo - 相思青果后台管理 + 后台管理 <% endif %> + <% if ($message !== null): %> +
+ + + <%= $message %> +
+ <% endif %>
+ placeholder="密码" + value="<% if (isset($pwd)) echo $pwd; %>">
+ <% if ($captcha =='') echo ''; %>
-

+
+

- 密码默认是身份证后六位,建议登录后修改 -

+ 首次登陆时间变快了~~
+ 最近使用人数比较多,验证码还是不启用了~ +

diff --git a/modules/proxy/views/common/stats.tpl b/modules/proxy/views/common/stats.tpl index eb63975..cfd4dbb 100644 --- a/modules/proxy/views/common/stats.tpl +++ b/modules/proxy/views/common/stats.tpl @@ -1,14 +1,2 @@ - + diff --git a/modules/proxy/views/common/table.tpl b/modules/proxy/views/common/table.tpl index 16d27c4..e8793b7 100644 --- a/modules/proxy/views/common/table.tpl +++ b/modules/proxy/views/common/table.tpl @@ -5,3 +5,14 @@ $this->widget('ext.widgets.dataTable', array( 'data' => $data, 'isCollapse' => $isCollapse, )); + +$messageContent = isset($message) ? $message : null; +?> +
+
+ +

+ + +

+ \ No newline at end of file diff --git a/modules/proxy/views/course/tableImg.tpl b/modules/proxy/views/course/tableImg.tpl new file mode 100644 index 0000000..36b46ae --- /dev/null +++ b/modules/proxy/views/course/tableImg.tpl @@ -0,0 +1,8 @@ + +
+
+

+ + 可以长按保存到手机里面滴~
+ 点右上角的刷新可以获取最新的课表 +

\ No newline at end of file diff --git a/modules/proxy/views/home/about.tpl b/modules/proxy/views/home/about.tpl new file mode 100644 index 0000000..3d0cdbf --- /dev/null +++ b/modules/proxy/views/home/about.tpl @@ -0,0 +1,5 @@ +

+ 这套移动教务系统并非我们微报原创的,而是广西民族大学的两位11级,12级的师兄做出来,在这里谢谢他们的开源作品, + 所以我才能我拿来做二次开发的,见识到这么容易拓展的结构,不过因为是11,12级的师兄了,系统也有3年没更新了, + 我这边现在恢复了最常用的几个功能,还做了点优化,那个无验证码是部门老大提供支持的~,后面我会把现在微报的空课室也集成进去的 +

\ No newline at end of file diff --git a/modules/proxy/views/home/feedback.tpl b/modules/proxy/views/home/feedback.tpl index 9173fbb..a183fec 100644 --- a/modules/proxy/views/home/feedback.tpl +++ b/modules/proxy/views/home/feedback.tpl @@ -1,12 +1,5 @@ <% $this->pageTitle = '反馈'; %> -
- - - - 建议通过邮箱 <xiang.qiu@qq.com> 向我反馈,我会第一时间回复你~ - -
diff --git a/modules/proxy/views/home/index.tpl b/modules/proxy/views/home/index.tpl index a642f7a..34bd042 100644 --- a/modules/proxy/views/home/index.tpl +++ b/modules/proxy/views/home/index.tpl @@ -4,49 +4,49 @@

今天是 <%= date('Y 年 n 月 j 日'); %> - ,第 + , + <% if ($this->weekNumber() >= 0): %> + 第 <%= $this->weekNumber(); %> 个教学周。 + <% endif %> + <% if ($this->weekNumber() < 0): %> + 假期还有 + + <%= -$this->weekNumber(); %> + + 周喔~ + <% endif %>

- + - 今日课程 + 我的课表 我的成绩

- - -
- <% foreach ($examArrangement->tbody as $exam): %> -
-
-
- - <%= $exam[0] %> -
-
- - <%= $exam[1] %>(学分) -
-
- - <%= $exam[4] %> -
-
- - <%= $exam[5] %> -
-
- - <%= $exam[6] %>(座位号) -
-
-
- <% endforeach; %> -
+
+
+
+
+

+ Update log +

+

+ 7/03 : 增加辅修成绩查看, 加快首次登陆时间~
+ 6/28 : 修复成绩查看~现在设定为6/25号之后查看这个期末的成绩,25之前是上个学期的成绩~
+ 4/11 : 增加入学以来的绩点统计~有什么功能需要的可以点右上角给我留言~~
+ 3/26 : 修复更新失败的bug~
+ 2/24 : 修复第几周的显示
+ 1/21 : 小调整,右上角有反馈按钮
+ 1/20 : 修复登陆逻辑,还有因为无法访问教务系统而导致的错误提示
+ 1/19 : 恢复课表查询,修复有效成绩部分同学因为没有下面没有小小的统计表导致的程序错误
+ 1/18 : 完善成绩查询,搞定右上角的刷新按钮,优化登陆逻辑还有缓存更新逻辑
+ 1/17 : 数据库迁移,无验证码自动登录,感谢老大
+

+ \ No newline at end of file diff --git a/modules/proxy/views/layouts/main.tpl b/modules/proxy/views/layouts/main.tpl index 851bef1..0b866f3 100644 --- a/modules/proxy/views/layouts/main.tpl +++ b/modules/proxy/views/layouts/main.tpl @@ -6,51 +6,28 @@ - + + <% if ($this->pageTitle) echo $this->pageTitle . ' - '; %> - 相思青果 + 惠大微报 - 移动 - 教务系统 - 惠州学院 - - - - - + + + <% $this->renderStyle(); %> - - -
-

- - 相思湖网站 Logo - +

+ 惠大微报

<% @@ -75,13 +52,13 @@ array( 'label' => '课程', 'items' => array( - array( - 'label' => ' 今日课程', - 'url' => array('/proxy/course/today'), - ), + //array( + // 'label' => ' 今日课程', + // 'url' => array('/proxy/course/today'), + //), array( 'label' => ' 课程表', - 'url' => array('/proxy/course/table'), + 'url' => array('/proxy/course/tableImg'), ), array( 'label' => ' 理论课程', @@ -93,17 +70,21 @@ 'label' => '成绩', 'items' => array( array( - 'label' => ' 统计', + 'label' => ' 原始成绩', 'url' => array('/proxy/score/stats'), ), + array( + 'label' => ' 有效成绩', + 'url' => array('/proxy/score/validScore'), + ), array( 'label' => ' 认定成绩', 'url' => array('/proxy/score/affirmScore'), ), - // array( - // 'label' => ' 有效成绩', - // 'url' => array('/proxy/score/effectiveScore'), - // ), + array( + 'label' => ' 绩点统计', + 'url' => array('/proxy/score/GPA'), + ), // array( // 'label' => ' 原始成绩', // 'url' => array('/proxy/score/originalScore'), @@ -134,10 +115,10 @@ 'label' => ' 修改密码', 'url' => array('/proxy/setting/password'), ), - array( - 'label' => ' 微信', - 'url' => array('/proxy/wechat/index'), - ), + //array( + // 'label' => ' 微信', + // 'url' => array('/proxy/wechat/index'), + //), ), ), array( @@ -147,13 +128,13 @@ 'label' => ' 反馈', 'url' => array('/proxy/home/feedback'), ), - array( - 'label' => ' 常见问题', - 'url' => array('/site/home/FAQ'), - ), + // array( + // 'label' => ' 常见问题', + // 'url' => array('/site/home/FAQ'), + // ), array( 'label' => ' 关于', - 'url' => array('/site/home/about'), + 'url' => array('/proxy/home/about'), ), ), ), @@ -171,6 +152,16 @@

<%= $this->pageTitle %>

- - - - - - + + + + + + <% $this->renderScript(); %>