Projekt

Obecné

Profil

Stáhnout (5.53 KB) Statistiky
| Větev: | Tag: | Revize:
31ca0a32 Michal Kliment
<?php defined('SYSPATH') or die('No direct script access.');
/*
* This file is part of open source system FreenetIS
* and it is release under GPLv3 licence.
*
* More info about licence can be found:
* http://www.gnu.org/licenses/gpl-3.0.html
*
* More info about project can be found:
* http://www.freenetis.org/
*
*/

/**
*
* @package Model
*
* @property integer $id
* @property string $url_pattern
* @property string $name
* @property string $title
* @property integer $show_in_user_grid
* @property integer $show_in_grid
*
* @author David Raška <jeffraska@gmail.com>
*/
class Device_active_link_Model extends ORM
{
const TYPE_DEVICE = 1;
const TYPE_TEMPLATE = 2;
protected $has_many = array
(
'device_active_links'
);
/**
* Count of all device active links
* @param array $filter_values
* @return integer
*/
public function count_all_active_links($filter_sql = '')
{
$where = '';
// filter
if ($filter_sql != '')
$where = "WHERE $filter_sql";
// query
return $this->db->query("
SELECT *
FROM device_active_links
$where
")->count();
}
/**
* Get all device active links
*
* @param array $params
* @return Mysql_Result
*/
public function get_all_active_links($params = array())
{
// default params
$default_params = array
(
'order_by' => 'id',
'order_by_direction' => 'asc'
);
$params = array_merge($default_params, $params);
$conds = array();
// filter
if (isset($params['filter_sql']) && $params['filter_sql'] != '')
$conds[] = $params['filter_sql'];
$where = count($conds) ? 'WHERE '.implode(' AND ', $conds) : '';
$order_by = $this->db->escape_column($params['order_by']);
// order by direction check
if (strtolower($params['order_by_direction']) != 'desc')
$order_by_direction = 'asc';
else
$order_by_direction = 'desc';
if (isset($params['limit']) && isset($params['offset']))
$limit = "LIMIT " . intval($params['offset']) . ", " . intval($params['limit']);
else
$limit = "";
// query
return $this->db->query("
SELECT dal.*, dalm.*, COUNT(*) AS devices_count
FROM device_active_links AS dal
LEFT JOIN device_active_links_map AS dalm ON dal.id = dalm.device_active_link_id
$where
GROUP BY dal.id
ORDER BY $order_by $order_by_direction
$limit
");
}
/**
* Maps devices to device active link
*
* @param array $devices Array of device IDs to map
* @param integer $dal_id Device active link ID
* @return Database_result
*/
public function map_devices_to_active_link($devices = NULL, $dal_id = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
if (!$devices || empty($devices))
{
return NULL;
}
foreach ($devices AS $device)
{
$this->db->query("
INSERT INTO device_active_links_map (device_active_link_id, device_id, type)
VALUES (?, ?, ?)
", $dal_id, $device, $type);
}
}
/**
* Unmaps devices from device active link
*
* @param integer $dal_id Device active link ID
* @return Database_result
*/
public function unmap_devices_from_active_link($dal_id = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
$this->db->query("
DELETE FROM device_active_links_map
WHERE device_active_link_id = ? AND type = ?
", $dal_id, $type);
}
/**
* Maps device to device active links
*
* @param integer $device_id Device ID
* @param array $dal_ids Array of device active link IDs
* @return Database_result
*/
public function map_device_to_active_links($device_id = NULL, $dal_ids = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
if (!$device_id || !$dal_ids || empty($dal_ids))
{
return NULL;
}
foreach ($dal_ids AS $id)
{
$this->db->query("
INSERT INTO device_active_links_map (device_active_link_id, device_id, type)
VALUES (?, ?, ?)
", $id, $device_id, $type);
}
}
/**
* Unmaps device from device active links
*
* @param integer $device_id Device ID
* @return Database_result
*/
public function unmap_device_from_active_links($device_id = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
if (!$device_id)
{
return NULL;
}
$this->db->query("
DELETE FROM device_active_links_map
WHERE device_id = ? AND type = ?
", $device_id, $type);
}
/**
* Return all devices using given active link
*
* @param integer $dal_id Device active link ID
* @return Mysql_result
*/
public function get_active_link_devices($dal_id = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
if (!$dal_id)
{
$dal_id = $this->id;
}
if ($type == Device_active_link_Model::TYPE_DEVICE)
{
return $this->db->query("
SELECT d.*
FROM device_active_links_map dalm
LEFT JOIN devices AS d ON d.id = dalm.device_id
WHERE dalm.device_active_link_id = ? AND dalm.type = ?
", $dal_id, $type);
}
else
{
return $this->db->query("
SELECT dt.*
FROM device_active_links_map dalm
LEFT JOIN device_templates AS dt ON dt.id = dalm.device_id
WHERE dalm.device_active_link_id = ? AND dalm.type = ?
", $dal_id, $type);
}
}
/**
* Returns active links used by device
*
* @param type $device_id Device ID
* @return null
*/
public function get_device_active_links($device_id = NULL,
$type = Device_active_link_Model::TYPE_DEVICE)
{
if (!$device_id)
{
return NULL;
}
return $this->db->query("
SELECT dal.*
FROM device_active_links_map AS dalm
LEFT JOIN device_active_links AS dal ON dal.id = dalm.device_active_link_id
WHERE dalm.device_id = ? AND dalm.type = ?
", $device_id, $type);
}
}