Example #1
0
 public static function createUserExtension($user_id, $extension = NULL, $context_id = NULL, $location_id = NULL, $options = array())
 {
     Doctrine::getTable('User')->getRecordListener()->get('MultiTenant')->setOption('disabled', TRUE);
     $user = Doctrine::getTable('User')->find($user_id);
     Doctrine::getTable('User')->getRecordListener()->get('MultiTenant')->setOption('disabled', TRUE);
     if (!$user) {
         kohana::log('debug', 'Could not locate user_id ' . $user_id);
         return FALSE;
     }
     $account_id = $user['account_id'];
     if (!$context_id) {
         $context_id = Context::getContextByType('private', $account_id);
     }
     if (!$location_id) {
         Doctrine::getTable('Location')->getRecordListener()->get('MultiTenant')->setOption('disabled', TRUE);
         $locations = Doctrine_Query::create()->from('Location')->where('account_id = ?', array($account_id))->execute();
         Doctrine::getTable('Location')->getRecordListener()->get('MultiTenant')->setOption('disabled', FALSE);
         if (empty($locations[0]['location_id'])) {
             kohana::log('error', 'Unable to initialize device number: could not determine location_id');
             return FALSE;
         }
         $location_id = $locations[0]['location_id'];
     }
     Doctrine::getTable('Device')->getRecordListener()->get('MultiTenant')->setOption('disabled', TRUE);
     $deviceNum = Doctrine_Query::create()->from('Device')->where('account_id = ?', array($account_id))->count() + 1;
     if (!$extension) {
         $baseExt = kohana::config('telephony.device_exten_start', 2000);
         if (!$baseExt) {
             $baseExt = 2000;
         }
         $extension = $baseExt + $deviceNum;
     }
     Kohana::log('debug', 'Generating a device for user ' . $user_id . ' in account ' . $account_id . ' as extension ' . $extension . ' in context ' . $context_id);
     try {
         $conn = Doctrine_Manager::connection();
         $conn->beginTransaction();
         $device = new Device();
         $device['account_id'] = $account_id;
         $device['user_id'] = $user_id;
         $device['context_id'] = $context_id;
         $device['name'] = 'Exten ' . $extension . ' for ' . $user['first_name'] . ' ' . $user['last_name'];
         $device['type'] = 'SipDevice';
         $data = array('device' => &$device, 'user' => &$user, 'extension' => $extension, 'user_id' => $user_id, 'context_id' => $context_id, 'account_id' => $account_id, 'location_id' => $location_id, 'owner_name' => $user['first_name'] . ' ' . $user['last_name']);
         $data += $options;
         Event::run('bluebox.create.extension', $data);
         $device->save();
         Event::run('bluebox.create.extensionnumber', $data);
         $conn->commit();
     } catch (Exception $e) {
         $conn->rollback();
         Doctrine::getTable('Device')->getRecordListener()->get('MultiTenant')->setOption('disabled', FALSE);
         kohana::log('error', 'Unable to generate device ' . $deviceNum . ' as ' . $extension . ' because: ' . $e->getMessage());
         return FALSE;
     }
     Doctrine::getTable('Device')->getRecordListener()->get('MultiTenant')->setOption('disabled', FALSE);
     return TRUE;
 }