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);
- }
- }
- }
- }
|