Page tree
Skip to end of metadata
Go to start of metadata

Конфигурация ЛК состоит из трех файлов, расположенных в папке WEB-INF: основного файла конфигурации mybgbilling-conf.groovy, файла конфигурации меню mybgbilling-menu.groovy, файла конфигурации платежных систем mybgbilling-payment.groovy. Файлы конфигурации созданы с использованием синтаксиса Groovy.

Обновление личного кабинета

Для обновления личного кабинета запустите скрипт mybgbilling-update.sh:

/opt/wildfly/standalone/deployments/MyBGBilling.war/WEB-INF/script/update_libs.sh

При обновлении файлы, рядом с которыми есть файл с таким же именем плюс суффикс(расширение) .orig, не будут перезаписаны файлом из сборки, вместо них обновяться .orig-файлы (см. Кастомизация нового личного кабинета). Также при обновлении полностью удаляется и перезаписывается директория MyBGBilling.war/WEB-INF/classes/ru/bitel.

Путь к контексту ЛК

Путь к контексту личного кабинета можно изменить в файле wildfly/standalone/deployments/MyBGBilling.war/WEB-INF/jboss-web.xml:

<!-- https://provider.ru/my -->
<context-root>/my</context-root>

Например, чтобы ЛК открывался от корня:

<!-- https://my.provider.ru/ -->
<context-root>/</context-root>

При использовании NGINX необходимо, чтобы путь к контексту был одинаковым в NGINX и в самом ЛК.

Восстановление пароля

При нажатии кнопки восстановления пароля через email пользователю в письме приходит ссылка, которая настраивается параметром конфигурации contract.password.forgot.link. Укажите в нем правильный путь до страницы index.xhml (вместо webexecuter):

contract.password.forgot.link=http://provider.ru/my/index.xhtml?action=ChangePassword&mid=contract

Описание синтаксиса файлов конфигурации groovy

Группы параметров в конфиге разделяются не точкой, а с помощью вложенных блоков. Значение параметра должно быть правильным Groovy/Java-объектом - в простом случае строкой, заключенной в одинарные или двойные кавычки, или числом, например:

one {
	two {
		parameterA = 'value1'
		three {
			parameterA = 'value2'
			parameterB = 100
		}
	}
}

Т.е. параметр конфигурации - это один или несколько вложенных блоков, имя параметра и значение после знака =. Данный пример в конфигурации модулей биллинга выглядел бы так:

one.two.parameterA=value1
one.two.three.parameterA=value2
one.two.three.parameterB=100

Некоторые значения параметров должны быть списками или массивами определенных объектов. Объекты списка заключены в квадратные скобки [] и разделены между собой символом запятой. Например:

authentication {

    modes = [
    	authenticationMode {
 			mode = 'contract'
    	}, 
 
    	authenticationMode {
     		mode = 'login'
     		module = 'inet'
     		moduleId = 1
     	}
    ]
}

Некоторые значения параметров могут быть ассоциативными массивами (список ключ:значение, map). Связки ключ:значение заключены в квадратные скобки [] и разделены между собой символом запятой. Например:

example {
    map = [
    	key: 'value',
    	key2: 200
    ]
}

Также параметры могут быть прописаны как ассоциативный массив, заключенный в круглые скобки (значение в этом случае прописывается через ':' (двеоточие), а не через символ '='):

authentication {

    modes = [
    	authenticationMode( mode: 'contract' ), 
    	authenticationMode( mode: 'login', module: 'inet', moduleId: 1 )
     	}
    ]
}

Некоторые значения могут быть динамическими, если использовать замыкания (closure). Т.е., грубо говоря, значением может быть функция, которая будет возвращать нужное значение:

status {
			// возможность изменения статуса договора
			//statusChange = { contract -> return contractInGroup( contract, [1, 2, 3, 4, 20] ) && isCustomer(); }
			//statusChange = { contract -> contractInGroup( contract, [1, 2, 3, 4, 20] ) && isCustomer() }
			statusChange = { isCustomer() }
}

В mybgbilling-conf.groovy и mybgbilling-menu.groovy в таких замыканиях можно использовать определенный набор методов, аргумент объект-contract, а также дополнительные аргументы, специфичные для определенного параметра конфигурации (например, параметры content.kernel.customerTitle и content.kernel.subContractGroup):

content {
	kernel {
		// название контрагента, отображаемое на странице
		customerTitle = { contract, contractParameterMap ->
		
			// ID параметров договоров названия физ. лиц (для customerTitle)
			def individualCustomerTitleParamIds = [0, 0, 0, 0, 0];
			// ID параметров договоров названия юр. лиц (для customerTitle)
			def corporationCustomerParamIds = [0, 0, 0, 0, 0];
	
			def paramIds = contract.personType == 1 ? corporationCustomerParamIds : individualCustomerTitleParamIds;
	
			String result = contractParameterMap.values().stream()
				.filter{ v -> paramIds.contains( v.entitySpecAttrId ) && notBlankString( v.toString() ) }
				.findFirst()
				.map{ v -> v.toString() }
				.orElse( null );
			
			// можно отобразить и просто комментарий договора
			//if( result == null ) {
			//	result = contract.comment;
			//}
			
			return result;
		}
	}
}

В замыканиях можно использовать методы:

  • isCustomer() или isUserInRole('customer') - возвращает true, если в режиме аутентификации, которым воспользовался абонент, не указан параметр role = 'unauthCustomer';
  • contractInGroup( contract, groupIds ) - возвращает true, если переданный в первый аргумент объект-contract содержит в себе одну из групп, указанных списке второго аргумента, например: contractInGroup( contract, [2, 3, 8, 13] ).
  • No labels