beta/base.vote

简单的Bitrix投票包装器

1.0.3 2022-11-14 18:22 UTC

This package is auto-updated.

Last update: 2024-09-14 22:31:39 UTC


README

安装

composer require beta/base.vote

此包提供描述调查/投票的功能,作为Bitrix CMS投票模块的包装器进行开发。不是完整实现,缺少服务实现

  • VoteServiceInterface - 用于处理调查方案(保存方案,按给定标准查询方案)
  • VoteResultServiceInterface - 用于处理调查结果(保存结果,按给定标准查询结果)

用于处理调查的以下接口

  1. VoteSchemaInterface - 调查方案接口,包含:名称和描述。同时提供通过getProp(string $key)和setProp(string $key, $value)方法操作任意属性的机会。提供对问题的访问。
  2. QuestionInterface - 问题接口。包含:问题文本,是否必答标志,问题类型(任意整数,可能根据实现而变化)。提供对答案选项的访问,答案选项对任何问题都是必需的,即使是那些要求自由形式回答的问题。提供通过getProp(string $key)和setProp(string $key, $value)方法操作任意属性的机会。
  3. AnswerVariantInterface - 答案选项接口,包含:答案文本和答案选项类型(任意整数,可能根据实现而变化)。提供通过getProp(string $key)和setProp(string $key, $value)方法操作任意属性的机会。

用于处理调查结果的接口

  1. VoteResultInterface - 调查结果接口,提供对问题答案的访问。同时提供通过getProp(string $key)和setProp(string $key, $value)方法操作任意属性的机会。
  2. 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);