Subversion-Projekte lars-tiefland.ci

Revision

Revision 933 | Revision 937 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
869 lars 1
<?php
2
 
3
class Scheduler extends CI_Controller
4
{
5
	public function __construct()
6
	{
7
		parent::__construct();
8
	}
9
	public function index()
10
	{
873 lars 11
		$tasks = array();
12
		$sql = "SELECT
13
				id,
14
				name,
15
				art,
16
				skript,
17
				parameter,
18
				intervall,
19
				user
20
			FROM
21
				schnittstellen
22
			WHERE
23
				nutzungsart IN ('dual','automatisch')
24
			AND
25
				user!=''
26
			ORDER BY
27
				user
28
		";
29
		$res = $this->db->query($sql);
30
		while ($row = $res->unbuffered_row('array'))
31
		{
32
			$tasks[] = $row;
33
		}
34
		$this->smarty->assign("tasks", $tasks);
869 lars 35
		$this->smarty->view('scheduler.tpl');
36
	}
912 lars 37
 
38
	public function edit($id = null)
910 lars 39
	{
936 lars 40
		if ($this->input->post('mode'))
41
		{
42
			$this->save();
43
		}
916 lars 44
		if ($id)
45
		{
46
			$task = $this->get_task($id);
47
		}
48
		else
49
		{
925 lars 50
			$domain = explode(".", $_SERVER["HTTP_HOST"]);
51
			$dom = array_shift($domain);
52
			$site_full = implode(".", $domain);
53
			if ($domain[count($domain) - 1] == "local")
54
			{
55
				unset($domain[count($domain) - 1]);
56
			}
57
			$site = implode(".", $domain);
916 lars 58
			unset($out);
59
			if ($site != $site_full)
60
			{
61
				$out = substr($site, 0, 16);
62
			}
63
			elseif ($site_full == "weban.de")
64
			{
65
				$out = "www-data";
66
			}
67
			else
68
			{
927 lars 69
				$cmd = "cat /etc/passwd | grep ".__SHOP__." | cut -d \":\" -f1";
916 lars 70
				exec($cmd, $out);
71
				$out = $out[0];
72
			}
73
			$task["user"] = $out;
74
		}
75
		$rep_hours[0] = "exakt";
76
		$rep_hours[1] = "jede Stunde";
77
		$hours[0] = 0;
78
		$hours[1] = 1;
79
		for ($i = 2; $i <= 23; $i++)
80
		{
81
			$hours[$i] = $i;
82
			$rep_hours[$i] = "Alle ".$i." Stunden";
83
		}
84
		$rep_min[0] = "exakt";
85
		$rep_min[1] = "jede Minute";
86
		for ($i = 2; $i <= 30; $i++)
87
		{
88
			$rep_min[$i] = "Alle ".$i." Minuten";
89
		}
90
		for ($i = 0; $i <= 59; $i++)
91
		{
92
			$minutes[$i] = $i;
93
		}
94
		$nutzungsarten = array(
95
			"" => "",
96
			"dual" => "dual",
97
			"automatisch" => "automatisch",
98
			);
99
		$tage = array(
100
			"Sonntag",
101
			"Montag",
102
			"Dienstag",
103
			"Mittwoch",
104
			"Donnerstag",
105
			"Freitag",
106
			"Samstag",
107
			);
108
		for ($i = 1; $i <= 12; $i++)
109
		{
110
			$mon = sprintf("%02d", $i);
111
			$datum = "01.".$mon.".".date("Y");
112
			$monate[$i] = strftime("%B", strtotime($datum));
113
		}
114
		$dom = array();
115
		for ($i = 1; $i <= 31; $i++)
116
		{
117
			$day = sprintf("%02d", $i);
118
			$dom[$i] = $i;
119
		}
120
		$this->smarty->assign("task", $task);
121
		$this->smarty->assign("monate", $monate);
122
		$this->smarty->assign("tage", $tage);
123
		$this->smarty->assign("dom", $dom);
124
		$this->smarty->assign("nutzungsarten", $nutzungsarten);
125
		$this->smarty->assign("minutes", $minutes);
126
		$this->smarty->assign("rep_min", $rep_min);
127
		$this->smarty->assign("rep_hours", $rep_hours);
128
		$this->smarty->assign("hours", $hours);
914 lars 129
		$this->smarty->view('scheduler_edit.tpl');
910 lars 130
	}
916 lars 131
 
933 lars 132
	public function save()
133
	{
134
		$intervall = $this->create_intervall();
936 lars 135
		if (!column_exists("schnittstellen", "aktiv", $GLOBALS["webs"]["datenbank"], $this->
136
			db))
933 lars 137
		{
138
			$sql = "
139
                ALTER TABLE
140
                    schnittstellen
141
                ADD
142
                    aktiv BOOL NOT NULL DEFAULT '1' AFTER user
143
            ";
144
			$this->db->query($sql);
145
		}
936 lars 146
		if (column_exists("schnittstellen", "email", $GLOBALS["webs"]["datenbank"], $this->
147
			db))
933 lars 148
		{
149
			$extra = "email='".$this->input->post('email')."',";
150
		}
151
		if ($this->input->post('id'))
152
		{
153
			$sql = "
154
                UPDATE
155
                    schnittstellen
156
                SET
157
                    ".$extra."
158
                    name='".$this->input->post("name")."',
159
                    art='".$this->input->post('art')."',
160
                    user='".$this->input->post('user')."',
161
                    skript='".$this->input->post('skript')."',
162
                    parameter='".$this->input->post('parameter')."',
163
                    nutzungsart='".$this->input->post('nutzungsart')."',
164
                    aktiv = ".$this->input->post('aktiv').",
165
                    intervall='".$intervall."',
166
                    letzte_aenderung_von='".$_SERVER["PHP_AUTH_USER"]."'
167
                WHERE
168
                    id='".$this->input->post('id')."'
169
            ";
170
			$res = $this->db->query($sql);
171
			if ($res)
172
			{
173
				$msg = "Cronjob erfolgreich aktualisiert!";
174
			}
175
			else
176
			{
177
				$msg = "Leider ist ein Fehler aufgetreten.<br>";
178
				$msg .= "Bitte versuchen Sie es sp&auml;ter noch einmal!<br>";
179
				//$msg .= mysql_error();
180
			}
181
		}
182
		else
183
		{
184
			$sql = "
185
                INSERT INTO
186
                    schnittstellen
187
                SET
188
                    ".$extra."
189
                    name='".$this->input->post('name')."',
190
                    art='".$this->input->post('art')."',
191
                    user='".$this->input->post('user')."',
192
                    skript='".$this->input->post('skript')."',
193
                    parameter='".$this->input->post('parameter')."',
194
                    nutzungsart='".$this->input->post('nutzungsart')."',
195
                    aktiv = ".$this->input->post('aktiv').",
196
                    intervall='".$intervall."',
197
                    erstellt_am=NOW(),
198
                    erstellt_von='".$_SERVER["PHP_AUTH_USER"]."',
199
                    letzte_aenderung_von='".$_SERVER["PHP_AUTH_USER"]."'
200
 
201
            ";
202
			$res = $this->db->query($sql);
203
			if ($res)
204
			{
205
				$msg = "neuen Cronjob erfolgreich angelegt!";
206
			}
207
			else
208
			{
209
				$msg = "Leider ist ein Fehler aufgetreten.<br>";
210
				$msg .= "Bitte versuchen Sie es sp&auml;ter noch einmal!<br>";
211
				//$msg .= mysql_error();
212
			}
213
		}
214
		echo $msg;
215
	}
216
 
916 lars 217
	private function get_task($id)
218
	{
219
		$sql = "SELECT
220
				*
221
			FROM
222
				schnittstellen
223
			WHERE
224
				id=".$id."
225
		";
917 lars 226
		$res = $this->db->query($sql);
227
		$task = $res->row_array();
916 lars 228
		$intervall = $this->parse_intervall($task["intervall"]);
229
		$task["intervallParsed"] = $intervall;
230
		$zeit = $intervall["hour"].":".$intervall["min"].":00";
231
		$task["zeit"] = ($zeit);
232
		return $task;
233
	}
234
 
917 lars 235
	private function parse_intervall($intervall)
916 lars 236
	{
237
		list($minute, $hour, $dom, $mon, $dow) = explode(" ", $intervall);
238
		$pos = strpos($minute, "/");
239
		if ($pos !== false)
240
		{
918 lars 241
			$intervallArr["min"] = null;
916 lars 242
			$intervallArr["rep_min"] = substr($minute, $pos + 1);
243
		}
244
		elseif ($minute == "*")
245
		{
918 lars 246
			$intervallArr["min"] = null;
916 lars 247
			$intervallArr["rep_min"] = 1;
248
		}
249
		else
250
		{
251
			$intervallArr["min"] = $minute;
252
			$intervallArr["rep_min"] = 0;
253
		}
254
		$pos = strpos($hour, "/");
255
		if ($pos !== false)
256
		{
919 lars 257
			$intervallArr["hour"] = null;
916 lars 258
			$intervallArr["rep_hour"] = substr($hour, $pos + 1);
259
		}
260
		elseif ($hour == "*")
261
		{
919 lars 262
			$intervallArr["hour"] = null;
916 lars 263
			$intervallArr["rep_hour"] = 1;
264
		}
265
		else
266
		{
267
			$intervallArr["hour"] = explode(",", $hour);
268
			$intervallArr["rep_hour"] = 0;
269
		}
270
		if ($mon == "*")
271
		{
272
			$intervallArr["mon"] = array(
273
				1,
274
				2,
275
				3,
276
				4,
277
				5,
278
				6,
279
				7,
280
				8,
281
				9,
282
				10,
283
				11,
284
				12,
285
				);
286
		}
287
		else
288
		{
289
			$intervallArr["mon"] = explode(",", $mon);
290
		}
291
		if ($dow == "*")
292
		{
293
			$intervallArr["dow"] = array(
294
				0,
295
				1,
296
				2,
297
				3,
298
				4,
299
				5,
300
				6,
301
				);
302
		}
303
		else
304
		{
305
			$intervallArr["dow"] = explode(",", $dow);
306
		}
307
		if ($dom == "*")
308
		{
309
			for ($i = 1; $i <= 31; $i++)
310
			{
311
				$intervallArr["dom"][] = $i;
312
			}
313
		}
314
		else
315
		{
316
			$intervallArr["dom"] = explode(",", $dom);
317
		}
318
		return $intervallArr;
319
	}
320
 
917 lars 321
	function create_intervall()
916 lars 322
	{
933 lars 323
		if ($this->input->post('rep_hour') != 0)
916 lars 324
		{
325
			$hour = "*";
933 lars 326
			if ($this->input->post('rep_hour') != 1)
916 lars 327
			{
933 lars 328
				$hour .= "/".$this->input->post('rep_hour');
916 lars 329
			}
330
		}
933 lars 331
		elseif (count($this->input->post('Time_Hour')) == 24)
916 lars 332
		{
333
			$hour = "*";
334
		}
335
		else
336
		{
933 lars 337
			$hour = implode(",", $this->input->post('Time_Hour'));
916 lars 338
		}
933 lars 339
		if ($this->input->post('rep_min') != 0)
916 lars 340
		{
341
			$min = "*";
933 lars 342
			if ($this->input->post('rep_min') != 1)
916 lars 343
			{
933 lars 344
				$min .= "/".$this->input->post('rep_min');
916 lars 345
			}
346
		}
933 lars 347
		elseif (count($this->input->post('Time_Minute')) == 60)
916 lars 348
		{
349
			$min = "*";
350
		}
351
		else
352
		{
933 lars 353
			$min = implode(",", $this->input->post('Time_Minute'));
916 lars 354
		}
933 lars 355
		if (count($this->input->post('dow')) == 7)
916 lars 356
		{
357
			$dow = "*";
358
		}
359
		else
360
		{
933 lars 361
			$dow = implode(",", $this->input->post('dow'));
916 lars 362
		}
363
 
933 lars 364
		if (count($this->input->post('dom')) == 31)
916 lars 365
		{
366
			$dom = "*";
367
		}
368
		else
369
		{
933 lars 370
			$dom = implode(",", $this->input->post('dom'));
916 lars 371
		}
372
 
933 lars 373
		if (count($this->input->post('mon')) == 12)
916 lars 374
		{
375
			$mon = "*";
376
		}
377
		else
378
		{
933 lars 379
			$mon = implode(",", $this->input->post('mon'));
916 lars 380
		}
381
 
382
		$intervall = $min." ".$hour." ".$dom." ".$mon." ".$dow;
383
		$intervall = trim($intervall, "#");
384
		return $intervall;
385
	}
869 lars 386
}