getRequestValue('id'); /** * load hosting */ $hosting = Hosting::where('id', $hid)->first(); /** * load api */ $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0'); $fields =array( 'id', 'companyContactId', 'loginName', 'fullName', 'description', 'isEnabled', 'emailAddresses', 'diskSizeLimit', ); $cond = array( array( "fieldName" => "id", "comparator" => "Eq", "value" => $this->actionElementId ) ); try { $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword')); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $domainID = $api->getDomainId($this->getWhmcsParamByKey('customfields')['maildomain']); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $account = $api->getUsers($fields,$domainID,$cond); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $address = $api->getAddress($this->actionElementId); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } $api->logout(); $this->data['id'] = $account[0]['id']; $this->data['username'] = $account[0]['loginName']; $this->data['domain'] = $this->getWhmcsParamByKey('customfields')['maildomain']; $this->data['firstname'] = $address['contacts'][0]['firstName']; $this->data['lastname'] = $address['contacts'][0]['surName']; $this->data['display_name'] = $address['contacts'][0]['commonName']; $this->data['status'] = $account['isEnabled']; $this->data['title'] = $address['contacts'][0]['titleBefore']; $this->data['profession'] = $address['contacts'][0]['profession']; $this->data['work_phone'] = $address['contacts'][0]['phoneNumberWorkVoice']; $this->data['mobile_phone'] = $address['contacts'][0]['phoneNumberMobile']; $this->data['department'] = $address['contacts'][0]['departmentName']; $this->data['office'] = $address['contacts'][0]['postalAddressWork']['extendedAddress']; if ($account[0]['diskSizeLimit']['isActive'] === TRUE) { $this->data['quota'] = $account[0]['diskSizeLimit']['limit']['value']; $this->data['unit'] = $account[0]['diskSizeLimit']['limit']['units']; } else { $this->data['quota'] = 0; } $lang = di('lang'); $this->availableValues['status'] = [ Kerio::ACC_STATUS_ACTIVE => $lang->absoluteT('kerio','account','status','active'), Kerio::ACC_STATUS_CLOSED => $lang->absoluteT('kerio','account','status','closed') ]; $this->availableValues['unit'] = [ 'MegaBytes' => 'MB', 'GigaBytes' => 'GB', ]; } /** * @return HtmlDataJsonResponse */ public function update() { /** * hosting id */ $hid = $this->request->get('id'); $fieldToProtection = ['firstname', 'lastname', 'display_name', 'office', 'title', 'department', 'profession']; foreach ($this->formData as $field => &$value) { $value = in_array($field, $fieldToProtection) ? htmlentities($value) : $value; } /** * product manager allow to check product settings */ $productManager = new ProductManager(); $productManager->loadByHostingId($hid); $account['isEnabled'] = $this->formData['status'] === 'active' ? TRUE : FALSE; if ($this->formData['quota'] > 0) { $account['diskSizeLimit']['isActive'] = TRUE; $account['diskSizeLimit']['limit']['value'] = intval($this->formData['quota']); $account['diskSizeLimit']['limit']['units'] = $this->formData['unit']; } else { $account['diskSizeLimit']['isActive'] = FALSE; } $fields['firstName'] = $this->formData['firstname']; $fields['surName'] = $this->formData['lastname']; $fields['commonName'] = $this->formData['display_name']; $fields['postalAddressWork']['extendedAddress'] = $this->formData['office']; $fields['titleBefore'] = $this->formData['title']; $fields['phoneNumberWorkVoice'] = $this->formData['work_phone']; $fields['phoneNumberMobile'] = $this->formData['mobile_phone']; $fields['departmentName'] = $this->formData['department']; $fields['profession'] = $this->formData['profession']; $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0'); try { $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword')); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $result = $api->modifyUser($this->formData['id'], $account); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $result = $api->setAddress($this->formData['id'], $fields); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } $api->logout(); return (new HtmlDataJsonResponse())->setMessageAndTranslate('emailAccountHasBeenUpdated')->setStatusSuccess(); } /** * @return HtmlDataJsonResponse */ public function updateStatus() { /** * hosting id */ $hid = $this->request->get('id'); /** * product manager allow to check product settings */ $productManager = new ProductManager(); $productManager->loadByHostingId($hid); $status['isEnabled'] = $this->formData['status'] === 'active' ? TRUE : FALSE; $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0'); try { $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword')); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $result = $api->modifyUser($this->formData['id'], $status); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } $api->logout(); /** * return success */ return (new HtmlDataJsonResponse())->setMessageAndTranslate('emailAccountStatusHasBeenUpdated')->setStatusSuccess(); } /** * @return HtmlDataJsonResponse */ public function changePassword() { /** * hosting id */ $hid = $this->request->get('id'); /** * product manager allow to check product settings */ $productManager = new ProductManager(); $productManager->loadByHostingId($hid); $fields['password'] = $this->formData['password']; $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0'); try { $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword')); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } try { $result = $api->modifyUser($this->formData['id'], $fields); } catch (KerioApiException $error) { logModuleCall( 'kerioEmail', __FUNCTION__, $error, 'Debug Error', $error->getMessage() ); return ['error' => $error->getMessage()]; } $api->logout(); return (new HtmlDataJsonResponse())->setMessageAndTranslate('passwordChangedSuccessfully')->setStatusSuccess(); } /** * */ public function readCosParams() { $hid = $this->getRequestValue('id'); /** * product manager allow to check product settings */ $productManager = new ProductManager(); $productManager->loadByHostingId($hid); if($productManager->get('cos_name') === ClassOfServices::CLASS_OF_SERVICE_QUOTA) { /** * * get soap create domain service */ $api =(new KerioManager()) ->getApiByHosting($hid) ->soap; /** * * get cos from API */ $classOfServices = $api->repository()->cos->all(); /** * * load configurable options coses */ $supportedCos = $productManager->getSettingCos(); /** * * add COS to array */ $configoptions = $this->getFilteredCosConfigurableOptions(); foreach($classOfServices as $cos) { /** * * * skip COS which is not used in configurable options */ if(!($supportedCos && array_key_exists($cos->getId(), $supportedCos))) { continue; } /** * * skip if class of services doesnt exists in config option list */ if($configoptions && !array_key_exists('cosQuota_'.$cos->getId(), $configoptions)) { continue; } /** * skip not purchased as CO */ if ($configoptions && $configoptions['cosQuota_'.$cos->getId()] == 0) { continue; } /** * 1. check if config opts are not available * 2. skip if quantity === 0 */ if(!$configoptions && $supportedCos[$cos->getId()] == 0) { continue; } /* @var $cos ClassOfService*/ $this->availableValues['cosId'][$cos->getId()] = $cos->getMbMailQuote().' MB'; } } } /** * @return bool|mixed */ protected function getFilteredCosConfigurableOptions() { $configoptions = $this->getWhmcsParamByKey('configoptions'); foreach($configoptions as $key => $value) { if(strpos($key, ClassOfServicesOptions::COS_CONFIG_OPT_PREFIX) === false) { unset($configoptions[$key]); } } return $configoptions; } }