Source of file api.mobilesext.php
Size: 12,315 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.mobilesext.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 | <?php /** * Additional users mobile numbers basic class */ class MobilesExt { /** * Contains system alter.ini config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains all additiona mobile numbers as id=>data * * @var array */ protected $allMobiles = array(); /** * Additional mobiles database abstraction layer here. * * @var object */ protected $mobilesDb = ''; /** * System message helper object placeholder * * @var obejct */ protected $messages = ''; /** * Some predefined stuff such as routes, URLs, etc.. */ const URL_ME = '?module=mobileedit'; const TABLE_MOBILES = 'mobileext'; const ROUTE_LOGIN = 'username'; const ROUTE_DELETE_ID = 'deletemobileextid'; const PROUTE_NEW_LOGIN = 'newmobileextlogin'; const PROUTE_NEW_NUMBER = 'newmobileextnumber'; const PROUTE_NEW_NOTES = 'newmobileextnotes'; const PROUTE_ED_ID = 'editmobileextid'; const PROUTE_ED_NUMBER = 'editmobileextnumber'; const PROUTE_ED_NOTES = 'editmobileextnotes'; /** * Creates new MobilesExt instance * * @return void */ public function __construct() { /** * Шива-Шиво, чому так паршиво? * Чому, повинні все це бачити на живо? */ $this->initMessages(); $this->loadAlter(); $this->initDb(); $this->loadAllMobiles(); } /** * Inits system messages helper object for further usage * * @return void */ protected function initMessages() { $this->messages = new UbillingMessageHelper(); } /** * Loads system alter config * * @global object $ubillingConfig * * @return void */ protected function loadAlter() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Inits database abstraction layer for further usage. * * @return void */ protected function initDb() { $this->mobilesDb = new NyanORM(self::TABLE_MOBILES); } /** * Loads all additional mobiles data from database * * @return void */ protected function loadAllMobiles() { $this->allMobiles = $this->mobilesDb->getAll('id'); } /** * Returns filtered array for some user phones as id => data or as login => array_of_mobiles * * @param string $login * @param bool $loginAsKey * * @return array */ public function getUserMobiles($login, $loginAsKey = false) { $result = array(); if (!empty($login)) { if (!empty($this->allMobiles)) { foreach ($this->allMobiles as $io => $each) { if ($each['login'] == $login) { if ($loginAsKey) { $result[$login][] = $each['mobile']; } else { $result[$each['id']] = $each; } } } } } return ($result); } /** * Creates new additional mobile for some user * * @param string $login * @param string $mobile * @param string $notes * * @return int */ public function createUserMobile($login, $mobile, $notes = '') { $result = ''; if ((!empty($login)) AND ( !empty($mobile))) { $this->mobilesDb->data('login', ubRouting::filters($login, 'mres')); $this->mobilesDb->data('mobile', ubRouting::filters($mobile, 'mres')); $this->mobilesDb->data('notes', ubRouting::filters($notes, 'mres')); $this->mobilesDb->create(); $result = $this->mobilesDb->getLastId(); log_register('MOBILEEXT CREATE (' . $login . ') MOBILE `' . $mobile . '` [' . $result . ']'); } return ($result); } /** * Deletes some additional mobile record from database by its ID * * @param int $mobileId * * @return void */ public function deleteUserMobile($mobileId) { $mobileId = ubRouting::filters($mobileId, 'int'); if (isset($this->allMobiles[$mobileId])) { $mobileData = $this->allMobiles[$mobileId]; $this->mobilesDb->where('id', '=', $mobileId); $this->mobilesDb->delete(); log_register('MOBILEEXT DELETE (' . $mobileData['login'] . ') MOBILE `' . $mobileData['mobile'] . '` [' . $mobileId . ']'); } } /** * Changes additional mobile database records if required * * @param int $mobileId * @param string $mobile * @param string $notes * * @return void */ public function updateUserMobile($mobileId, $mobile, $notes = '') { $mobileId = ubRouting::filters($mobileId, 'int'); if (isset($this->allMobiles[$mobileId])) { $mobileData = $this->allMobiles[$mobileId]; $somethingChanged = false; if ((!empty($mobile)) AND ( $mobileData['mobile'] != $mobile)) { $somethingChanged = true; $this->mobilesDb->data('mobile', ubRouting::filters($mobile, 'mres')); log_register('MOBILEEXT CHANGE (' . $mobileData['login'] . ') MOBILE ON `' . $mobile . '` [' . $mobileId . ']'); } if ($mobileData['notes'] != $notes) { $somethingChanged = true; $this->mobilesDb->data('notes', ubRouting::filters($notes, 'mres')); log_register('MOBILEEXT CHANGE (' . $mobileData['login'] . ') NOTES'); } //push changes to DB if ($somethingChanged) { $this->mobilesDb->where('id', '=', $mobileId); $this->mobilesDb->save(); } } } /** * Renders create form for some user * * @return string */ public function renderCreateForm($login) { $result = ''; if (!empty($login)) { $formFilter = (@$this->altCfg['MOBILE_FILTERS_DISABLED']) ? '' : 'mobile'; $inputs = wf_HiddenInput(self::PROUTE_NEW_LOGIN, $login); $inputs .= wf_TextInput(self::PROUTE_NEW_NUMBER, __('New mobile'), '', false, '20', $formFilter); $inputs .= wf_TextInput(self::PROUTE_NEW_NOTES, __('New notes'), '', false, '40'); $inputs .= wf_Submit(__('Create')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $result .= wf_CleanDiv(); } return ($result); } /** * Renders additional mobile edit form * * @param int $mobileId * * @return string */ protected function renderEditForm($mobileId) { $result = ''; $mobileId = vf($mobileId, 3); if (isset($this->allMobiles[$mobileId])) { $formFilter = (@$this->altCfg['MOBILE_FILTERS_DISABLED']) ? '' : 'mobile'; $mobileData = $this->allMobiles[$mobileId]; $inputs = wf_HiddenInput(self::PROUTE_ED_ID, $mobileId); $inputs .= wf_TextInput(self::PROUTE_ED_NUMBER, __('Mobile'), $mobileData['mobile'], true, '20', $formFilter); $inputs .= wf_TextInput(self::PROUTE_ED_NOTES, __('Notes'), $mobileData['notes'], true, '40'); $inputs .= wf_Submit(__('Save')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $result .= wf_CleanDiv(); } return ($result); } /** * Returns list of all user additional mobiles with required controls * * @param string $login * * @return string */ public function renderUserMobilesList($login) { $result = ''; $userMobiles = $this->getUserMobiles($login); if (!empty($userMobiles)) { $cells = wf_TableCell(__('Mobile')); $cells .= wf_TableCell(__('Notes')); $cells .= wf_TableCell(__('Actions')); $rows = wf_TableRow($cells, 'row1'); foreach ($userMobiles as $io => $each) { $cells = wf_TableCell($each['mobile']); $cells .= wf_TableCell($each['notes']); $deleteUrl = self::URL_ME . '&' . self::ROUTE_LOGIN . '=' . $login . '&' . self::ROUTE_DELETE_ID . '=' . $each['id']; $cancelUrl = self::URL_ME . '&' . self::ROUTE_LOGIN . '=' . $login; $dialogTitle = __('Delete') . ' ' . __('Additional mobile') . '?'; $alertLabel = __('Delete') . ' ' . __('Additional mobile') . ' ' . $each['mobile'] . '? ' . $this->messages->getDeleteAlert(); $actLinks = wf_ConfirmDialog($deleteUrl, web_delete_icon(), $alertLabel, '', $cancelUrl, $dialogTitle); $actLinks .= wf_modalAuto(web_edit_icon(), __('Edit') . ' ' . $each['mobile'], $this->renderEditForm($each['id'])); $cells .= wf_TableCell($actLinks); $rows .= wf_TableRow($cells, 'row3'); } $result .= wf_TableBody($rows, '100%', 0, 'sortable'); } return ($result); } /** * Returns all available additional mobiles data as id=>data * * @return array */ public function getAllMobiles() { return ($this->allMobiles); } /** * Returns array of all users additional mobiles as login=>mobiles array * * @return array */ public function getAllUsersMobileNumbers() { $result = array(); if (!empty($this->allMobiles)) { foreach ($this->allMobiles as $io => $each) { $result[$each['login']][] = $each['mobile']; } } return($result); } /** * Returns all additional mobiles data as mobile=>login * * @return array */ public function getAllMobilesUsers() { $result = array(); if (!empty($this->allMobiles)) { foreach ($this->allMobiles as $io => $each) { $result[$each['mobile']] = $each['login']; } } return ($result); } /** * Renders fast ext mobile add form * * @param string $login * * @return void */ public function fastNumAttachForm($login) { $result = ''; $pbxNum = new PBXNum(); $inCallsLog = $pbxNum->parseLog(); $telepathy = new Telepathy(false, true, false, false); $telepathy->usePhones(); if (!empty($inCallsLog)) { $numsTmp = array(); $curdate = curdate(); $curhour = date("H:"); foreach ($inCallsLog as $io => $each) { //only today calls if ($each['date'] == $curdate) { if ((empty($each['login'])) AND ( $each['reply'] == 0)) { //just for last hour if (substr($each['time'], 0, 3) == $curhour) { if (!empty($each['number'])) { //is this really unknown number? $detectedLogin = $telepathy->getByPhone($each['number'], true, true); if (empty($detectedLogin)) { $numsTmp[$each['number']] = $each['time'] . ' - ' . $each['number']; } } } } } } //new extmobile form rendering if (!empty($numsTmp)) { if (!empty($login)) { $inputs = wf_HiddenInput(self::PROUTE_NEW_LOGIN, $login); $inputs .= wf_Selector(self::PROUTE_NEW_NUMBER, $numsTmp, __('New mobile'), '', false); $inputs .= wf_TextInput(self::PROUTE_NEW_NOTES, __('New notes'), '', false, '40'); $inputs .= wf_Submit(__('Create')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); $result .= wf_CleanDiv(); } show_window(__('Some of numbers which calls us today'), $result); } } } } |