summaryrefslogtreecommitdiff
path: root/app/Models/UserDAO.php
blob: 32bc6de2f5b3409c1306f1ee97c1b9d83c58f224 (plain)
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
<?php

class FreshRSS_UserDAO extends Minz_ModelPdo {
	public function createUser($username, $new_user_language, $insertDefaultFeeds = true) {
		$db = FreshRSS_Context::$system_conf->db;
		require_once(APP_PATH . '/SQL/install.sql.' . $db['type'] . '.php');

		$userPDO = new Minz_ModelPdo($username);

		$currentLanguage = Minz_Translate::language();

		try {
			Minz_Translate::reset($new_user_language);
			$ok = false;
			$bd_prefix_user = $db['prefix'] . $username . '_';
			if (defined('SQL_CREATE_TABLES')) {	//E.g. MySQL
				$sql = sprintf(SQL_CREATE_TABLES, $bd_prefix_user, _t('gen.short.default_category'));
				$stm = $userPDO->bd->prepare($sql);
				$ok = $stm && $stm->execute();
			} else {	//E.g. SQLite
				global $SQL_CREATE_TABLES;
				if (is_array($SQL_CREATE_TABLES)) {
					$ok = true;
					foreach ($SQL_CREATE_TABLES as $instruction) {
						$sql = sprintf($instruction, $bd_prefix_user, _t('gen.short.default_category'));
						$stm = $userPDO->bd->prepare($sql);
						$ok &= ($stm && $stm->execute());
					}
				}
			}
			if ($insertDefaultFeeds) {
				if (defined('SQL_INSERT_FEEDS')) {	//E.g. MySQL
					$sql = sprintf(SQL_INSERT_FEEDS, $bd_prefix_user);
					$stm = $userPDO->bd->prepare($sql);
					$ok &= $stm && $stm->execute();
				} else {	//E.g. SQLite
					global $SQL_INSERT_FEEDS;
					if (is_array($SQL_INSERT_FEEDS)) {
						foreach ($SQL_INSERT_FEEDS as $instruction) {
							$sql = sprintf($instruction, $bd_prefix_user);
							$stm = $userPDO->bd->prepare($sql);
							$ok &= ($stm && $stm->execute());
						}
					}
				}
			}
		} catch (Exception $e) {
			Minz_Log::error('Error while creating user: ' . $e->getMessage());
		}

		Minz_Translate::reset($currentLanguage);

		if ($ok) {
			return true;
		} else {
			$info = empty($stm) ? array(2 => 'syntax error') : $stm->errorInfo();
			Minz_Log::error('SQL error: ' . $info[2]);
			return false;
		}
	}

	public function deleteUser($username) {
		$db = FreshRSS_Context::$system_conf->db;
		require_once(APP_PATH . '/SQL/install.sql.' . $db['type'] . '.php');

		if ($db['type'] === 'sqlite') {
			return unlink(join_path(DATA_PATH, 'users', $username, 'db.sqlite'));
		} else {
			$userPDO = new Minz_ModelPdo($username);

			$sql = sprintf(SQL_DROP_TABLES, $db['prefix'] . $username . '_');
			$stm = $userPDO->bd->prepare($sql);
			if ($stm && $stm->execute()) {
				return true;
			} else {
				$info = $stm == null ? array(2 => 'syntax error') : $stm->errorInfo();
				Minz_Log::error('SQL error : ' . $info[2]);
				return false;
			}
		}
	}

	public static function exist($username) {
		return is_dir(join_path(DATA_PATH , 'users', $username));
	}

	public static function touch($username = '') {
		if (($username == '') || (!ctype_alnum($username))) {
			$username = Minz_Session::param('currentUser', '_');
		}
		return touch(join_path(DATA_PATH , 'users', $username, 'config.php'));
	}

	public static function mtime($username) {
		return @filemtime(join_path(DATA_PATH , 'users', $username, 'config.php'));
	}
}