portal.mkgtu.ru/common/modules/student/components/graduateWork/GraduateWorkLoader.php

174 lines
5.4 KiB
PHP
Raw Permalink Normal View History

2024-03-28 09:51:45 +03:00
<?php
namespace common\modules\student\components\graduateWork;
use common\models\User;
use common\modules\student\components\graduateWork\models\Theme;
use common\modules\student\models\RecordBook;
use common\modules\student\models\ReferenceType;
use Yii;
use yii\base\Component;
class GraduateWorkLoader extends Component implements \common\modules\student\interfaces\DynamicComponentInterface, \common\modules\student\interfaces\RoutableComponentInterface
{
public $login;
public $password;
protected $client;
public $componentName = "Информация о темах курсовых и дипломных работ";
public $baseRoute = 'student/graduateWork';
public $guid;
public function getComponentName()
{
return $this->componentName;
}
public function getBaseRoute()
{
return $this->baseRoute;
}
public function isAllowedToRole($role)
{
switch ($role) {
case (User::ROLE_STUDENT):
return true;
default:
return false;
}
}
public static function getConfig()
{
return [
'class' => \common\modules\student\components\graduateWork\GraduateWorkLoader::class,
'login' => getenv("STUDENT_LOGIN"),
'password' => getenv("STUDENT_PASSWORD"),
];
}
public static function getController()
{
return __NAMESPACE__ . '\\controllers\\GraduateworkController';
}
public static function getUrlRules()
{
return [
'student/graduateWork' => 'graduatework/index',
];
}
public function setParams($guid)
{
if ($this->checkParams($guid)) {
$this->guid = $guid;
return true;
} else {
return false;
}
}
public function checkParams($guid)
{
return true;
}
public function loadRecordBooks()
{
if ($this->checkParams($this->guid)) {
if (isset(Yii::$app->user->identity) && Yii::$app->user->identity->isInRole(\common\models\User::ROLE_STUDENT)) {
$recordbooks = Yii::$app->getPortfolioService->loadRawRecordbooks(Yii::$app->user->identity->userRef->reference_id);
return $this->BuildRecordBooksFromXML($recordbooks);
}
}
return null;
}
public function loadCourseGraduateWorks($record_book_id)
{
if ($this->checkParams($this->guid) && $record_book_id != null) {
$formattedData = [];
$response = Yii::$app->soapClientStudent->load(
"GetCourseGraduateWorks",
[
'UserId' => $this->guid,
'RecordbookId' => $record_book_id,
]
);
if ($response === false) {
return null;
}
$formattedData = $this->BuildCourseGraduateWorksFromXML($response->return);
return $formattedData;
} else {
return null;
}
}
public static function BuildRecordBooksFromXML($data)
{
$plans = [];
$xml_plans = $data;
if (is_array($xml_plans)) {
foreach ($xml_plans as $xml_plan) {
$plan = new RecordBook();
$plan->id = $xml_plan->RecordbookId;
$plan->curriculumId = $xml_plan->CurriculumId;
if (strpos($plan->name, 'Зачетная книжка №') === false) {
$plan->name = "Зачетная книжка №{$xml_plan->RecordbookName}. {$xml_plan->CurriculumName}";
}
$plans[] = $plan;
}
} else {
$xml_plan = $xml_plans;
$plan = new RecordBook();
$plan->id = $xml_plan->RecordbookId;
$plan->curriculumId = $xml_plan->CurriculumId;
if (strpos($plan->name, 'Зачетная книжка №') === false) {
$plan->name = "Зачетная книжка №{$xml_plan->RecordbookName}. {$xml_plan->CurriculumName}";
}
$plans[] = $plan;
}
return $plans;
}
protected function BuildCourseGraduateWorksFromXML($data)
{
if (!isset($data->ThemeRecord)) {
return [];
}
$theme_records = [];
$xml_course_graduate_works = is_array($data->ThemeRecord) ? $data->ThemeRecord : $data;
foreach ($xml_course_graduate_works as $xml_course_graduate_work) {
$theme_record = new Theme();
$theme_record->subjectRef = ReferenceType::BuildRefFromXML($xml_course_graduate_work->Subject);
$theme_record->termRef = ReferenceType::BuildRefFromXML($xml_course_graduate_work->Term);
$theme_record->theme = $xml_course_graduate_work->Theme;
$theme_record->typeOfTheControlRef = ReferenceType::BuildRefFromXML($xml_course_graduate_work->TypeOfTheControl);
$theme_record->teacherRef = ReferenceType::BuildRefFromXML($xml_course_graduate_work->Teacher);
$theme_record->orderDate = $xml_course_graduate_work->OrderDate;
$theme_record->orderNumber = $xml_course_graduate_work->OrderNumber;
$theme_record->startDate = $xml_course_graduate_work->StartDate;
$theme_record->orderRef = ReferenceType::BuildRefFromXML($xml_course_graduate_work->OrderRef);
$theme_records[] = $theme_record;
}
return $theme_records;
}
}