Files
ncdownloader/lib/Tools/Settings.php
2021-09-09 22:03:08 +08:00

236 lines
6.8 KiB
PHP

<?php
namespace OCA\NcDownloader\Tools;
use OC\AllConfig;
class Settings extends AllConfig
{
//@config OC\AppConfig
private $config;
//@OC\SystemConfig
private $sysConfig;
//@OC\AllConfig
private $allConfig;
//type of settings (system = 1 or app =2)
private $type;
const SYSTEM = 0x001;
const USER = 0x010;
const APP = 0x100;
public function __construct($user = null)
{
$this->appConfig = \OC::$server->getAppConfig();
$this->sysConfig = \OC::$server->getSystemConfig();
$this->appName = 'ncdownloader';
$this->type = self::USER;
$this->user = $user;
$this->allConfig = new AllConfig($this->sysConfig);
//$this->connAdapter = \OC::$server->getDatabaseConnection();
//$this->conn = $this->connAdapter->getInner();
}
public function setType($type)
{
$this->type = $type;
return $this;
}
public function get($key, $default = null)
{
if ($this->type == self::USER && isset($this->user)) {
return $this->allConfig->getUserValue($this->user, $this->appName, $key, $default);
} else if ($this->type == self::SYSTEM) {
return $this->allConfig->getSystemValue($key, $default);
} else {
return $this->allConfig->getAppValue($this->appName, $key, $default);
}
}
public function getAria2()
{
$settings = $this->allConfig->getUserValue($this->user, $this->appName, "custom_aria2_settings", '');
return json_decode($settings, 1);
}
public function getAll()
{
if ($this->type === self::APP) {
return $this->getAllAppValues();
} else {
$data = $this->getAllUserSettings();
return $data;
}
}
public function save($key, $value)
{
if ($this->type == self::USER && isset($this->user)) {
return $this->allConfig->setUserValue($this->user, $this->appName, $key, $value);
} else if ($this->type == self::SYSTEM) {
return $this->allConfig->setSystemValue($key, $value);
} else {
return $this->allConfig->setAppValue($this->appName, $key, $value);
}
}
public function getAllAppValues()
{
$keys = $this->getAllKeys();
$value = [];
foreach ($keys as $key) {
$value[$key] = $this->allConfig->getAppValue($this->appName, $key);
}
return $value;
}
public function getAllKeys()
{
return $this->allConfig->getAppKeys($this->appName);
}
public function getAllUserSettings()
{
$keys = $this->allConfig->getUserKeys($this->user, $this->appName);
$value = [];
foreach ($keys as $key) {
$value[$key] = $this->allConfig->getUserValue($this->user, $this->appName, $key);
}
return $value;
}
}
class customSettings
{
private $name = null;
private $dbType = 0;
private $table = 'ncdownloader_settings';
private $uid = null;
const PGSQL = 1, MYSQL = 2, SQL = 3;
/* @var OC\DB\ConnectionAdapter */
private $connAdapter;
/* @var OC\DB\Connection */
private $conn;
private $type = 2; //personal = 2,admin =1
public function __construct()
{
if (\OC::$server->getConfig()->getSystemValue('dbtype') == 'pgsql') {
$this->dbType = PGSQL;
}
$this->connAdapter = \OC::$server->getDatabaseConnection();
$this->conn = $this->connAdapter->getInner();
$this->prefixTable();
}
private function prefixTable()
{
$this->table = '*PREFIX*' . $this->table;
return $this->table;
}
public function set($name, $value)
{
if ($this->have($name)) {
$this->update($name, $value);
} else {
$this->insert($name, $value);
}
}
public function setType($type)
{
$this->type = $type;
}
public function get($name)
{
if (isset($this->uid)) {
$sql = sprintf("SELECT value FROM %s WHERE uid = ? AND name = ? LIMIT 1", $this->table);
$query = \OC_DB::prepare($sql);
$result = $query->execute(array($this->uid, $name));
} else {
$sql = sprintf("SELECT value FROM %s WHERE name = ? LIMIT 1", $this->table);
$query = \OC_DB::prepare($sql);
$result = $query->execute(array($name));
}
if ($query->rowCount() == 1) {
return $result->fetchOne();
}
return null;
}
public function setUID($uid)
{
$this->uid = $uid;
}
public function setTable($table)
{
$this->table = $table;
}
public function getTable()
{
return $this->table;
}
public function have($name)
{
if (isset($this->uid)) {
$sql = sprintf("SELECT value FROM %s WHERE uid = ? AND name = ? AND type = ? LIMIT 1", $this->table);
$query = \OC_DB::prepare($sql);
$query->execute(array($name, $this->uid, $this->type));
} else {
$sql = sprintf("SELECT value FROM %s WHERE name = ? AND type = ? LIMIT 1", $this->table);
$query = \OC_DB::prepare($sql);
$query->execute(array($name, $this->type));
}
if ($query->rowCount() == 1) {
return true;
}
return false;
}
public function getAll()
{
$sql = 'SELECT `name`, `value` FROM `*PREFIX*' . $this->table . '`'
. (!is_null($this->uid) ? ' WHERE `UID` = ?' : '');
if ($this->DbType == 1) {
$sql = 'SELECT "name", "value" FROM *PREFIX*' . $this->table . ''
. (!is_null($this->uid) ? ' WHERE "uid" = ?' : '');
}
$query = \OC_DB::prepare($sql);
if (!is_null($this->uid)) {
return $query->execute(array($this->uid));
} else {
return $query->execute();
}
}
public function update($value)
{
if (isset($this->uid)) {
$sql = sprintf("UPDATE %s SET value = ? WHERE name = ? AND type = ? AND uid = ?", $this->table);
//OCP\DB\IPreparedStatement
$query = \OC_DB::prepare($sql);
$query->execute(array($value, $name, $this->type, $this->uid));
} else {
$sql = sprintf("UPDATE %s SET value = ? WHERE name = ? AND type = ?", $this->table);
//OCP\DB\IPreparedStatement
$query = \OC_DB::prepare($sql);
$query->execute(array($value, $name, $this->type));
}
}
public function insert($name, $value)
{
$sql = sprintf("INSERT INTO %s (name,value,type,uid) VALUES(?,?,?,?)", $this->table);
//OCP\DB\IPreparedStatement
$query = \OC_DB::prepare($sql);
$query->execute(array($name, $value, $this->type, $this->uid));
}
}