prepare('SELECT * FROM ext_grouppickup LIMIT :limit OFFSET :offset'); // TODO: Implemente sorting $query->bindParam(':limit' , $limit , PDO::PARAM_INT); $query->bindParam(':offset' , $offset , PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } $ret = $query->fetchAll(PDO::FETCH_ASSOC); return $ret; } static function retrive($pk_extension) { $pdo = database::pdo(); $extension = extensions::retrive($pk_extension); /* Get general information about this group pickup extension */ $query = $pdo->prepare("SELECT * FROM ext_grouppickup WHERE pk_extension=:pk_extension LIMIT 1"); $query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } $ret = $query->fetch(PDO::FETCH_ASSOC); /* If we have no results at the last query, return a null array */ if ($query->rowCount() != 1) { return null; } $ret = array_merge($extension, $ret); /* Get the list of members for this call pickup extension */ $query = $pdo->prepare("SELECT fk_extension_member, fk_group_member FROM ext_grouppickup_members WHERE fk_extension = :pk_extension"); $query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } while ($result = $query->fetch(PDO::FETCH_ASSOC)) { if ($result['fk_extension_member'] != 0) { $ret['members']['extensions'][] = $result['fk_extension_member']; } if ($result['fk_group_member'] != 0) { $ret['members']['group'] = $result['fk_group_member']; } } /* Get the list of admins for this call pickup extension */ $query = $pdo->prepare("SELECT fk_extension_admin, fk_group_admin FROM ext_grouppickup_admins WHERE fk_extension = :pk_extension"); $query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } while ($result = $query->fetch(PDO::FETCH_ASSOC)) { if ($result['fk_extension_admin'] != 0) { $ret['admins']['extensions'][] = $result['fk_extension_admin']; } if ($result['fk_group_admin'] != 0) { $ret['admins']['group'] = $result['fk_group_admin']; } } //echo"
"; print_r($ret);die();
		return $ret;
	}
	static function save($data) {
		$pdo = database::pdo();
		
		/* set a flag if this is a newly created extension */
		if ($data['pk_extension'] == "") {
			$create_new = true;
		}
		
		/* force type to grouppickup */
		$data['type'] = 'grouppickup';

		/* triger a save on the extensions tables */
		$data['pk_extension'] = extensions::save($data);
		
		/* create a record in the ext_grouppickup table if this is a newly created extension */
		if ($create_new) {
			$query = $pdo->prepare("INSERT INTO ext_grouppickup(pk_extension) VALUES(:pk_extension)");
			$query->bindParam(':pk_extension', $data['pk_extension'], PDO::PARAM_INT);
			$query->execute();
			if ($query->errorCode() != '00000') {
				$error = $query->errorInfo();
				throw new Exception($error[2]);
			}
		}
		
		/* update the group pickup options */
		$query = $pdo->prepare("
			UPDATE
				ext_grouppickup
			SET
				use_members_byaccount = :use_members_byaccount,
				use_admins_byaccount  = :use_admins_byaccount
			WHERE
				pk_extension = :pk_extension
		");
		$query->bindValue(':use_members_byaccount', $data['use_members_byaccount']=='1'?1:0, PDO::PARAM_INT);
		$query->bindValue(':use_admins_byaccount' , $data['use_admins_byaccount']=='1'?1:0 , PDO::PARAM_INT);
		$query->bindValue(':pk_extension'         , $data['pk_extension']                  , PDO::PARAM_INT);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
		
		
		/* update group pickup members(picked-up) */
		/* note : we updat by doing a delete all then insert new */
		$query = $pdo->prepare("DELETE FROM ext_grouppickup_members WHERE fk_extension = :pk_extension");
		$query->bindValue(':pk_extension', $data['pk_extension']);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
		
		if (is_array($data['members'])) {
			foreach ((array)($data['members']['extensions']) as $fk_extension_member) {
				$query = $pdo->prepare("INSERT INTO ext_grouppickup_members (fk_extension, fk_extension_member, fk_group_member) VALUES (:pk_extension, :fk_extension_member, 0)");
				$query->bindValue(':pk_extension'       , $data['pk_extension'], PDO::PARAM_INT);
				$query->bindValue(':fk_extension_member', $fk_extension_member , PDO::PARAM_INT);
				$query->execute();
				if ($query->errorCode() != '00000') {
					$error = $query->errorInfo();
					throw new Exception($error[2]);
				}
			}
			
			if ($data['members']['group']){
			    $fk_group_member = $data['members']['group'];
			    
				$query = $pdo->prepare("INSERT INTO ext_grouppickup_members (fk_extension, fk_extension_member, fk_group_member) VALUES (:pk_extension, 0, :fk_group_member)");
				$query->bindValue(':pk_extension'   , $data['pk_extension'], PDO::PARAM_INT);
				$query->bindValue(':fk_group_member', $fk_group_member     , PDO::PARAM_INT);
				$query->execute();
				if ($query->errorCode() != '00000') {
					$error = $query->errorInfo();
					throw new Exception($error[2]);
				}
			}
		}
		
		/* update group pickup admins(pickup-ers) */
		/* note : we updat by doing a delete all then insert new */
		$query = $pdo->prepare("DELETE FROM ext_grouppickup_admins WHERE fk_extension = :pk_extension");
		$query->bindValue(':pk_extension', $data['pk_extension']);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
		
		if (is_array($data['admins'])) {
			foreach ((array)($data['admins']['extensions']) as $fk_extension_admin) {
				$query = $pdo->prepare("INSERT INTO ext_grouppickup_admins (fk_extension, fk_extension_admin, fk_group_admin) VALUES (:pk_extension, :fk_extension_admin, 0)");
				$query->bindValue(':pk_extension'      , $data['pk_extension'], PDO::PARAM_INT);
				$query->bindValue(':fk_extension_admin', $fk_extension_admin  , PDO::PARAM_INT);
				$query->execute();
				if ($query->errorCode() != '00000') {
					$error = $query->errorInfo();
					throw new Exception($error[2]);
				}
			}
			
			if ($data['admins']['group']){
			    $fk_group_admin = $data['admins']['group'];
			    
				$query = $pdo->prepare("INSERT INTO ext_grouppickup_admins (fk_extension, fk_extension_admin, fk_group_admin) VALUES (:pk_extension, 0, :fk_group_admin)");
				$query->bindValue(':pk_extension'  , $data['pk_extension'], PDO::PARAM_INT);
				$query->bindValue(':fk_group_admin', $fk_group_admin      , PDO::PARAM_INT);
				$query->execute();
				if ($query->errorCode() != '00000') {
					$error = $query->errorInfo();
					throw new Exception($error[2]);
				}
			}
		}

		return $data['pk_extension'];
	}
	static function validate($data) {
		$errors = array();
		
		/* validate first against the extensions table */
		$errors = extensions::validate($data);

		return $errors;
	}
	static function generate() {
		$ret = extensions::generate();
		
		return $ret;
	}
	static function delete($pk_extension) {
		$pdo = database::pdo();
		
		/* Delete from the extensions table */
		extensions::delete($pk_extension);

		/* Delete entry from the group pickup extensions table */
		$query = $pdo->prepare("DELETE FROM ext_grouppickup WHERE pk_extension = :pk_extension");
		$query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
		
		/* delete the members from this call pickup extension */
		$query = $pdo->prepare("DELETE FROM ext_grouppickup_members WHERE fk_extension = :pk_extension");
		$query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
		
		/* delete the admins from this call pickup extension */
		$query = $pdo->prepare("DELETE FROM ext_grouppickup_admins WHERE fk_extension = :pk_extension");
		$query->bindParam(':pk_extension', $pk_extension, PDO::PARAM_INT);
		$query->execute();
		if ($query->errorCode() != '00000') {
			$error = $query->errorInfo();
			throw new Exception($error[2]);
		}
	}
}