Source

WebAppEngine / application / models / wae_group_model.php

Full commit
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * Model zarządzania grupami z panelu administracyjnego
 * 
 * @author darrarski
 *
 */
class wae_group_model extends CI_Model
{
	/**
	 * Nazwa tabeli bazy danych z grupami
	 *
	 * @var string 
	 */
	public $dbTable_groups = 'groups';
	
	/**
	 * Nazwa tabeli bazy danych z grupami użytkowników
	 *
	 * @var string 
	 */
	public $dbTable_users_groups = 'users_groups';
	
	/**
	 * Zwraca ilość grup w bazie
	 */
	function groups_count()
	{
		return $this->db->get($this->dbTable_groups)->num_rows();
	}
	
	/**
	 * Funckja sprawdza czy podana nazwa grupy jest dostępna
	 */
	function is_name_available($name)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_groups);
		$this->db->where('name', $name);
		$query = $this->db->get();
		if($query->num_rows()==0)
		{
			return true;
		}	
		return false;
	}
	
	/**
	 * Zwraca tablice grup
	 * 
	 * @param $limit	- ilość pozycji do zwrócenia
	 * @param $offset	- pozycja początkowa
	 * @param $order	- kolumna po której sortować 
	 */
	function get_groups($limit=0, $offset=0, $order='name')
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_groups);
		$this->db->order_by($order, 'asc');
		if($limit!=0) $this->db->limit($limit, $offset);
		return $this->db->get()->result_array();
	}

	/**
	 * Zwraca tablice grup z przypisaną podaną cechą
	 * 
	 * @param string $feature nazwa cechy grupy lub tablica nazw cech
	 */
	function get_groups_with_feature($feature)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_groups);
		$this->db->order_by('name', 'asc');
		if(is_array($feature)) {
			foreach($feature as $f) {
				$this->db->like('features', $f);
			}
		} else {
			$this->db->like('features', $feature);
		}
		return $this->db->get()->result_array();
	}
	
	/**
	 * Zwraca wiersz z tabeli grup
	 * 
	 * @param $id	- id użytkownika
	 */
	function get_group($id)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_groups);
		$this->db->where('id', $id);
		$query = $this->db->get();
		if($query->num_rows()==1)
		{
			return $query->row_array();
		}	
		return false;
	}

	/**
	 * Zapisuje dane użytkownika
	 * 
	 * @param $id	- id użytkownika
	 * @param $data	- tablica z danymi
	 */
	function save_group($id, $data)
	{
		$this->db->where('id', $id);
		$this->db->update($this->dbTable_groups, $data); 	
	}
	
	/**
	 * Dodaje nową grupę do bazy
	 */
	function add_group($name='')
	{
		$this->db->set('name', $name);
		$this->db->insert($this->dbTable_groups);
		return $this->db->insert_id();
	}
	
	/**
	 * Usuwa grupę z bazy danych
	 */
	function delete_group($id)
	{
		return $this->db->delete($this->dbTable_groups, array('id' => $id)); 
	}
	
	/**
	 * Usuwa użytkownika z grupy
	 * 
	 * @param $group 	- id grupy
	 * @param $user		- id użytkownika
	 */
	function remove_user($group, $user)
	{
		return $this->db->delete($this->dbTable_users_groups, array('user_id' => $user, 'group_id' => $group)); 
	}
	
	/**
	 * Dodaje użytkownika do grupy
	 * 
	 * @param $group 	- id grupy
	 * @param $user		- id użytkownika
	 */	
	function add_user($group, $user)
	{
		// sprawdzanie, czy użytkownik jest już przypisany do podanej grupy
		$query = $this->db->get_where($this->dbTable_users_groups, array('user_id' => $user, 'group_id' => $group), 1);
		if($query->num_rows()==1)
		{
			return true;
		}
		$this->db->set('user_id', $user);
		$this->db->set('group_id', $group);
		$this->db->insert($this->dbTable_users_groups);
		return true;
	}
	
	/**
	 * Funkcja zwraca listę użytkowników należących do grupy
	 * 
	 * @param $id	- id grupy
	 */
	function group_users($id)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_users_groups);
		$this->db->where('group_id', $id);
		$this->db->join($this->dbTable_groups, $this->dbTable_groups.'.id = '.$this->dbTable_users_groups.'.user_id');
		$this->db->order_by('username', 'asc');
		return $this->db->get()->result_array();
	}
	
	/**
	 * Funkcja zwraca listę grup do których należy użytkownik
	 * 
	 * @param $id	- id użytkownika
	 */
	function user_groups($id)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_users_groups);
		$this->db->where('user_id', $id);
		$this->db->join($this->dbTable_groups, $this->dbTable_groups.'.id = '.$this->dbTable_users_groups.'.group_id');
		$this->db->order_by('name', 'asc');
		return $this->db->get()->result_array();
	}
	
	/**
	 * Sprawdza czy użytkownik należy do grupy lub listy grup
	 * 
	 * @param $id
	 * @return boolean
	 */
	function user_in_group($id, $grp)
	{
		$this->db->select('*');
		$this->db->from($this->dbTable_users_groups);
		$this->db->where('user_id', $id);
		if(is_array($grp))
			$this->db->where_in('group_id', $grp);	
		else
			$this->db->where('group_id', $grp);
		$query = $this->db->get();
		if($query->num_rows()>0)
		{
			return true;
		}
		return false;
	}
	
	/**
	 * Sprawdza czy użytkownik nalezy do grupy posiadającej daną cechę
	 *
	 * @param int $id id użytkownika
	 * @param string $feature nazwa cechy grupy lub tablica nazw cech
	 * @return boolean
	 */
	function user_has_group_feature($id, $feature)
	{
		$groups = $this->get_groups_with_feature($feature);
		$groups_ids = array();
		
		foreach($groups as $group) {
			$groups_ids[] = $group['id'];
		}
		
		return $this->user_in_group($id, $groups_ids);
	}
	
}