polyhoraire 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Readme.rdoc +13 -0
- data/bin/polyhoraire +98 -0
- data/lib/google.atom.xsl +228 -0
- data/lib/google.xml.xsl +189 -0
- data/lib/google_exporter.rb +125 -0
- data/lib/html.xsl +256 -0
- data/lib/polyhoraire.rb +46 -0
- data/lib/polyhoraire/auth.rb +106 -0
- data/lib/polyhoraire/course.rb +41 -0
- data/lib/polyhoraire/period.rb +69 -0
- data/lib/polyhoraire/poly2XML.xsl +202 -0
- data/lib/polyhoraire/schedule.rb +55 -0
- data/lib/polyhoraire/trimester.rb +98 -0
- data/lib/setup.rb +25 -0
- data/test/asset/schedule.xml +115 -0
- data/test/polyhoraire/test_auth.rb +21 -0
- data/test/polyhoraire/test_course.rb +25 -0
- data/test/polyhoraire/test_period.rb +21 -0
- data/test/polyhoraire/test_schedule.rb +32 -0
- data/test/polyhoraire/test_trimester.rb +75 -0
- data/test/test_google_exporter.rb +29 -0
- data/test/ts_offline.rb +7 -0
- data/test/ts_online.rb +3 -0
- metadata +70 -0
data/Readme.rdoc
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
= Setup
|
2
|
+
|
3
|
+
rake setup
|
4
|
+
|
5
|
+
== Google API
|
6
|
+
|
7
|
+
Pour des raisons de sécurité, les identifiants pour accéder au google API ne sont pas inclus. Pour vous en procurer, vous pouvez accéder à la 'Google APIs console' avec le lien ci-desous
|
8
|
+
|
9
|
+
https://code.google.com/apis/console
|
10
|
+
|
11
|
+
= Tests
|
12
|
+
|
13
|
+
rake test
|
data/bin/polyhoraire
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#encoding : UTF-8
|
3
|
+
|
4
|
+
require 'polyhoraire'
|
5
|
+
require 'polyhoraire/auth'
|
6
|
+
require 'polyhoraire/schedule'
|
7
|
+
require 'google_exporter'
|
8
|
+
require 'rake'
|
9
|
+
require 'optparse'
|
10
|
+
|
11
|
+
options = {}
|
12
|
+
|
13
|
+
optparse = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: polyhoraire [options]"
|
15
|
+
|
16
|
+
options[:user] = ''
|
17
|
+
opts.on('-u', '--user USER', "Nom d'utilisateur") do |username|
|
18
|
+
options[:user] = username
|
19
|
+
end
|
20
|
+
|
21
|
+
options[:passowrd] = ''
|
22
|
+
opts.on('-p', '--password PASS', 'Mot de passe') do |password|
|
23
|
+
options[:passowrd] = password
|
24
|
+
end
|
25
|
+
|
26
|
+
options[:bday] = ''
|
27
|
+
opts.on('-d', '--date DATE', 'Date de fete') do |bday|
|
28
|
+
options[:bday] = bday
|
29
|
+
end
|
30
|
+
|
31
|
+
options[:trimester] = ''
|
32
|
+
opts.on('-t', '--trimestre TRIM', 'ID du trimester format : AAAAN ou AAAA = année et N = 1,2,3') do |trimester|
|
33
|
+
options[:trimester] = trimester
|
34
|
+
end
|
35
|
+
|
36
|
+
options[:calID] = ''
|
37
|
+
opts.on('-c', '--calendarID CALID', 'ID du calendrier google') do |calID|
|
38
|
+
options[:calID] = calID
|
39
|
+
end
|
40
|
+
|
41
|
+
options[:config] = false
|
42
|
+
opts.on('-C','--config','Configurer google API') do
|
43
|
+
options[:config] = true
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
opts.on('-h', '--help',"Afficher l'aide") do
|
48
|
+
puts opts
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def noConfigFound?
|
54
|
+
true unless File.exists?(Poly::userConfDir + '/google-api.yaml')
|
55
|
+
end
|
56
|
+
|
57
|
+
def fetchTrimesters
|
58
|
+
require 'open-uri'
|
59
|
+
config = open(Poly::userConfDir + '/trimesters.yaml', 'wb')
|
60
|
+
gitConf = open('https://raw.github.com/flatzo/polyhoraire/master/conf/trimesters.yaml')
|
61
|
+
config.write(gitConf.read)
|
62
|
+
config.close
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
optparse.parse!
|
67
|
+
puts options[:user].to_s + options[:passowrd].to_s + options[:bday].to_s
|
68
|
+
unless options[:config]
|
69
|
+
raise OptionParser::MissingArgument if options[:user] == ''
|
70
|
+
raise OptionParser::MissingArgument if options[:passowrd] == ''
|
71
|
+
raise OptionParser::MissingArgument if options[:bday] == ''
|
72
|
+
raise OptionParser::MissingArgument if options[:trimester] == ''
|
73
|
+
raise OptionParser::MissingArgument if options[:calID] == ''
|
74
|
+
end
|
75
|
+
|
76
|
+
Poly::userConfDir = File.expand_path('~/.polyhoraire/conf')
|
77
|
+
|
78
|
+
if noConfigFound? or options[:config]
|
79
|
+
require 'setup'
|
80
|
+
|
81
|
+
FileUtils.makedirs Poly::userConfDir
|
82
|
+
|
83
|
+
Setup.google
|
84
|
+
|
85
|
+
exit if options[:config]
|
86
|
+
end
|
87
|
+
|
88
|
+
fetchTrimesters
|
89
|
+
|
90
|
+
auth = Poly::Auth.new
|
91
|
+
|
92
|
+
auth.connect(options[:user].to_s,options[:passowrd].to_s,options[:bday].to_s)
|
93
|
+
|
94
|
+
schedule = Poly::Schedule.new(auth,options[:trimester].to_i)
|
95
|
+
|
96
|
+
exporter = GoogleExporter.new
|
97
|
+
exporter.send(schedule,options[:calID])
|
98
|
+
|
data/lib/google.atom.xsl
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xsl:stylesheet version="1.0"
|
3
|
+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
4
|
+
xmlns = "http://www.w3.org/2005/Atom"
|
5
|
+
xmlns:str="http://exslt.org/strings"
|
6
|
+
xmlns:gd="http://schemas.google.com/g/2005"
|
7
|
+
xmlns:date="http://exslt.org/dates-and-times"
|
8
|
+
xmlns:batch="http://schemas.google.com/gdata/batch"
|
9
|
+
exclude-result-prefixes="str date" >
|
10
|
+
<xsl:param name="debutSession"/>
|
11
|
+
<xsl:param name="debutSessionB2"/>
|
12
|
+
<xsl:param name="debutRelache"/>
|
13
|
+
<xsl:param name="finRelache"/>
|
14
|
+
<xsl:param name="finRelacheB2"></xsl:param>
|
15
|
+
<xsl:param name="finSession"/>
|
16
|
+
<xsl:param name="calendrierCours"/>
|
17
|
+
<xsl:param name="calendrierLabs"/>
|
18
|
+
<xsl:param name="title"/>
|
19
|
+
|
20
|
+
|
21
|
+
<xsl:template match="/poly">
|
22
|
+
<xsl:if test="$debutSession = ''">
|
23
|
+
<xsl:message terminate="no">manque la date pour le debut de la session (format 'YYYYMMJJ')</xsl:message>
|
24
|
+
</xsl:if>
|
25
|
+
<xsl:if test="$debutSessionB2 = ''">
|
26
|
+
<xsl:message terminate="no">manque la date pour le debut de la session pour la semaine B2 (format 'YYYYMMJJ')</xsl:message>
|
27
|
+
</xsl:if>
|
28
|
+
<xsl:if test="$debutRelache = ''">
|
29
|
+
<xsl:message terminate="no">manque la date pour le debut de la relache (format 'YYYYMMJJ')</xsl:message>
|
30
|
+
</xsl:if>
|
31
|
+
<xsl:if test="$finSession = ''">
|
32
|
+
<xsl:message terminate="no">manque la date pour la fin de la session (format 'YYYYMMJJ')</xsl:message>
|
33
|
+
</xsl:if>
|
34
|
+
<xsl:if test="$finRelache = ''">
|
35
|
+
<xsl:message terminate="no">manque la date pour la fin de la relache (format 'YYYYMMJJ')</xsl:message>
|
36
|
+
</xsl:if>
|
37
|
+
<xsl:if test="$finRelacheB2 = 'http://schemas.google.com/g/2005'">
|
38
|
+
<xsl:message terminate="no">manque la date pour la fin de la relache pour la semaine B2 (format 'YYYYMMJJ')</xsl:message>
|
39
|
+
</xsl:if>
|
40
|
+
|
41
|
+
<xsl:element name="feed" namespace="http://www.w3.org/2005/Atom">
|
42
|
+
|
43
|
+
<xsl:element name="title">
|
44
|
+
<xsl:attribute name="type">text</xsl:attribute>
|
45
|
+
<xsl:value-of select="$title"/>
|
46
|
+
</xsl:element>
|
47
|
+
<xsl:element name="category">
|
48
|
+
<xsl:attribute name="scheme">http://schemas.google.com/g/2005#kind</xsl:attribute>
|
49
|
+
<xsl:attribute name="term">http://schemas.google.com/g/2005#event</xsl:attribute>
|
50
|
+
</xsl:element>
|
51
|
+
<xsl:for-each select="horaire/evenement">
|
52
|
+
<xsl:element name="entry">
|
53
|
+
|
54
|
+
<xsl:element name="batch:id">
|
55
|
+
<xsl:value-of select="position()"/>
|
56
|
+
</xsl:element>
|
57
|
+
<xsl:element name="batch:operation">
|
58
|
+
<xsl:attribute name="type">insert</xsl:attribute>
|
59
|
+
</xsl:element>
|
60
|
+
<xsl:element name="category">
|
61
|
+
<xsl:attribute name="scheme">http://schemas.google.com/g/2005#kind</xsl:attribute>
|
62
|
+
<xsl:attribute name="term">http://schemas.google.com/g/2005#event</xsl:attribute>
|
63
|
+
</xsl:element>
|
64
|
+
<xsl:call-template name="event">
|
65
|
+
<xsl:with-param name="dateDebutB1" select="$debutSession"/>
|
66
|
+
<xsl:with-param name="dateDebutB2" select="$debutSessionB2"/>
|
67
|
+
<xsl:with-param name="dateFin" select="$debutRelache"/>
|
68
|
+
</xsl:call-template>
|
69
|
+
</xsl:element>
|
70
|
+
</xsl:for-each>
|
71
|
+
</xsl:element>
|
72
|
+
</xsl:template>
|
73
|
+
|
74
|
+
<xsl:template name="jour">
|
75
|
+
<xsl:choose>
|
76
|
+
<xsl:when test="moment/@jour=1">MO</xsl:when>
|
77
|
+
<xsl:when test="moment/@jour=2">TU</xsl:when>
|
78
|
+
<xsl:when test="moment/@jour=3">WE</xsl:when>
|
79
|
+
<xsl:when test="moment/@jour=4">TH</xsl:when>
|
80
|
+
<xsl:when test="moment/@jour=5">FR</xsl:when>
|
81
|
+
</xsl:choose>
|
82
|
+
</xsl:template>
|
83
|
+
|
84
|
+
<xsl:template name="interval">
|
85
|
+
<xsl:choose>
|
86
|
+
<xsl:when test="moment/@semaine = 'B1' or moment/@semaine = 'B2'">2</xsl:when>
|
87
|
+
<xsl:otherwise>1</xsl:otherwise>
|
88
|
+
</xsl:choose>
|
89
|
+
</xsl:template>
|
90
|
+
|
91
|
+
<xsl:template name="dateDebut">
|
92
|
+
<xsl:variable name="duration">P<xsl:value-of select="moment/@jour"/>D</xsl:variable>
|
93
|
+
<xsl:choose>
|
94
|
+
<xsl:when test="moment/@semaine = 'B2'">
|
95
|
+
<xsl:for-each select="str:tokenize(date:add($debutSessionB2,$duration),'-')">
|
96
|
+
<xsl:value-of select="."/>
|
97
|
+
</xsl:for-each>
|
98
|
+
</xsl:when>
|
99
|
+
<xsl:otherwise>
|
100
|
+
<xsl:for-each select="str:tokenize(date:add($debutSession,$duration),'-')">
|
101
|
+
<xsl:value-of select="."/>
|
102
|
+
</xsl:for-each>
|
103
|
+
</xsl:otherwise>
|
104
|
+
</xsl:choose>
|
105
|
+
</xsl:template>
|
106
|
+
<xsl:template name="dateRetourRelache">
|
107
|
+
<xsl:choose>
|
108
|
+
<xsl:when test="moment/@semaine = 'B2'"><xsl:value-of select="$debutRelacheB2"/></xsl:when>
|
109
|
+
<xsl:otherwise><xsl:value-of select="$debutRelache"/></xsl:otherwise>
|
110
|
+
</xsl:choose>
|
111
|
+
</xsl:template>
|
112
|
+
|
113
|
+
<xsl:template name="debut">
|
114
|
+
<xsl:call-template name="dateDebut"></xsl:call-template>
|
115
|
+
<xsl:text>T</xsl:text> <xsl:if test="str:tokenize(moment/@debut,':')[1] < 10">0</xsl:if>
|
116
|
+
<xsl:value-of select="str:tokenize(moment/@debut,':')[1]"/>
|
117
|
+
<xsl:value-of select="str:tokenize(moment/@debut,':')[2]"/>
|
118
|
+
<xsl:text>00</xsl:text>
|
119
|
+
</xsl:template>
|
120
|
+
|
121
|
+
<xsl:template name="heure">
|
122
|
+
<xsl:param name="heure"/>
|
123
|
+
|
124
|
+
<xsl:if test="str:tokenize($heure,':')[1] < 10">0</xsl:if>
|
125
|
+
<xsl:value-of select="str:tokenize($heure,':')[1]"/>
|
126
|
+
<xsl:value-of select="str:tokenize($heure,':')[2]"/>
|
127
|
+
<xsl:text>00</xsl:text>
|
128
|
+
</xsl:template>
|
129
|
+
|
130
|
+
<xsl:template name="date">
|
131
|
+
<xsl:param name="date"/>
|
132
|
+
<xsl:param name="jour"/>
|
133
|
+
|
134
|
+
<xsl:variable name="duration">P<xsl:value-of select="$jour"/>D</xsl:variable>
|
135
|
+
|
136
|
+
<xsl:for-each select="str:tokenize(date:add($date,$duration),'-')">
|
137
|
+
<xsl:value-of select="."/>
|
138
|
+
</xsl:for-each>
|
139
|
+
</xsl:template>
|
140
|
+
|
141
|
+
<xsl:template name="dateHeure">
|
142
|
+
<xsl:param name="date"/>
|
143
|
+
<xsl:param name="jour"/>
|
144
|
+
<xsl:param name="heure"/>
|
145
|
+
|
146
|
+
<xsl:call-template name="date">
|
147
|
+
<xsl:with-param name="date" select="$date"/>
|
148
|
+
<xsl:with-param name="jour" select="$jour"/>
|
149
|
+
</xsl:call-template>
|
150
|
+
<xsl:text>T</xsl:text>
|
151
|
+
<xsl:call-template name="heure">
|
152
|
+
<xsl:with-param name="heure" select="$heure"/>
|
153
|
+
</xsl:call-template>
|
154
|
+
<xsl:text>Z</xsl:text>
|
155
|
+
</xsl:template>
|
156
|
+
|
157
|
+
<xsl:template name="fin">
|
158
|
+
<xsl:call-template name="dateDebut"></xsl:call-template>
|
159
|
+
<xsl:text>T</xsl:text> <xsl:if test="str:tokenize(moment/@fin,':')[1] < 10">0</xsl:if>
|
160
|
+
<xsl:value-of select="str:tokenize(moment/@fin,':')[1]"/>
|
161
|
+
<xsl:value-of select="str:tokenize(moment/@fin,':')[2]"/>
|
162
|
+
<xsl:text>00</xsl:text>
|
163
|
+
</xsl:template>
|
164
|
+
|
165
|
+
<xsl:template name="event">
|
166
|
+
<xsl:param name="dateDebutB1"/>
|
167
|
+
<xsl:param name="dateDebutB2"/>
|
168
|
+
<xsl:param name="dateFin"/>
|
169
|
+
|
170
|
+
<xsl:variable name="sigle" select="./sigle"/>
|
171
|
+
<xsl:variable name="duration">P<xsl:value-of select="moment/@jour"/>D</xsl:variable>
|
172
|
+
<xsl:variable name="dateDebut">
|
173
|
+
<xsl:choose>
|
174
|
+
<xsl:when test="moment/@semaine = 'B2'">
|
175
|
+
<xsl:value-of select="$dateDebutB2"/>
|
176
|
+
</xsl:when>
|
177
|
+
<xsl:otherwise>
|
178
|
+
<xsl:value-of select="$dateDebutB1"/>
|
179
|
+
</xsl:otherwise>
|
180
|
+
</xsl:choose>
|
181
|
+
</xsl:variable>
|
182
|
+
|
183
|
+
<title><xsl:value-of select="$sigle"/><xsl:if test="@type != 'cours'"> [Lab]</xsl:if></title>
|
184
|
+
<content>
|
185
|
+
<xsl:value-of select="//cour[@sigle = $sigle]/nom"/>
|
186
|
+
- <xsl:text>Professeur : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/prof"/>
|
187
|
+
- <xsl:text>Groupe cour : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/groupeTheorie"/>
|
188
|
+
- <xsl:text>Groupe lab : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/groupeLaboratoire"/>
|
189
|
+
</content>
|
190
|
+
<xsl:element name="gd:transparency">
|
191
|
+
<xsl:attribute name="value">http://schemas.google.com/g/2005#event.opaque</xsl:attribute>
|
192
|
+
</xsl:element>
|
193
|
+
<xsl:element name="gd:eventStatus">
|
194
|
+
<xsl:attribute name="value">http://schemas.google.com/g/2005#event.confirmed</xsl:attribute>
|
195
|
+
</xsl:element>
|
196
|
+
<xsl:element name="gd:where">
|
197
|
+
<xsl:attribute name="valueString">
|
198
|
+
<xsl:value-of select="./local"/>
|
199
|
+
</xsl:attribute>
|
200
|
+
</xsl:element>
|
201
|
+
<xsl:element name="gd:recurrence">
|
202
|
+
<xsl:text>
|
203
|
+
DTSTART;TZID=America/Montreal:</xsl:text>
|
204
|
+
<xsl:call-template name="dateHeure">
|
205
|
+
<xsl:with-param name="date" select="$dateDebut"/>
|
206
|
+
<xsl:with-param name="jour" select="moment/@jour"/>
|
207
|
+
<xsl:with-param name="heure" select="moment/@debut"/>
|
208
|
+
</xsl:call-template>
|
209
|
+
<xsl:text>
|
210
|
+
DTEND;TZID=America/Montreal:</xsl:text>
|
211
|
+
<xsl:call-template name="dateHeure">
|
212
|
+
<xsl:with-param name="date" select="$dateDebut"/>
|
213
|
+
<xsl:with-param name="jour" select="moment/@jour"/>
|
214
|
+
<xsl:with-param name="heure" select="moment/@fin"/>
|
215
|
+
</xsl:call-template>
|
216
|
+
<xsl:text>
|
217
|
+
RRULE:FREQ=WEEKLY;INTERVAL=</xsl:text>
|
218
|
+
<xsl:call-template name="interval"/>
|
219
|
+
<xsl:text>;BYDAY=</xsl:text> <xsl:call-template name="jour"/>
|
220
|
+
<xsl:text>;UNTIL=</xsl:text>
|
221
|
+
<xsl:call-template name="dateHeure">
|
222
|
+
<xsl:with-param name="date" select="$dateFin"/>
|
223
|
+
<xsl:with-param name="jour">0</xsl:with-param>
|
224
|
+
<xsl:with-param name="heure">23:59:00</xsl:with-param>
|
225
|
+
</xsl:call-template>
|
226
|
+
</xsl:element>
|
227
|
+
</xsl:template>
|
228
|
+
</xsl:stylesheet>
|
data/lib/google.xml.xsl
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<xsl:stylesheet version="1.0"
|
3
|
+
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
4
|
+
xmlns:str="http://exslt.org/strings"
|
5
|
+
xmlns:date="http://exslt.org/dates-and-times"
|
6
|
+
exclude-result-prefixes="str date" >
|
7
|
+
<xsl:param name="debutB1"/>
|
8
|
+
<xsl:param name="debutB2"/>
|
9
|
+
<xsl:param name="fin"/>
|
10
|
+
|
11
|
+
<xsl:template match="/poly">
|
12
|
+
<xsl:if test="$debutB1 = ''">
|
13
|
+
<xsl:message terminate="no">Manque la date pour le debut de la periode B1 (format 'YYYYMMJJ')</xsl:message>
|
14
|
+
</xsl:if>
|
15
|
+
<xsl:if test="$debutB2 = ''">
|
16
|
+
<xsl:message terminate="no">Manque la date pour le debut de la periode B2 (format 'YYYYMMJJ')</xsl:message>
|
17
|
+
</xsl:if>
|
18
|
+
<xsl:if test="$fin = ''">
|
19
|
+
<xsl:message terminate="no">Manque la date pour la fin de la periode (format 'YYYYMMJJ')</xsl:message>
|
20
|
+
</xsl:if>
|
21
|
+
|
22
|
+
<xsl:element name="events">
|
23
|
+
<xsl:for-each select="horaire/evenement">
|
24
|
+
<xsl:element name="event">
|
25
|
+
<xsl:call-template name="event">
|
26
|
+
<xsl:with-param name="dateDebutB1" select="$debutB1"/>
|
27
|
+
<xsl:with-param name="dateDebutB2" select="$debutB2"/>
|
28
|
+
<xsl:with-param name="dateFin" select="$fin"/>
|
29
|
+
</xsl:call-template>
|
30
|
+
</xsl:element>
|
31
|
+
</xsl:for-each>
|
32
|
+
</xsl:element>
|
33
|
+
</xsl:template>
|
34
|
+
|
35
|
+
<xsl:template name="jour">
|
36
|
+
<xsl:choose>
|
37
|
+
<xsl:when test="moment/@jour=1">MO</xsl:when>
|
38
|
+
<xsl:when test="moment/@jour=2">TU</xsl:when>
|
39
|
+
<xsl:when test="moment/@jour=3">WE</xsl:when>
|
40
|
+
<xsl:when test="moment/@jour=4">TH</xsl:when>
|
41
|
+
<xsl:when test="moment/@jour=5">FR</xsl:when>
|
42
|
+
</xsl:choose>
|
43
|
+
</xsl:template>
|
44
|
+
|
45
|
+
<xsl:template name="interval">
|
46
|
+
<xsl:choose>
|
47
|
+
<xsl:when test="moment/@semaine = 'B1' or moment/@semaine = 'B2'">2</xsl:when>
|
48
|
+
<xsl:otherwise>1</xsl:otherwise>
|
49
|
+
</xsl:choose>
|
50
|
+
</xsl:template>
|
51
|
+
|
52
|
+
<xsl:template name="dateDebut">
|
53
|
+
<xsl:variable name="duration">P<xsl:value-of select="moment/@jour"/>D</xsl:variable>
|
54
|
+
<xsl:choose>
|
55
|
+
<xsl:when test="moment/@semaine = 'B2'">
|
56
|
+
<xsl:for-each select="str:tokenize(date:add($debutB2,$duration),'-')">
|
57
|
+
<xsl:value-of select="."/>
|
58
|
+
</xsl:for-each>
|
59
|
+
</xsl:when>
|
60
|
+
<xsl:otherwise>
|
61
|
+
<xsl:for-each select="str:tokenize(date:add($debutB1,$duration),'-')">
|
62
|
+
<xsl:value-of select="."/>
|
63
|
+
</xsl:for-each>
|
64
|
+
</xsl:otherwise>
|
65
|
+
</xsl:choose>
|
66
|
+
</xsl:template>
|
67
|
+
|
68
|
+
|
69
|
+
<xsl:template name="debut">
|
70
|
+
<xsl:call-template name="dateDebut"></xsl:call-template>
|
71
|
+
<xsl:text>T</xsl:text> <xsl:if test="str:tokenize(moment/@debut,':')[1] < 10">0</xsl:if>
|
72
|
+
<xsl:value-of select="str:tokenize(moment/@debut,':')[1]"/>
|
73
|
+
<xsl:value-of select="str:tokenize(moment/@debut,':')[2]"/>
|
74
|
+
<xsl:text>00</xsl:text>
|
75
|
+
</xsl:template>
|
76
|
+
|
77
|
+
<xsl:template name="heure">
|
78
|
+
<xsl:param name="heure"/>
|
79
|
+
|
80
|
+
<xsl:if test="str:tokenize($heure,':')[1] < 10">0</xsl:if>
|
81
|
+
<xsl:value-of select="str:tokenize($heure,':')[1]"/>
|
82
|
+
<xsl:value-of select="str:tokenize($heure,':')[2]"/>
|
83
|
+
<xsl:text>00</xsl:text>
|
84
|
+
</xsl:template>
|
85
|
+
|
86
|
+
<xsl:template name="date">
|
87
|
+
<xsl:param name="date"/>
|
88
|
+
<xsl:param name="jour"/>
|
89
|
+
|
90
|
+
<xsl:variable name="duration">P<xsl:value-of select="$jour"/>D</xsl:variable>
|
91
|
+
|
92
|
+
<xsl:value-of select="date:format-date(date:add($date,$duration),'YYYY-MM-DD')"/>
|
93
|
+
</xsl:template>
|
94
|
+
|
95
|
+
<xsl:template name="dateHeure">
|
96
|
+
<xsl:param name="date"/>
|
97
|
+
<xsl:param name="jour"/>
|
98
|
+
<xsl:param name="heure"/>
|
99
|
+
|
100
|
+
<xsl:call-template name="date">
|
101
|
+
<xsl:with-param name="date" select="$date"/>
|
102
|
+
<xsl:with-param name="jour" select="$jour"/>
|
103
|
+
</xsl:call-template>
|
104
|
+
<xsl:text>T</xsl:text>
|
105
|
+
<xsl:call-template name="heure">
|
106
|
+
<xsl:with-param name="heure" select="$heure"/>
|
107
|
+
</xsl:call-template>
|
108
|
+
<xsl:text>Z</xsl:text>
|
109
|
+
</xsl:template>
|
110
|
+
|
111
|
+
<xsl:template name="fin">
|
112
|
+
<xsl:call-template name="dateDebut"></xsl:call-template>
|
113
|
+
<xsl:text>T</xsl:text> <xsl:if test="str:tokenize(moment/@fin,':')[1] < 10">0</xsl:if>
|
114
|
+
<xsl:value-of select="str:tokenize(moment/@fin,':')[1]"/>
|
115
|
+
<xsl:value-of select="str:tokenize(moment/@fin,':')[2]"/>
|
116
|
+
<xsl:text>00</xsl:text>
|
117
|
+
</xsl:template>
|
118
|
+
|
119
|
+
<xsl:template name="event">
|
120
|
+
<xsl:param name="dateDebutB1"/>
|
121
|
+
<xsl:param name="dateDebutB2"/>
|
122
|
+
<xsl:param name="dateFin"/>
|
123
|
+
|
124
|
+
<xsl:variable name="sigle" select="./sigle"/>
|
125
|
+
<xsl:variable name="duration">P<xsl:value-of select="moment/@jour"/>D</xsl:variable>
|
126
|
+
<xsl:variable name="dateDebut">
|
127
|
+
<xsl:choose>
|
128
|
+
<xsl:when test="moment/@semaine = 'B2'">
|
129
|
+
<xsl:value-of select="$dateDebutB2"/>
|
130
|
+
</xsl:when>
|
131
|
+
<xsl:otherwise>
|
132
|
+
<xsl:value-of select="$dateDebutB1"/>
|
133
|
+
</xsl:otherwise>
|
134
|
+
</xsl:choose>
|
135
|
+
</xsl:variable>
|
136
|
+
|
137
|
+
<summary>
|
138
|
+
<xsl:value-of select="$sigle"/>
|
139
|
+
<xsl:choose>
|
140
|
+
<xsl:when test="@type != 'cours'">
|
141
|
+
<xsl:text> (</xsl:text>
|
142
|
+
<xsl:value-of select="//cour[@sigle = $sigle]/groupeLaboratoire"/>
|
143
|
+
<xsl:text>)</xsl:text>
|
144
|
+
<xsl:text> [Lab]</xsl:text>
|
145
|
+
</xsl:when>
|
146
|
+
<xsl:otherwise>
|
147
|
+
<xsl:text> (</xsl:text>
|
148
|
+
<xsl:value-of select="//cour[@sigle = $sigle]/groupeTheorie"/>
|
149
|
+
<xsl:text>)</xsl:text>
|
150
|
+
</xsl:otherwise>
|
151
|
+
|
152
|
+
</xsl:choose>
|
153
|
+
</summary>
|
154
|
+
<description>
|
155
|
+
<xsl:value-of select="//cour[@sigle = $sigle]/nom"/>
|
156
|
+
- <xsl:text>Professeur : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/prof"/>
|
157
|
+
- <xsl:text>Groupe cour : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/groupeTheorie"/>
|
158
|
+
- <xsl:text>Groupe lab : </xsl:text><xsl:value-of select="//cour[@sigle = $sigle]/groupeLaboratoire"/>
|
159
|
+
</description>
|
160
|
+
<location>
|
161
|
+
<xsl:value-of select="./local"/>
|
162
|
+
</location>
|
163
|
+
<recurrence>
|
164
|
+
<xsl:text>DTSTART;TZID=America/Montreal:</xsl:text>
|
165
|
+
<xsl:call-template name="dateHeure">
|
166
|
+
<xsl:with-param name="date" select="$dateDebut"/>
|
167
|
+
<xsl:with-param name="jour" select="moment/@jour"/>
|
168
|
+
<xsl:with-param name="heure" select="moment/@debut"/>
|
169
|
+
</xsl:call-template>
|
170
|
+
<xsl:text>
|
171
|
+
DTEND;TZID=America/Montreal:</xsl:text>
|
172
|
+
<xsl:call-template name="dateHeure">
|
173
|
+
<xsl:with-param name="date" select="$dateDebut"/>
|
174
|
+
<xsl:with-param name="jour" select="moment/@jour"/>
|
175
|
+
<xsl:with-param name="heure" select="moment/@fin"/>
|
176
|
+
</xsl:call-template>
|
177
|
+
<xsl:text>
|
178
|
+
RRULE:FREQ=WEEKLY;INTERVAL=</xsl:text>
|
179
|
+
<xsl:call-template name="interval"/>
|
180
|
+
<xsl:text>;BYDAY=</xsl:text> <xsl:call-template name="jour"/>
|
181
|
+
<xsl:text>;UNTIL=</xsl:text>
|
182
|
+
<xsl:call-template name="dateHeure">
|
183
|
+
<xsl:with-param name="date" select="$dateFin"/>
|
184
|
+
<xsl:with-param name="jour">0</xsl:with-param>
|
185
|
+
<xsl:with-param name="heure">23:59:00</xsl:with-param>
|
186
|
+
</xsl:call-template>
|
187
|
+
</recurrence>
|
188
|
+
</xsl:template>
|
189
|
+
</xsl:stylesheet>
|