Subversion-Projekte lars-tiefland.ci

Revision

Revision 937 | Revision 950 | 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
	{
937 lars 40
		if ($this->input->post('mode') && $this->input->post('mode') == 'save')
936 lars 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
		return $task;
231
	}
232
 
917 lars 233
	private function parse_intervall($intervall)
916 lars 234
	{
235
		list($minute, $hour, $dom, $mon, $dow) = explode(" ", $intervall);
236
		$pos = strpos($minute, "/");
237
		if ($pos !== false)
238
		{
918 lars 239
			$intervallArr["min"] = null;
916 lars 240
			$intervallArr["rep_min"] = substr($minute, $pos + 1);
241
		}
242
		elseif ($minute == "*")
243
		{
918 lars 244
			$intervallArr["min"] = null;
916 lars 245
			$intervallArr["rep_min"] = 1;
246
		}
247
		else
248
		{
249
			$intervallArr["min"] = $minute;
250
			$intervallArr["rep_min"] = 0;
251
		}
252
		$pos = strpos($hour, "/");
253
		if ($pos !== false)
254
		{
919 lars 255
			$intervallArr["hour"] = null;
916 lars 256
			$intervallArr["rep_hour"] = substr($hour, $pos + 1);
257
		}
258
		elseif ($hour == "*")
259
		{
919 lars 260
			$intervallArr["hour"] = null;
916 lars 261
			$intervallArr["rep_hour"] = 1;
262
		}
263
		else
264
		{
265
			$intervallArr["hour"] = explode(",", $hour);
266
			$intervallArr["rep_hour"] = 0;
267
		}
268
		if ($mon == "*")
269
		{
270
			$intervallArr["mon"] = array(
271
				1,
272
				2,
273
				3,
274
				4,
275
				5,
276
				6,
277
				7,
278
				8,
279
				9,
280
				10,
281
				11,
282
				12,
283
				);
284
		}
285
		else
286
		{
287
			$intervallArr["mon"] = explode(",", $mon);
288
		}
289
		if ($dow == "*")
290
		{
291
			$intervallArr["dow"] = array(
292
				0,
293
				1,
294
				2,
295
				3,
296
				4,
297
				5,
298
				6,
299
				);
300
		}
301
		else
302
		{
303
			$intervallArr["dow"] = explode(",", $dow);
304
		}
305
		if ($dom == "*")
306
		{
307
			for ($i = 1; $i <= 31; $i++)
308
			{
309
				$intervallArr["dom"][] = $i;
310
			}
311
		}
312
		else
313
		{
314
			$intervallArr["dom"] = explode(",", $dom);
315
		}
316
		return $intervallArr;
317
	}
318
 
917 lars 319
	function create_intervall()
916 lars 320
	{
933 lars 321
		if ($this->input->post('rep_hour') != 0)
916 lars 322
		{
323
			$hour = "*";
933 lars 324
			if ($this->input->post('rep_hour') != 1)
916 lars 325
			{
933 lars 326
				$hour .= "/".$this->input->post('rep_hour');
916 lars 327
			}
328
		}
933 lars 329
		elseif (count($this->input->post('Time_Hour')) == 24)
916 lars 330
		{
331
			$hour = "*";
332
		}
333
		else
334
		{
933 lars 335
			$hour = implode(",", $this->input->post('Time_Hour'));
916 lars 336
		}
933 lars 337
		if ($this->input->post('rep_min') != 0)
916 lars 338
		{
339
			$min = "*";
933 lars 340
			if ($this->input->post('rep_min') != 1)
916 lars 341
			{
933 lars 342
				$min .= "/".$this->input->post('rep_min');
916 lars 343
			}
344
		}
933 lars 345
		elseif (count($this->input->post('Time_Minute')) == 60)
916 lars 346
		{
347
			$min = "*";
348
		}
349
		else
350
		{
933 lars 351
			$min = implode(",", $this->input->post('Time_Minute'));
916 lars 352
		}
933 lars 353
		if (count($this->input->post('dow')) == 7)
916 lars 354
		{
355
			$dow = "*";
356
		}
357
		else
358
		{
933 lars 359
			$dow = implode(",", $this->input->post('dow'));
916 lars 360
		}
361
 
933 lars 362
		if (count($this->input->post('dom')) == 31)
916 lars 363
		{
364
			$dom = "*";
365
		}
366
		else
367
		{
933 lars 368
			$dom = implode(",", $this->input->post('dom'));
916 lars 369
		}
370
 
933 lars 371
		if (count($this->input->post('mon')) == 12)
916 lars 372
		{
373
			$mon = "*";
374
		}
375
		else
376
		{
933 lars 377
			$mon = implode(",", $this->input->post('mon'));
916 lars 378
		}
379
 
380
		$intervall = $min." ".$hour." ".$dom." ".$mon." ".$dow;
381
		$intervall = trim($intervall, "#");
382
		return $intervall;
383
	}
869 lars 384
}