Code source wiki de Planificateur de traitements

Modifié par Xavier Richard le 04/12/2023 à 17:42

Afficher les derniers auteurs
1 {{velocity}}
2 ## First, set a shortcut to our Scheduler plugin
3 ##
4 #set ($scheduler = $xwiki.scheduler)
5 ##
6 ## If the sheet is called with an action ($request.do), let us first process this action
7 ## Possible values are : "schedule", "pause", "resume", "unschedule", "delete"
8 ##
9 #if ("$!request.do" != '' && "$!request.which" != '')
10 ##
11 ## Obtain the Job document and object for which the action has been called
12 ##
13 #set ($tJobHolder = $request.which)
14 #set ($jobDoc = $xwiki.getDocument($tJobHolder))
15 #set ($jobObj = $jobDoc.getObject('XWiki.SchedulerJobClass'))
16 #if (!$services.csrf.isTokenValid($request.form_token))
17 ##
18 ## Check that the CSRF token matches the user before any operation
19 ##
20 {{error}}$services.localization.render('xe.scheduler.invalidToken'){{/error}}
21
22 #elseif ($request.do == 'schedule')
23 ##
24 ## Schedule a job
25 ##
26 #set ($ok = $scheduler.scheduleJob($jobObj))
27 #if (!$ok)
28 {{error}}$xcontext.get('error'){{/error}}
29
30 #else
31 #set ($jobName = "$jobObj.get('jobName')")
32 {{info}}$services.localization.render('xe.scheduler.jobscheduled', [$jobName, $scheduler.getNextFireTime($jobObj)]){{/info}}
33
34 #end
35 #elseif ($request.do == 'pause')
36 ##
37 ## Pause a scheduled job
38 ##
39 #set ($ok = $scheduler.pauseJob($jobObj))
40 #if (!$ok)
41 {{error}}$xcontext.get('error'){{/error}}
42
43 #else
44 {{info}}$services.localization.render('xe.scheduler.paused', [$jobObj.get('jobName')]){{/info}}
45
46 #end
47 #elseif ($request.do == 'resume')
48 ##
49 ## Resume a paused job
50 ##
51 #set ($ok = $scheduler.resumeJob($jobObj))
52 #if (!$ok)
53 {{error}}$xcontext.get('error'){{/error}}
54
55 #else
56 {{info}}$services.localization.render('xe.scheduler.resumed', [$jobObj.get('jobName'), $scheduler.getNextFireTime($jobObj)]){{/info}}
57
58 #end
59 #elseif ($request.do == 'unschedule')
60 ##
61 ## Unschedule a scheduled job (paused or not)
62 ##
63 #set ($ok = $scheduler.unscheduleJob($jobObj))
64 #if (!$ok)
65 {{error}}$xcontext.get('error'){{/error}}
66
67 #else
68 {{info}}$services.localization.render('xe.scheduler.unscheduled', [$jobObj.get('jobName')]){{/info}}
69
70 #end
71 #elseif ($request.do == 'delete')
72 ##
73 ## Delete a job
74 ## First unschedule it (if needed), then delete its document holder
75 ##
76 #set ($jobName = $jobObj.get('jobName'))
77 #if ($jobObj.get('status') == 'Normal' || $jobObj.get('status') == 'Paused')
78 #set ($ok = $scheduler.unscheduleJob($jobObj))
79 #if ($ok)
80 #set ($deleteRedirect = $xwiki.getURL($jobObj.getName(), 'delete'))
81 $response.sendRedirect($deleteRedirect)
82 #else
83 {{error}}$xcontext.get('error'){{/error}}
84
85 #end
86 #else
87 #set ($deleteRedirect = $xwiki.getURL($jobObj.getName(), 'delete'))
88 $response.sendRedirect($deleteRedirect))
89 #end
90 #elseif ($request.do == 'trigger')
91 ##
92 ## Trigger a job (execute it now)
93 ##
94 #set ($ok = $scheduler.triggerJob($jobObj))
95 #if (!$ok)
96 {{error}}$xcontext.get('error'){{/error}}
97
98 #else
99 {{info}}$services.localization.render('xe.scheduler.triggered', [$jobObj.get('jobName')]){{/info}}
100
101 #end
102 #end
103 #end
104 $services.localization.render('xe.scheduler.welcome')
105
106 = $services.localization.render('xe.scheduler.jobs.list') =
107
108 ##
109 ## Retrieve all scheduler jobs
110 ## Display their name, status, possible next fire time, and available actions
111 ##
112 |=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.name')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.status')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.next')|=(%scope="col"%)$services.localization.render('xe.scheduler.jobs.actions')
113 #foreach ($docName in $services.query.xwql('from doc.object(XWiki.SchedulerJobClass) as jobs where doc.fullName <> ''XWiki.SchedulerJobTemplate''').execute())
114 #set ($jobHolder = $xwiki.getDocument($docName))
115 #set ($job = $jobHolder.getObject('XWiki.SchedulerJobClass'))
116 #set ($status = $scheduler.getJobStatus($job).value)
117 #if ($status == '')
118 #set ($status = 'None')
119 #end
120 #set ($firetime = '')
121 #if ($status != 'None')
122 #set ($firetime = $scheduler.getNextFireTime($job))
123 #else
124 #set ($firetime = $services.localization.render('xe.scheduler.jobs.next.undefined'))
125 #end
126 #set ($actions = ['trigger'])
127 #if ($status == 'None')
128 #set ($ok = $actions.add('schedule'))
129 #elseif($status == 'Normal')
130 #set ($ok = $actions.addAll(['pause', 'unschedule']))
131 #elseif ($status == 'Paused')
132 #set ($ok = $actions.addAll(['resume', 'unschedule']))
133 #end
134 #set ($ok = $actions.add('delete'))
135 |$job.get('jobName')|$status|$firetime|**$services.localization.render('xe.scheduler.jobs.actions.access')** [[$services.localization.render('xe.scheduler.jobs.actions.view')>>$services.rendering.escape($jobHolder.fullName, 'xwiki/2.1')]]#if($jobHolder.hasAccessLevel('programming')) [[$services.localization.render('xe.scheduler.jobs.actions.edit')>>path:${jobHolder.getURL('edit')}]]#end **$services.localization.render('xe.scheduler.jobs.actions.manage')**#foreach($action in $actions) [[$services.localization.render("xe.scheduler.jobs.actions.$action")>>path:$doc.getURL('view', $escapetool.url({'do': $action, 'which': $jobHolder.fullName, 'form_token': $services.csrf.token}))]]#end
136
137 #end
138 #if ($doc.hasAccessLevel('programming'))
139 ##
140 ## Job creation is offered only for programmers, because the job page needs to be saved
141 ## with programming right for groovy jobs to be executed.
142 ## However, this page should stay accessible to admins, that can manipulate existing jobs:
143 ## schedule, pause, etc.
144 ##
145
146 = $services.localization.render('xe.scheduler.jobs.create') =
147
148 ##
149 ## Form to create a new Job
150 ##
151 {{info}}$services.localization.render('xe.scheduler.jobs.explaincreate'){{/info}}
152
153 {{html}}
154 <form action="$doc.getURL('create')" id="newdoc" class="form-inline"><div>
155 <input type="hidden" name="form_token" value="$!{services.csrf.getToken()}" />
156 <input type="hidden" name="parent" value="Scheduler.WebHome" />
157 <input type="hidden" name="template" value="XWiki.SchedulerJobTemplate" />
158 <input type="hidden" name="sheet" value="1" />
159 <input type="hidden" name="space" value="Scheduler"/>
160 <label class="sr-only" for="page">$services.localization.render('xe.scheduler.jobs.create.nameTip')</label>
161 <input id="page" name="page" size="30" type="text"
162 placeholder="$escapetool.xml($services.localization.render('xe.scheduler.jobs.create.nameTip'))" />
163 <span class="buttonwrapper">
164 <input type="submit" class="btn btn-success"
165 value="$escapetool.xml($services.localization.render('xe.scheduler.jobs.create.submit'))"/>
166 </span>
167 </div></form>
168 {{/html}}
169
170 #else
171
172 {{warning}}$services.localization.render('xe.scheduler.jobs.warning'){{/warning}}
173
174 #end
175 {{/velocity}}