Projekt

Obecné

Profil

Stáhnout (4.79 KB) Statistiky
| Větev: | Tag: | Revize:
<?php defined('SYSPATH') or die('No direct script access.');
/*
* This file is part of open source system FreenetIS
* and it is released 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/
*
*/

/**
* Model of cloud which can be managed by admins and contains subnets
*
* @package Model
*
* @property integer $id
* @property string $name
* @property ORM_Iterator $subnets
* @property ORM_Iterator $users
*/
class Cloud_Model extends ORM
{
protected $has_and_belongs_to_many = array('subnets', 'users');

/**
* Function gets all cloud's names and ids
*
* @author Ondřej Fibich
* @return Mysql_Result
*/
public function get_all_clouds()
{
return $this->db->query("
SELECT c.id, c.name,
(
SELECT COUNT(*)
FROM clouds_users
WHERE cloud_id = c.id
) AS admin_count,
(
SELECT COUNT(*)
FROM clouds_subnets
WHERE cloud_id = c.id
) AS subnet_count
FROM clouds c
");
}

/**
* Gets admins of cloud
*
* @param integer $cloud_id
* @return Mysql_Result
*/
public function get_cloud_admins($cloud_id = NULL)
{
if (empty($cloud_id))
{
$cloud_id = $this->id;
}
return $this->db->query("
SELECT u.id, u.id AS uid, CONCAT(
COALESCE(u.surname, ''),' ',
COALESCE(u.name, ''),' - ',
COALESCE(u.login, '')
) as user
FROM clouds_users cu
LEFT JOIN users u ON u.id = cu.user_id
WHERE cu.cloud_id = ?
", $cloud_id);
}

/**
* Gets subnets of cloud
*
* @param integer $cloud_id
* @return Mysql_Result
*/
public function get_cloud_subnets($cloud_id = NULL)
{
if (empty($cloud_id))
{
$cloud_id = $this->id;
}
return $this->db->query("
SELECT s.id, s.id AS sid, s.name, s.netmask,
CONCAT(s.network_address,'/', 32-log2((~inet_aton(netmask) & 0xffffffff) + 1)) AS network_address
FROM clouds_subnets cu
LEFT JOIN subnets s ON s.id = cu.subnet_id
WHERE cu.cloud_id = ?
ORDER BY inet_aton(s.network_address)
", $cloud_id);
}

/**
* Gets list of admins which are not admins of cloud
*
* @param integer $cloud_id
* @return array
*/
public function select_list_of_admins_not_in($cloud_id = NULL)
{
if (empty($cloud_id))
{
$cloud_id = $this->id;
}
$subnets = $this->db->query("
SELECT id, CONCAT(
COALESCE(surname, ''),' ',
COALESCE(name, ''),' - ',
COALESCE(login, '')
) as user
FROM users
WHERE id NOT IN
(
SELECT cu.user_id
FROM clouds c
JOIN clouds_users cu ON c.id = cu.cloud_id
WHERE c.id = ?
)
ORDER BY user
", $cloud_id);
$list = array();
foreach ($subnets as $subnet)
{
if (!empty($subnet->user))
{
$list[$subnet->id] = $subnet->user;
}
}
return $list;
}

/**
* Gets list of subnets which are not in cloud
*
* @param integer $cloud_id
* @return array
*/
public function select_list_of_subnets_not_in($cloud_id = NULL)
{
if (empty($cloud_id))
{
$cloud_id = $this->id;
}
$subnets = $this->db->query("
SELECT id,
CONCAT(
CONCAT(network_address,'/', 32-log2((~inet_aton(netmask) & 0xffffffff) + 1)),
' - ', name
) AS name
FROM subnets
WHERE id NOT IN
(
SELECT cu.subnet_id
FROM clouds c
JOIN clouds_subnets cu ON c.id = cu.cloud_id
WHERE c.id = ?
)
ORDER BY inet_aton(network_address)
", $cloud_id);
$list = array();
foreach ($subnets as $subnet)
{
$list[$subnet->id] = $subnet->name;
}
return $list;
}
/**
* Removes admins from cloud
*
* @param integer $cloud_id Cloud
* @param array $admin_ids Array of users ids
*/
public function remove_admins($cloud_id, $admin_ids)
{
if (is_array($admin_ids) && count($admin_ids))
{
for ($i = 0; $i < count($admin_ids); $i++)
{
$admin_ids[$i] = intval($admin_ids[$i]);
}
$this->db->query("
DELETE FROM clouds_users
WHERE cloud_id = ? AND user_id IN(" . implode(', ', $admin_ids) . ")
", $cloud_id);
}
}
/**
* Removes admins from cloud
*
* @param integer $cloud_id Cloud
* @param array $subnet_ids Array of users ids
*/
public function remove_subnets($cloud_id, $subnet_ids)
{
if (is_array($subnet_ids) && count($subnet_ids))
{
for ($i = 0; $i < count($subnet_ids); $i++)
{
$subnet_ids[$i] = intval($subnet_ids[$i]);
}
$this->db->query("
DELETE FROM clouds_subnets
WHERE cloud_id = ? AND subnet_id IN(" . implode(', ', $subnet_ids) . ")
", $cloud_id);
}
}
}
(16-16/84)