Subversion-Projekte lars-tiefland.ci

Revision

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