nquocnghia/edtubx

Analyseur de l'emploi du temps de l'Université de Bordeaux

v2.0 2017-10-02 08:51 UTC

This package is not auto-updated.

Last update: 2024-12-16 07:19:02 UTC


README

Cette librairie permet de récupérer l'emploi du temps de différentes filières de l'Université de Bordeaux, de le filtrer en excluant les cours et de l'exporter en format iCalendar (.ics).

Build Status

Prérequis

L'extension php-xml est requis pour l'usage de cette librairie.

Installation

Vous pouvez télécharger directement cette librairie depuis la page Releases dans ce dépôt.

Vous pouvez aussi l'installer avec Composer. Il suffit de lancer la commande suivante dans le dossier de votre projet:

$ composer require nquocnghia/edtubx

Usage

Récupérer tous les URLS des emplois du temps
// 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']
Télécharger, analyser et export un emploi du temps
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();
Filtrage de l'emploi du temps

Parfois vous auriez des UEs en option ou qui ne vous concernent pas. Vous pouvez donc les exclure de votre emploi du temps pour le rendre plus lisible.

Cette librairie fournit une structure logique pour effectuer le filtrage:

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) {}
}

L'objet de type EdtUbx permet donc de filtrer l'emploi du temps avec la méthode filter(ICondition $condition). Le résultat renvoyé sera la copie filtrée de l'emploi du temps courant.

Exemple de filtrage

Un étudiant en L3 veut exclure de son emploi du temps:

  • l'emsemble des cours de l'UE J1IN6012
  • tous les TD de l'UE J1IN6011 qui ne sont pas pour le groupe 4
// !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
                )
            )
        )
);

Dépendances

License

See LICENSE

Tweet me @nquocnghia