<?php
namespace Garradin\Membres;
use Garradin\Membres;
use Garradin\Config;
use Garradin\DB;
use Garradin\Wiki;
use Garradin\UserException;
class Categories
{
protected $droits = [
'inscription'=> Membres::DROIT_AUCUN,
'connexion' => Membres::DROIT_ACCES,
'membres' => Membres::DROIT_AUCUN,
'compta' => Membres::DROIT_AUCUN,
'wiki' => Membres::DROIT_ACCES,
'config' => Membres::DROIT_AUCUN,
];
protected function _checkData(&$data)
{
$db = DB::getInstance();
if (!isset($data['nom']) || !trim($data['nom']))
{
throw new UserException('Le nom de catégorie ne peut rester vide.');
}
if (!empty($data['id_cotisation_obligatoire'])
&& !$db->test('cotisations', 'id = ?', (int)$data['id_cotisation_obligatoire']))
{
throw new UserException('Numéro de cotisation inconnu.');
}
if (isset($data['id_cotisation_obligatoire']) && empty($data['id_cotisation_obligatoire']))
{
$data['id_cotisation_obligatoire'] = null;
}
}
public function add($data)
{
$this->_checkData($data);
foreach ($this->droits as $key=>$value)
{
if (!isset($data['droit_'.$key]))
$data['droit_'.$key] = $value;
else
$data['droit_'.$key] = (int)$data['droit_'.$key];
}
$db = DB::getInstance();
$db->insert('membres_categories', $data);
return $db->lastInsertRowId();
}
public function edit($id, $data)
{
$this->_checkData($data);
foreach ($this->droits as $key=>$value)
{
if (isset($data['droit_'.$key]))
$data['droit_'.$key] = (int)$data['droit_'.$key];
}
if (!isset($data['cacher']) || $data['cacher'] != 1)
$data['cacher'] = 0;
$db = DB::getInstance();
return $db->update('membres_categories', $data, 'id = '.(int)$id);
}
public function get($id)
{
$db = DB::getInstance();
return $db->first('SELECT * FROM membres_categories WHERE id = ?;',
(int) $id);
}
public function remove($id)
{
$db = DB::getInstance();
$config = Config::getInstance();
if ($id == $config->get('categorie_membres'))
{
throw new UserException('Il est interdit de supprimer la catégorie définie par défaut dans la configuration.');
}
if ($db->test('membres', 'id_categorie = ?', (int)$id))
{
throw new UserException('La catégorie contient encore des membres, il n\'est pas possible de la supprimer.');
}
$db->update(
'wiki_pages',
[
'droit_lecture' => Wiki::LECTURE_NORMAL,
'droit_ecriture' => Wiki::ECRITURE_NORMAL,
],
'droit_lecture = '.(int)$id.' OR droit_ecriture = '.(int)$id
);
return $db->delete('membres_categories', 'id = ?', (int) $id);
}
public function listSimple()
{
$db = DB::getInstance();
return $db->getAssoc('SELECT id, nom FROM membres_categories ORDER BY nom;');
}
public function listComplete()
{
$db = DB::getInstance();
return $db->get('SELECT * FROM membres_categories ORDER BY nom;');
}
public function listCompleteWithStats()
{
$db = DB::getInstance();
return $db->get('SELECT *, (SELECT COUNT(*) FROM membres WHERE id_categorie = membres_categories.id) AS nombre FROM membres_categories ORDER BY nom;');
}
public function listHidden()
{
$db = DB::getInstance();
return $db->getAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 1;');
}
public function listNotHidden()
{
$db = DB::getInstance();
return $db->getAssoc('SELECT id, nom FROM membres_categories WHERE cacher = 0;');
}
}