nquocnghia / edtubx
波尔多大学时间表分析器
v2.0
2017-10-02 08:51 UTC
Requires
- php: >=5.6
- ext-xml: *
- eluceo/ical: ^0.8.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
This package is not auto-updated.
Last update: 2024-09-23 06:19:20 UTC
README
这个库允许您获取波尔多大学不同院系的时间表,过滤掉课程,并以 iCalendar (.ics) 格式导出。
先决条件
此库的使用需要 php-xml
扩展。
安装
您可以直接从该存储库的 发布页面 下载此库。
您也可以使用 Composer 安装它。只需在项目目录中运行以下命令即可
$ composer require nquocnghia/edtubx
用法
获取所有时间表的 URL
// cela retourne un array de 4 dimensions $urls = \QnNguyen\EdtUbxNS\Core\EdtIndex::fetch(); // 1st dimension: Licence|Master1|Master2 // 2nd dimension: Semestre1|Semestre2 // 3rd dimension: Série de cours (ie. IN601) // 4th dimension: <Nom du groupe de TD>|(rien) // exemple: l'url vers l'emploi du temps du 2è semestre du groupe A1 de la Licence Informatique (IN601) $url = $urls['Licence']['Semestre2']['IN601']['GROUPE A1']
下载、分析和导出时间表
use \QnNguyen\EdtUbxNS\Core\EdtUbx; // Initialiser l'objet EdtUbx $edt = EdtUbx::makeFromUrl($url); // ou bien si vous voulez remplacer le nom d'une/des UE(s) $edt = EdtUbx::makeFromUrl($url, [ 'codeUE1' => 'nouveau nom1', 'codeUE2' => 'nouveau nom2', ... ]); // Générer un fichier iCalendar (.ics) $edt->toICS();
时间表过滤
有时您可能有可选的 UEs 或与您无关的 UEs。因此,您可以将它们从时间表中排除,使其更易于阅读。
此库提供了进行过滤的逻辑结构
interface IContidion { /** * @return boolean */ function evaluate(EdtUbxItem $item); } // les tests abstract class PropertyCondition implements ICondition {} class MatchInString extends PropertyCondition {} class MatchInArray extends PropertyCondition {} // les opérateurs logiques abstract class PolyadicCondition implements ICondition {} class AndCondition extends PolyadicCondition {} class OrCondition extends PolyadicCondition {} class NotCondition extends PolyadicCondition {} // La classe CF (ConditionFactory) sert à générer les classes // de la famille ICondition en raccoursissant le syntax. class CF { public static function _string($propertyName, $regexPattern) {} public static function _array($propertyName, $regexPattern) {} public static function _and(ICondition ...$conditions) {} public static function _or(ICondition ...$conditions) {} public static function _not(ICondition $condition) {} }
因此,类型为 EdtUbx
的对象可以通过 filter(ICondition $condition)
方法过滤时间表。返回的结果将是当前时间表的过滤副本。
过滤示例
一个三年级学生想从其时间表中排除
J1IN6012
的所有课程- 所有不是为 组 4 的 TD
J1IN6011
// !J1IN6012 && !(J1IN6011 && td && !groupe4)) $filteredEdt = $edt->filter( CF::_and( CF::_not(CF::_string('code', 'J1IN6012')), CF::_not( CF::_and( CF::_string('code', 'J1IN6011'), CF::_string('category', 'td( machine)?'), CF::_not(CF::_string('notes', 'groupe( )?4')) // bien lu, parfois le groupe est indiqué dans 'notes' // et non pas dans 'groupes' T_T ) ) ) );
依赖关系
许可
见 LICENSE
向我发推文 @nquocnghia