beta / bx.vote
简单的 Bitrix 投票包装器
1.1.1
2022-12-07 11:45 UTC
Requires
- php: >=7.2
- ext-json: *
- beta/base.vote: ^1.0
Requires (Dev)
README
安装
composer require beta/bx.vote
在此模块中实现了以下服务
- BitrixVoteService - 实现了 VoteServiceInterface 接口,用于处理投票方案(保存方案,按指定条件查询方案)。
- BitrixVoteResultService - 实现了 VoteResultServiceInterface 接口,用于处理投票结果(保存结果,按指定条件查询结果)。
- VoteService - 封装了上述两个服务。
按指定条件查询投票的示例
use Bx\Vote\VoteService; use Bx\Model\MappedCollection; use Base\Vote\Interfaces\VoteSchemaInterface; $voteService = new VoteService(); $voteSchemaCollection = $voteService->getVoteSchemasByCriteria( [ '=ID' => [1,2,3,4,5,6,7,10], '=ACTUAL_FOR' => 1, // фильтр для выборки опросов которые не были пройдены пользователем с идентификатором 1 '=IS_SINGLE' => 'Y', // фильтр для выборки опросов с одним вопросом ], 10, // лимит опросов в выборке 2 // выборка опросов от указанной позиции ); $voteSchemaCollection->first(); // вернет первый опрос из коллекции $voteSchemaCollection->column('id'); // список идентификаторов $voteSchemaCollection->unique('channel_id'); // список не повторяющихся значений (групп оросов) $voteSchemaCollection->column('title', 'id'); // массив ключом в котором выступает идентификатор опроса а значением название $voteSchemaCollection->findByKey('id', 5); // вернет опрос с идентификатором 5 $voteSchemaCollection->filterByKey('channel_id', 1); // вернет коллекцию опросов из группы с идентификатором 1 $voteSchemaCollection->find(function(VoteSchemaInterface $voteSchema) { return $voteSchema->getQuestionCount() === 3; }); // вернет первый найденный опрос с 3 вопросами $voteSchemaCollection->filter(function(VoteSchemaInterface $voteSchema) { return $voteSchema->getQuestionCount() === 3; }); // вернет коллекцию опросов с 3 вопросами foreach($voteSchemaCollection as $voteSchema) { /// Некоторый код для работы с каждым опросом } $voteSchemaMappedCollection = new MappedCollection($voteSchemaCollection, 'id'); // создаем коллекцию у которой в роли ключей выступают идентификаторы опросов $someVoteSchema = $voteSchemaMappedCollection[5]; // опрос с идентификатором 5
处理投票的示例
use Bx\Vote\VoteService; use Base\Vote\VoteSchema; $voteService = new VoteService(); $voteSchema = $voteService->getVoteSchemaById(1); // запрашиваем опрос по идентификатору $questionCollection = $voteSchema->getQuestions(); // коллекция опросов foreach($questionCollection as $question) { /// Некоторый код для работы с каждым вопросом } $firstQuestion = $questionCollection->first(); // первый вопрос из коллекции $answerVariantsCollection = $firstQuestion->getAnswerVariants(); // коллекция вариантов ответа foreach($answerVariantsCollection as $answerVariant) { /// Некоторый код для работы с каждым вариантом ответа } $firstAnswerVariant = $answerVariantsCollection->first(); // первый вариант ответа из коллекции $jsonSchema = json_encode($voteSchema); // JSON представление опроса $recoveredVoteSchema = new VoteSchema(json_decode($jsonSchema, true)); // собираем объект опроса из JSON представления
查询投票结果的示例
use Bx\Vote\VoteService; $voteService = new VoteService(); $voteSchema = $voteService->getVoteSchemaById(1); $voteResultCollection = $voteService->getVoteResultList( $voteSchema, [/** параметры для выборки **/] ); // коллекция результатов указанного опроса $firstVoteResult = $voteResultCollection->first(); // первый результат опроса из коллекции $answerResultCollection = $firstVoteResult->getAnswerResults(); // коллекция ответов на вопросы $firstAnswerResult = $answerResultCollection->first(); // первый ответ из коллекции $answerVariant = $firstAnswerResult->getAnswerVariant(); // выбранный вариант ответа на вопрос $question = $answerVariant->getQuestion(); // вопрос foreach($answerVariantsCollection as $answerVariant) { /// Некоторый код для работы с каждым вариантом ответа }
添加投票结果的示例
use Bx\Vote\VoteService; use Base\Vote\Interfaces\VoteResultServiceInterface; use Base\Vote\Interfaces\QuestionInterface; use Base\Vote\VoteResult; $voteService = new VoteService(); $voteSchema = $voteService->getVoteSchemaById(1); $newVoteResult = new VoteResult($voteSchema); // Добавление ответа $newVoteResult->createAnswerResultByTitle( 'Планируете ли вы дополнительно обучаться профильной специальности?', 'да' ); // Добавление того же ответа другим методом $question = $voteSchema->getQuestionByTitle('Планируете ли вы дополнительно обучаться профильной специальности?'); $answerVariant = $question instanseof QuestionInterface ? $question->getAnswerVariantByTitle('да') : null; $newVoteResult->createAnswerResult($answerVariant); $result = $voteService->saveVoteResult($newVoteResult);