prepare('SELECT * FROM fc_intercom 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 intercom feature code extension */ $query = $pdo->prepare("SELECT * FROM fc_intercom 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 listened-to members for this intercom feature code */ $query = $pdo->prepare("SELECT fk_extension_member, fk_group_member, connectionid FROM fc_intercom_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'][$result['connectionid']]['extensions'][] = $result['fk_extension_member']; } if ($result['fk_group_member'] != 0) { $ret['members'][$result['connectionid']]['groups'][] = $result['fk_group_member']; } } /* Get the list of admins for this intercom feature code */ $query = $pdo->prepare("SELECT fk_extension_admin, fk_group_admin, connectionid FROM fc_intercom_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'][$result['connectionid']]['extensions'][] = $result['fk_extension_admin']; } if ($result['fk_group_admin'] != 0) { $ret['admins'][$result['connectionid']]['groups'][] = $result['fk_group_admin']; } } 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 fc_intercom */ $data['type'] = 'fc_intercom'; $data['feature'] = 1; /* triger a save on the extensions tables */ $data['pk_extension'] = extensions::save($data); /* create a record in the ext_voicemail table if this is a newly created extension */ if ($create_new) { $query = $pdo->prepare("INSERT INTO fc_intercom(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 intercom option */ $query = $pdo->prepare(" UPDATE fc_intercom SET header = :header, timeout = :timeout, twoway = :twoway, playsound = :playsound WHERE pk_extension = :pk_extension "); $query->bindValue(':header' , $data['header'] , PDO::PARAM_STR); $query->bindValue(':timeout' , $data['timeout'] , PDO::PARAM_INT); $query->bindValue(':twoway' , $data['twoway']=='1'?1:0 , PDO::PARAM_INT); $query->bindValue(':playsound' , $data['playsound']=='0'?0:1, 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 intercom members(talked-to) */ /* note : we updat by doing a delete all then insert new */ $query = $pdo->prepare("DELETE FROM fc_intercom_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 ($data['members'] as $connectionid => $members) { foreach ((array)($members['extensions']) as $fk_extension_member) { $query = $pdo->prepare("INSERT INTO fc_intercom_members (fk_extension, fk_extension_member, fk_group_member, connectionid) VALUES (:pk_extension, :fk_extension_member, 0, :connectionid)"); $query->bindValue(':pk_extension' , $data['pk_extension'], PDO::PARAM_INT); $query->bindValue(':fk_extension_member', $fk_extension_member , PDO::PARAM_INT); $query->bindValue(':connectionid' , $connectionid , PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } } foreach ((array)($members['groups']) as $fk_group_member) { $query = $pdo->prepare("INSERT INTO fc_intercom_members (fk_extension, fk_extension_member, fk_group_member, connectionid) VALUES (:pk_extension, 0, :fk_group_member, :connectionid)"); $query->bindValue(':pk_extension' , $data['pk_extension'], PDO::PARAM_INT); $query->bindValue(':fk_group_member', $fk_group_member , PDO::PARAM_INT); $query->bindValue(':connectionid' , $connectionid , PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } } } } /* update intercom admins(talkers) */ $query = $pdo->prepare("DELETE FROM fc_intercom_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 ($data['admins'] as $connectionid => $admins) { foreach ((array)($admins['extensions']) as $fk_extension_admin) { $query = $pdo->prepare("INSERT INTO fc_intercom_admins (fk_extension, fk_extension_admin, fk_group_admin, connectionid) VALUES (:pk_extension, :fk_extension_admin, 0, :connectionid)"); $query->bindValue(':pk_extension' , $data['pk_extension'], PDO::PARAM_INT); $query->bindValue(':fk_extension_admin', $fk_extension_admin , PDO::PARAM_INT); $query->bindValue(':connectionid' , $connectionid , PDO::PARAM_INT); $query->execute(); if ($query->errorCode() != '00000') { $error = $query->errorInfo(); throw new Exception($error[2]); } } foreach ((array)($admins['groups']) as $fk_group_admin) { $query = $pdo->prepare("INSERT INTO fc_intercom_admins (fk_extension, fk_extension_admin, fk_group_admin, connectionid) VALUES (:pk_extension, 0, :fk_group_admin, :connectionid)"); $query->bindValue(':pk_extension' , $data['pk_extension'], PDO::PARAM_INT); $query->bindValue(':fk_group_admin', $fk_group_admin , PDO::PARAM_INT); $query->bindValue(':connectionid' , $connectionid , 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(); /* force */ $data['feature'] = 1; /* validate first against the extensions table */ $errors = extensions::validate($data); return $errors; } static function generate() { $ret = extensions::generate(); $ret['header'] = 'Intercom'; $ret['timeout'] = 120; $ret['twoway'] = 1; $ret['playsound'] = 1; return $ret; } static function delete($pk_extension) { $pdo = database::pdo(); /* Delete from the extensions table */ extensions::delete($pk_extension); /* Delete entry from the voicemail extensions table */ $query = $pdo->prepare("DELETE FROM fc_intercom 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 intercom extension */ $query = $pdo->prepare("DELETE FROM fc_intercom_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]); } /* delete the admins from this intercom extension */ $query = $pdo->prepare("DELETE FROM fc_intercom_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]); } } }