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