beta / base.vote
Simple wrapper bitrix vote
Installs: 66
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 0
Type:lib
Requires
- php: >=7.2
- ext-json: *
- beta/bx.model: ^1.0
Requires (Dev)
- squizlabs/php_codesniffer: ^3.6
- vimeo/psalm: ^4.20
README
Установка
composer require beta/base.vote
Данный пакет предоставляет функционал для описания опросов/голосований, разрабатывался как обёртка модуля vote CMS Bitrix. Не является полной реализацией, отсуствует имплементация сервисов:
- VoteServiceInterface - предназначен для работы со схемой опроса (сохранение схемы, запрос схем(ы) по заданным критериям)
- VoteResultServiceInterface - предназначен для работы с результатами опроса (сохранение результата, запрос результатов по заданным критериям)
Для работы с опросами задействованы следующие интерфейсы:
- VoteSchemaInterface - интерфейс схемы опроса, содержит: название и описание. Так же предоставляет возможность оперировать с произвольными свойствами через методы getProp(string $key) и setProp(string $key, $value). Предоставляет доступ с вопросам.
- QuestionInterface - интерфейс вопроса. содержит: текст вопроса, признак необходимости обязательного ответа, тип вопроса (произвольное целое число, может варьироваться в зависимости от реализации). Предоставляет доступ к вариантам ответа, варианты ответа обязательны для любых вопросов, даже для тех которые требуют ответ в произвольной форме. Предоставляет возможность оперировать с произвольными свойствами через методы getProp(string $key) и setProp(string $key, $value).
- AnswerVariantInterface - интерфейс варианта ответа, содержит: текст ответа и тип варианта ответа (произвольное целое число, может варьироваться в зависимости от реалзации). Предоставляет возможность оперировать с произвольными свойствами через методы getProp(string $key) и setProp(string $key, $value).
Интерфейсы для работы с результатом опроса:
- VoteResultInterface - интерфейс результата опроса, предоставляет доступ к ответам на вопросы. Так же предоставляет возможность оперировать с произвольными свойствами через методы getProp(string $key) и setProp(string $key, $value).
- AnswerResultInterface - интерфейс ответа на вопрос, содержит ссылку на вариант ответа - AnswerVariantInterface и произвольный текст ответа. Предоставляет возможность оперировать с произвольными свойствами через методы getProp(string $key) и setProp(string $key, $value).
Схема опроса построена в виде дерева, каждый дочений элемент имеет доступ к родителю:
VoteSchemaInterface <-> QuestionInterface <-> AnswerVariantInterface
Результат опроса:
VoteResultInterface <-> AnswerResultInterface -> AnswerVariantInterface
Пример создания опроса:
use Base\Vote\Interfaces\VoteServiceInterface; use Base\Vote\QuestionType; use Base\Vote\AnswerVariantType; use Base\Vote\VoteSchema; /** * @var VoteServiceInterface $voteService **/ $voteService = new SomeImplementationVoteService(); $newVoteSchema = VoteSchema::createNewVote('Новый опрос', 'Некоторое описание для опроса'); $question1 = $newVoteSchema->createQuestion('Что вы думаете по поводу нового API для опросов?', QuestionType::RADIO); $question1->createAnswerVariant('Ну такое...'); $question1->createAnswerVariant('Это что-то невероятное'); $question1->createAnswerVariant('Как это теперь развидеть?'); $question1->createAnswerVariant('Некоторое описание', AnswerVariantType::TEXT); $question2 = $newVoteSchema->createQuestion('Ещё один неоднозначный вопрос...', QuestionType::CHECKBOX); $question2->createAnswerVariant('Вариант 1'); $question2->createAnswerVariant('Вариант 2'); $question2->createAnswerVariant('Вариант 3'); $question2->createAnswerVariant('Вариант 4'); $result = $voteService->saveVote($newVoteSchema);
Пример добавления результата опроса:
use Base\Vote\Interfaces\VoteResultServiceInterface; use Base\Vote\Interfaces\QuestionInterface; use Base\Vote\VoteResult; /** * @var VoteServiceInterface $voteService **/ $voteService = new SomeImplementationVoteService(); /** * @var VoteServiceInterface $voteService **/ $voteResultService = new SomeImplementationVoteResultService(); $voteSchema = $voteService->getVoteSchemaById(1); $newVoteResult = new VoteResult($voteSchema); // Добавление ответа $newVoteResult->createAnswerResultByTitle( 'Планируете ли вы дополнительно обучаться профильной специальности?', 'да' ); // Добавление того же ответа другим методом $question = $voteSchema->getQuestionByTitle('Планируете ли вы дополнительно обучаться профильной специальности?'); $answerVariant = $question instanseof QuestionInterface ? $question->getAnswerVariantByTitle('да') : null; $newVoteResult->createAnswerResult($answerVariant); $result = $voteResultService->saveVoteResult($newVoteResult);