summaryrefslogtreecommitdiffstats
path: root/modules-available/dozmod/pages/expiredimages.inc.php
blob: ffd7b0263b67614c6e9db7f5e218c289cbc9a6ad (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php

class SubPage
{

	public static function doPreprocess()
	{

	}

	private static function loadExpiredImages()
	{
		$res = Database::simpleQuery("SELECT b.displayname,"
			. " own.firstname, own.lastname, own.email,"
			. " v.imageversionid, v.createtime, v.filesize, v.deletestate,"
			. " lat.expiretime AS latexptime, lat.deletestate AS latdelstate"
			. " FROM sat.imageversion v"
			. " INNER JOIN sat.imagebase b ON (b.imagebaseid = v.imagebaseid)"
			. " INNER JOIN sat.user own ON (b.ownerid = own.userid)"
			. " LEFT JOIN sat.imageversion lat ON (b.latestversionid = lat.imageversionid)"
			. " WHERE v.deletestate <> 'KEEP'"
			. " ORDER BY b.displayname ASC, v.createtime ASC");
		$NOW = time();
		$rows = array();
		while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
			if ($row['latexptime'] > $NOW && $row['latdelstate'] === 'KEEP') {
				$row['hasNewerClass'] = 'glyphicon-ok green';
				$row['checked'] = 'checked';
			} else {
				$row['hasNewerClass'] = 'glyphicon-remove red';
			}
			if ($row['deletestate'] === 'WANT_DELETE') {
				$row['name_extra_class'] = 'slx-strike';
			}
			$row['version'] = date('d.m.Y H:i:s', $row['createtime']);
			$row['rawfilesize'] = $row['filesize'];
			$row['filesize'] = Util::readableFileSize($row['filesize']);
			$rows[] = $row;
		}
		return $rows;
	}

	public static function doRender()
	{
		$expiredImages = self::loadExpiredImages();

		if (empty($expiredImages)) {
			Message::addSuccess('no-expired-images');
		} else {
			$data = ['images' => $expiredImages];
			Permission::addGlobalTags($data['perm'], null, ['expiredimages.delete', 'orphaned.scan']);
			Render::addTemplate('images-delete', $data);
		}
	}

	public static function doAjax()
	{
		$action = Request::post('action');
		if ($action === 'delimages') {
			self::handleDeleteImages();
		} elseif ($action === 'orphaned') {
			self::handleOrphaned();
		} else {
			echo 'Huh?';
		}
	}

	private static function handleDeleteImages()
	{
		User::assertPermission("expiredimages.delete");
		$images = Request::post('images', false);
		$result = false;
		if (is_array($images)) {
			foreach ($images as $image => $val) {
				if (strtolower($val) !== 'on')
					continue;
				Database::exec("UPDATE sat.imageversion SET deletestate = 'WANT_DELETE'"
					. " WHERE deletestate = 'SHOULD_DELETE' AND imageversionid = :imageversionid", array(
					'imageversionid' => $image
				));
			}
			if (!empty($images)) {
				$result = Download::asStringPost('http://127.0.0.1:9080/do/delete-images', false, 10, $code);
				if ($code == 999) {
					$result .= "\nConnection to DMSD failed.";
				}
			}
		}
		if (!empty($result)) {
			echo $result;
		}
	}

	private static function handleOrphaned()
	{
		if (Request::post('delete', 0, 'int') !== 0) {
			User::assertPermission("orphaned.delete");
			$action = 'delete';
		} else {
			User::assertPermission("orphaned.scan");
			$action = 'scan';
		}
		// Talk to dmsd
		$result = Download::asStringPost('http://127.0.0.1:9080/do/scan-orphaned-files', ['action' => $action],
			10, $code);
		if ($code == 999) {
			$result = '<div class="alert alert-warning">'
				. $result . ' - Connection to DMSD failed.</div>';
		} else {
			$json = json_decode($result, true);
			if (is_array($json)) {
				$result = [];
				$showDelete = false;
				foreach ($json as $k => $v) {
					$result[] = ['file' => $k, 'status' => $v];
					if ($v === 'EXISTS') {
						$showDelete = true;
					}
				}
				$data = ['files' => $result, 'show_delete' => $showDelete];
				Permission::addGlobalTags($data['perm'], null, ['orphaned.delete']);
				$result = Render::parse('images-orphaned', $data);
			}
		}
		echo $result;
	}

}