WebsiteTools 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/dyn-site +7 -0
- data/bin/dyn-site.sh +78 -0
- data/bin/rebase_url +46 -0
- data/lib/workshop.rb +275 -0
- metadata +51 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5fe8a92c0f604827041d332d40b854d4008e3ce9
|
4
|
+
data.tar.gz: 74b0b3c6841fa9ac7825daa5892698992380b2bc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 410e3c78ac964540f8afb791c2d63a98cfb85c40b1dc89750f103c8251d906003bacfb4f389ae576b6892c0d9ff82578168df34ae9841176d5a3985c91eb5b9a
|
7
|
+
data.tar.gz: 02c4b7bfaf889a163a1a27cbfb2bd82859eff0792ce9c36464fb9d5e4bcebe7d6c031c2cd6b86e1aa58f7fcc1613afaf50353e8cf6939aa76acb888f69d88d26
|
data/bin/dyn-site
ADDED
data/bin/dyn-site.sh
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
Cmd=$1
|
4
|
+
|
5
|
+
#echo "Command: $Cmd"
|
6
|
+
|
7
|
+
if [ "$Cmd" != "" ]; then
|
8
|
+
Cmd="help"
|
9
|
+
fi
|
10
|
+
|
11
|
+
case $Cmd in
|
12
|
+
help)
|
13
|
+
echo "Aide:"
|
14
|
+
echo "----"
|
15
|
+
echo " dyn-site rebase <Conf>"
|
16
|
+
echo " dyn-site rebase-subdir <Subdir> <Prj> (Subdir=<User>/<PrjPath>)"
|
17
|
+
;;
|
18
|
+
rebase)
|
19
|
+
Conf=$2
|
20
|
+
if [ "${Conf}" = "" ]; then
|
21
|
+
exit
|
22
|
+
fi
|
23
|
+
PUBLIC_ROOT="$HOME/RodaSrv/public/users/${Conf}"
|
24
|
+
SITE_ROOT="$HOME/RodaSrv/.site/$Conf"
|
25
|
+
PAGES_ROOT="$SITE_ROOT/pages"
|
26
|
+
mkdir -p ${SITE_ROOT}
|
27
|
+
cp -R ${PUBLIC_ROOT}/* ${SITE_ROOT}/
|
28
|
+
cd ${PAGES_ROOT}
|
29
|
+
pages=$(ls *.html)
|
30
|
+
echo "pages to process: $pages"
|
31
|
+
for html in $pages
|
32
|
+
do
|
33
|
+
rebase_url --from /users/$Conf/ --to / $html
|
34
|
+
rebase_url --from /$Conf/ --to / $html
|
35
|
+
mv $html ..
|
36
|
+
done
|
37
|
+
cd $SITE_ROOT
|
38
|
+
rm -fr pages
|
39
|
+
;;
|
40
|
+
rebase-subdir)
|
41
|
+
Subdir=$2
|
42
|
+
if [ "${Subdir}" = "" ]; then
|
43
|
+
echo "Subdir doit être non vide!"
|
44
|
+
exit
|
45
|
+
fi
|
46
|
+
Prj=$3
|
47
|
+
if [ "${Prj}" = "" ]; then
|
48
|
+
echo "Prj doit être non vide!"
|
49
|
+
exit
|
50
|
+
fi
|
51
|
+
PUBLIC_ASSETS="$HOME/RodaSrv/public/users/${Subdir}/${Prj}"
|
52
|
+
PUBLIC_PAGES="$HOME/RodaSrv/public/pages/${Subdir}/${Prj}"
|
53
|
+
SITE_ROOT="$HOME/RodaSrv/.site/$Prj"
|
54
|
+
PAGES_ROOT="$SITE_ROOT/pages"
|
55
|
+
mkdir -p ${PAGES_ROOT}
|
56
|
+
cp ${PUBLIC_PAGES}/* ${PAGES_ROOT}/
|
57
|
+
cp -R ${PUBLIC_ASSETS}/* ${SITE_ROOT}/
|
58
|
+
cd ${PAGES_ROOT}
|
59
|
+
pages=$(ls *.html)
|
60
|
+
echo "pages to process: $pages"
|
61
|
+
for html in $pages
|
62
|
+
do
|
63
|
+
rebase_url --from /users/${Subdir}/${Prj}/ --to / $html
|
64
|
+
rebase_url --from /${Subdir}/${Prj}/ --to / $html
|
65
|
+
mv $html ..
|
66
|
+
done
|
67
|
+
cd $SITE_ROOT
|
68
|
+
rm -fr pages
|
69
|
+
;;
|
70
|
+
deploy)
|
71
|
+
Conf=$2
|
72
|
+
url="sfdsmqrk@ftp.sfds.asso.fr:$Conf/"
|
73
|
+
if [ "$3" != "" ]; then
|
74
|
+
url="$3"
|
75
|
+
fi
|
76
|
+
rsync -az $SITE_ROOT/* $url
|
77
|
+
;;
|
78
|
+
esac
|
data/bin/rebase_url
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
cur=0
|
4
|
+
opts={mode: :default, to: ""}
|
5
|
+
|
6
|
+
##p ARGV
|
7
|
+
|
8
|
+
while ["--dir","--mode","--from","--to","--help","--ext"].include? ARGV[cur]
|
9
|
+
##p [:cur,ARGV[cur]]
|
10
|
+
case ARGV[cur]
|
11
|
+
when "--dir","--help"
|
12
|
+
opts[ARGV[cur].to_sym]=true
|
13
|
+
cur += 1
|
14
|
+
when "--mode"
|
15
|
+
opts[:mode]==ARGV[cur+1].to_sym if ["default","href"].include? ARGV[cur+1]
|
16
|
+
cur += 2
|
17
|
+
when "--from","--to"
|
18
|
+
opts[ARGV[cur][2..-1].to_sym]=ARGV[cur+1]
|
19
|
+
cur += 2
|
20
|
+
when "--ext"
|
21
|
+
opts[ARGV[cur].to_sym]=ARGV[cur+1]
|
22
|
+
cur += 2
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
file=ARGV[cur]
|
27
|
+
opts[:help]=true unless file
|
28
|
+
if opts[:help]
|
29
|
+
puts "rebase_url [--dir] [--from <from_path>] [--to <to_path>] [--ext <extension>] file"
|
30
|
+
else
|
31
|
+
ext=opts[:ext] ? "."+opts[:ext] : ""
|
32
|
+
files=opts[:dir] ? Dir[File.join(file,"*"+ext)] : [file]
|
33
|
+
##p files
|
34
|
+
##p opts
|
35
|
+
files.each do |filename|
|
36
|
+
content=File.read(filename)
|
37
|
+
File.open(filename,"w") do |f|
|
38
|
+
case opts[:mode]
|
39
|
+
when :href
|
40
|
+
f << content.gsub(/\ href="#{opts[:from]}/," href=\""+opts[:to])
|
41
|
+
else
|
42
|
+
f << content.gsub(/#{opts[:from]}/,opts[:to])
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/workshop.rb
ADDED
@@ -0,0 +1,275 @@
|
|
1
|
+
module Workshop
|
2
|
+
def Workshop.format_first_name(first)
|
3
|
+
first.split(" ").map{|e| (e.split(/\-/).map{|e2| e2.capitalize}.join("-"))}.join(" ")
|
4
|
+
end
|
5
|
+
|
6
|
+
def Workshop.format_last_name(last)
|
7
|
+
last.gsub(/[éèëê]/,"e").gsub(/[ïî]/,"i").gsub(/[ôö]/,"o").upcase
|
8
|
+
end
|
9
|
+
|
10
|
+
def Workshop.format_full_name(name)
|
11
|
+
tmp=name.split(" ")
|
12
|
+
return ([Workshop.format_first_name(tmp[0])]+tmp[1..-1].map{|e| Workshop.format_last_name(e)}).join(" ")
|
13
|
+
end
|
14
|
+
|
15
|
+
def Workshop.format_full_name_index(name)
|
16
|
+
tmp=name.split(" ")
|
17
|
+
first=[Workshop.format_first_name(tmp[0])]
|
18
|
+
tmp.shift
|
19
|
+
while tmp[0][-1,1]=="."
|
20
|
+
first << Workshop.format_first_name(tmp[0])
|
21
|
+
tmp.shift
|
22
|
+
end
|
23
|
+
return (tmp.map{|e| Workshop.format_last_name(e)}+first).join(" ")
|
24
|
+
end
|
25
|
+
|
26
|
+
## For title with all upcase letters, apply the change
|
27
|
+
## dict allows badly transformed word to be corrected! (ex: type-i => Type-I)
|
28
|
+
def Workshop.prepare_title(title,dict={})
|
29
|
+
mots=title.split(" ")
|
30
|
+
if mots.map{|e| e == e.upcase}.all?
|
31
|
+
title2=(mots[0]==mots[0].upcase ? mots[0].capitalize : mots[0])
|
32
|
+
title2 = dict[title2] || title2
|
33
|
+
title2 += " " + (mots[1..-1].map{|e|
|
34
|
+
mot2=(e==e.upcase ? e.downcase : e)
|
35
|
+
dict[mot2] || mot2
|
36
|
+
}.join(" "))
|
37
|
+
Dyndoc.warn :title, [title,title2]
|
38
|
+
return title2
|
39
|
+
else
|
40
|
+
return title
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class Program
|
45
|
+
|
46
|
+
attr_reader :cfg, :prog, :event, :colors, :rooms, :subms, :guests, :root
|
47
|
+
|
48
|
+
def initialize(root,program_yml="program.yml",subms_csv="submission_browse.csv",guests_yml="guests.yml",contacts_csv="user_browse.csv")
|
49
|
+
@root=root
|
50
|
+
require 'yaml'
|
51
|
+
@cfg=YAML::load_file(File.join(@root,program_yml))
|
52
|
+
@event,@prog,@colors,@rooms=@cfg["event"],@cfg["program"],@cfg["colors"],@cfg["rooms"]
|
53
|
+
require 'csv'
|
54
|
+
@subms = CSV.read(File.join(@root,subms_csv))
|
55
|
+
@subms_extra = (@cfg["subms"] || {})
|
56
|
+
@guests=YAML::load_file(File.join(@root,guests_yml))
|
57
|
+
@contacts=CSV.read(File.join(@root,contacts_csv))
|
58
|
+
end
|
59
|
+
|
60
|
+
def cell_session(id) #guest or simple info
|
61
|
+
ev=@event[id]
|
62
|
+
is_talk=(ev.is_a? Hash and ev["speaker"])
|
63
|
+
sess={is_talk: is_talk}
|
64
|
+
if is_talk
|
65
|
+
sess[:room],sess[:chair],sess[:thema],sess[:aut_aff]="","","",""
|
66
|
+
sess[:type]=ev["type"]
|
67
|
+
sess[:room]=@rooms[ev["place"]]["name"] if ev["place"]
|
68
|
+
sess[:thema]=ev["thema"]+" : " if ev["thema"]
|
69
|
+
if ev["chairman"]
|
70
|
+
sess[:chair]=Workshop.format_full_name(ev["chairman"])
|
71
|
+
end
|
72
|
+
|
73
|
+
if ev["nb"] and ev["nb"]>1
|
74
|
+
sess[:nb]=ev["nb"]
|
75
|
+
sess[:authors]=[]
|
76
|
+
sess[:thema]=ev["thema"]
|
77
|
+
(1..ev["nb"]).each do |i| #
|
78
|
+
id2=id+"."+i.to_s
|
79
|
+
ev2={}
|
80
|
+
ev2[:id]=id2
|
81
|
+
ev2[:aut_aff]=Workshop.format_full_name(@guests[id2]["author"])+" ("+@guests[id2]["affiliation"]+")"
|
82
|
+
ev2[:title]=@guests[id2]["title"]
|
83
|
+
ev2[:index]=@guests[id2]["index"]
|
84
|
+
ev2[:abstract]=@guests[id2]["abstract"].strip.gsub("\u200B", "") #.gsub("%","\\%")
|
85
|
+
sess[:authors] << ev2
|
86
|
+
end
|
87
|
+
else
|
88
|
+
sess[:aut_aff]=Workshop.format_full_name(@guests[id]["author"])+" ("+@guests[id]["affiliation"]+")"
|
89
|
+
sess[:author]=Workshop.format_full_name(@guests[id]["author"])
|
90
|
+
sess[:author_index]=Workshop.format_full_name_index(@guests[id]["author"])
|
91
|
+
sess[:index]=@guests[id]["index"]
|
92
|
+
sess[:title]=@guests[id]["title"] || ev["title"]
|
93
|
+
sess[:abstract]=@guests[id]["abstract"].strip.gsub("\u200B", "") #.gsub("%","\\%")
|
94
|
+
end
|
95
|
+
else
|
96
|
+
sess[:title]=(ev.is_a? Hash and ev["title"]) ? ev["title"] : ev
|
97
|
+
end
|
98
|
+
sess
|
99
|
+
end
|
100
|
+
|
101
|
+
def last_subm(s_id) #s_id: id of submission
|
102
|
+
subm_res=@subms.select {|subm| subm[0]==s_id}[0]
|
103
|
+
if subm_res[5].include? ","
|
104
|
+
s_id2=subm_res[5].split(",")[-1]
|
105
|
+
#Dyndoc.warn :history, [s,s2]
|
106
|
+
subm_res=@subms.select {|subm| subm[0]==s_id2}[0]
|
107
|
+
end
|
108
|
+
subm_res
|
109
|
+
end
|
110
|
+
|
111
|
+
def subms_session(id)
|
112
|
+
chair=Workshop.format_full_name(@event[id]["chairman"] || "Maude Herateur")
|
113
|
+
chair="TBA" if @event[id]["chairman"]=="TBA"
|
114
|
+
sess={
|
115
|
+
topic: @event[id]["topic"],
|
116
|
+
chairman: chair,
|
117
|
+
place: @rooms[@event[id]["place"]]["name"] || "Room",
|
118
|
+
label: @event[id]["label"] || "Label",
|
119
|
+
subms: (@event[id]["subms"] || "").split(",").map{|e| e.strip}.map{|s| #
|
120
|
+
if s.to_i==0
|
121
|
+
@subms_extra[s] ? @subms_extra[s] : @event[s]
|
122
|
+
else
|
123
|
+
last_subm(s)
|
124
|
+
end
|
125
|
+
}
|
126
|
+
}
|
127
|
+
sess
|
128
|
+
end
|
129
|
+
|
130
|
+
def subm_info(subm)
|
131
|
+
begin
|
132
|
+
if subm.is_a? Array
|
133
|
+
authors=subm[4].split("|||").map do |author| #
|
134
|
+
tmp=author.split("&&&")
|
135
|
+
{
|
136
|
+
first_name: Workshop.format_first_name(tmp[0]).strip,
|
137
|
+
last_name: Workshop.format_last_name(tmp[1]).strip,
|
138
|
+
email: tmp[2],
|
139
|
+
institution: (tmp[3] || "").gsub("&","\\\\&")
|
140
|
+
}
|
141
|
+
end
|
142
|
+
title=subm[2].gsub(/[^[:print:]]/,' ')
|
143
|
+
else
|
144
|
+
title,authors=subm.gsub(/[^[:print:]]/,' '),[]
|
145
|
+
end
|
146
|
+
|
147
|
+
rescue
|
148
|
+
authors,title=[],""
|
149
|
+
Dyndoc.warn :subm, subm
|
150
|
+
end
|
151
|
+
info={id: subm[0], authors: authors, title: title, abstract: subm[3].gsub(/[^[:print:]]/,' ').gsub("\u200B", "")} #.gsub("%","\\%")}
|
152
|
+
end
|
153
|
+
|
154
|
+
def textab_cell_session(id,mode=:fr)
|
155
|
+
ev=@event[id]
|
156
|
+
begin
|
157
|
+
if ev.is_a? Hash
|
158
|
+
if ev["speaker"]
|
159
|
+
if ev["speaker"].include? " et "
|
160
|
+
speaker=ev["speaker"].split(" et ").map{|sp| Workshop.format_full_name(sp.strip)}.join(" et ")
|
161
|
+
else
|
162
|
+
speaker=Workshop.format_full_name(ev["speaker"])
|
163
|
+
end
|
164
|
+
end
|
165
|
+
room=@rooms[ev["place"]]["name"] if ev["place"]
|
166
|
+
if ev["chairman"]
|
167
|
+
chair=ev["chairman"]=="TBA" ? "TBA" : Workshop.format_full_name(ev["chairman"])
|
168
|
+
end
|
169
|
+
res=""
|
170
|
+
res << "\\textbf{"+ev["thema"]+"}" if ev["thema"]
|
171
|
+
res << ": " unless res.empty?
|
172
|
+
res << "\\textbf{"+speaker+ "}"
|
173
|
+
res << "\\\\"+ev["title"] if ev["title"]
|
174
|
+
if mode==:fr
|
175
|
+
res << "\\\\\\textit{Mod.} : "+chair+", \\textit{Amphi} : "+room
|
176
|
+
else
|
177
|
+
res << "\\\\\\textit{Chair}: "+chair+", "+room
|
178
|
+
end
|
179
|
+
else
|
180
|
+
res="\\textbf{"+ev+"}"
|
181
|
+
end
|
182
|
+
rescue
|
183
|
+
res="Problem id=#{id}"
|
184
|
+
end
|
185
|
+
|
186
|
+
res
|
187
|
+
end
|
188
|
+
|
189
|
+
def html_cell_session(id)
|
190
|
+
ev=event[id]
|
191
|
+
room,chair,speaker="","",""
|
192
|
+
if ev.is_a? Hash
|
193
|
+
if ev["speaker"]
|
194
|
+
if ev["speaker"].include? " et "
|
195
|
+
speaker=ev["speaker"].split(" et ").map{|sp| Workshop.format_full_name(sp.strip)}.join(" et ")
|
196
|
+
else
|
197
|
+
speaker=Workshop.format_full_name(ev["speaker"])
|
198
|
+
end
|
199
|
+
end
|
200
|
+
room=@rooms[ev["place"]]["name"] if ev["place"]
|
201
|
+
if ev["chairman"]
|
202
|
+
chair=Workshop.format_full_name(ev["chairman"])
|
203
|
+
end
|
204
|
+
res=""
|
205
|
+
res << "<strong>"+ev["thema"]+"</strong>" if ev["thema"]
|
206
|
+
res << ": " unless res.empty?
|
207
|
+
res << "<strong>"+speaker+ "</strong>"
|
208
|
+
res << "<br/>"+ev["title"] if ev["title"]
|
209
|
+
res << "<br/><em>Modérateur</em>: "+chair+", <em>Amphi</em>: "+room
|
210
|
+
res
|
211
|
+
else
|
212
|
+
res="<strong>"+ev+"</strong>"
|
213
|
+
end
|
214
|
+
res
|
215
|
+
end
|
216
|
+
|
217
|
+
def prepare_pdfs(from,to=nil)
|
218
|
+
return unless to
|
219
|
+
require 'fileutils'
|
220
|
+
@prog.each do |k,v|
|
221
|
+
v["table"].each do |l|
|
222
|
+
h,txt=l.split("->").map{|e| e.strip}
|
223
|
+
elts=txt.split(",").map{|e| e.strip}
|
224
|
+
elts.each {|elt| #
|
225
|
+
unless elt=="empty"
|
226
|
+
(@event[elt]["subms"] || "").split(",").map{|e| e.strip}.each{|s|
|
227
|
+
unless s.to_i==0
|
228
|
+
subm=last_subm(s)
|
229
|
+
if subm
|
230
|
+
upload_dir=subm[9]
|
231
|
+
subm_pdf=Dir[File.join(from,upload_dir,"*")]
|
232
|
+
if subm_pdf.length == 1
|
233
|
+
FileUtils.mkdir_p to
|
234
|
+
FileUtils.cp subm_pdf[0],File.join(to,"subm"+subm[0]+".pdf")
|
235
|
+
else
|
236
|
+
puts "Warnings: "+s+","+subm_pdf.inspect
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
}
|
241
|
+
end
|
242
|
+
}
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
def prepare_email_list
|
248
|
+
emails=[]
|
249
|
+
@prog.each do |k,v|
|
250
|
+
v["table"].each do |l|
|
251
|
+
h,txt=l.split("->").map{|e| e.strip}
|
252
|
+
elts=txt.split(",").map{|e| e.strip}
|
253
|
+
elts.each {|elt| #
|
254
|
+
unless elt=="empty"
|
255
|
+
(@event[elt]["subms"] || "").split(",").map{|e| e.strip}.each{|s|
|
256
|
+
unless s.to_i==0
|
257
|
+
subm=last_subm(s)
|
258
|
+
if subm
|
259
|
+
emails << @contacts.select{|u|
|
260
|
+
u[0]==subm[1]
|
261
|
+
}[0][1]
|
262
|
+
else
|
263
|
+
puts "Warnings: "+s+" missing!"
|
264
|
+
end
|
265
|
+
end
|
266
|
+
}
|
267
|
+
end
|
268
|
+
}
|
269
|
+
end
|
270
|
+
end
|
271
|
+
return emails
|
272
|
+
end
|
273
|
+
|
274
|
+
end # class Session
|
275
|
+
end
|
metadata
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: WebsiteTools
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- CQLS
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-10-12 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: " Tools for Website.\n"
|
14
|
+
email: rdrouilh@gmail.com
|
15
|
+
executables:
|
16
|
+
- rebase_url
|
17
|
+
- dyn-site
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- bin/dyn-site
|
22
|
+
- bin/dyn-site.sh
|
23
|
+
- bin/rebase_url
|
24
|
+
- lib/workshop.rb
|
25
|
+
homepage: http://cqls.upmf-grenoble.fr
|
26
|
+
licenses:
|
27
|
+
- MIT
|
28
|
+
- GPL-2
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements:
|
45
|
+
- none
|
46
|
+
rubyforge_project:
|
47
|
+
rubygems_version: 2.6.13
|
48
|
+
signing_key:
|
49
|
+
specification_version: 4
|
50
|
+
summary: Tools for Website
|
51
|
+
test_files: []
|