소스 검색

Добавлено представление для просмотра списка отчётов

Вадим Королёв 1 년 전
부모
커밋
ba95a3502e
6개의 변경된 파일108개의 추가작업 그리고 1개의 파일을 삭제
  1. 26 0
      src/controllers/ApiController.php
  2. 17 0
      src/controllers/RegenController.php
  3. 4 0
      src/index.php
  4. 11 0
      src/models/ReportModel.php
  5. 1 1
      src/views/RegenArchiveView.php
  6. 49 0
      src/views/RegenReportsView.php

+ 26 - 0
src/controllers/ApiController.php

@@ -25,6 +25,21 @@ class ApiController extends Controller {
 		SubjectModel::deleteById($_GET['id']);
 	}
 
+	// Обновление отчёта
+	public function updateReport() {
+		$report = ReportModel::getById($_POST['id']);
+		$report['notice'] = $_POST['notice'];
+		$report['work_number'] = $_POST['work_number'];
+		$report['work_type'] = $_POST['work_type'];
+		ReportModel::update($report);
+		echo json_encode($report);
+	}
+
+	// Удаление отчёта
+	public function deleteReport() {
+		ReportModel::deleteById($_GET['id']);
+	}
+
 	// Получение всех преподавателей
 	public function getTeachers() {
 		$teachers = TeacherModel::all();
@@ -35,4 +50,15 @@ class ApiController extends Controller {
 		}
 		echo json_encode($output);
 	}
+
+	// Получение всех типов работ
+	public function getWorkTypes() {
+		$worktypes = WorkTypeModel::all();
+		$output = [];
+		while ($worktype = $worktypes->fetchArray(SQLITE3_ASSOC)) {
+			$worktype['repr'] = $worktype['name_nom'];
+			$output[] = $worktype;
+		}
+		echo json_encode($output);
+	}
 }

+ 17 - 0
src/controllers/RegenController.php

@@ -3,6 +3,23 @@
 
 class RegenController extends Controller {
 
+	// Список отчётов по дисциплине
+	public function listReports() {
+		$parts = explode("/", $this->request_uri);
+		$subject_id = end($parts);
+		
+		$reports = ReportModel::where("subject_id", $subject_id);
+		$subject = SubjectModel::getById($subject_id);
+
+		$view = new RegenReportsView([
+			"page_title" => "Regen: архив ".$subject['name'],
+			"crumbs" => ["Главная" => "/", "Regen: архив" => "/regen/archive", $subject['name'] => ""],
+			"reports" => $reports,
+			"subject" => $subject
+		]);
+		$view->view();
+	}
+
 	// Архив отчётов
 	public function archive() {
 		$subjects = SubjectModel::all();

+ 4 - 0
src/index.php

@@ -22,12 +22,16 @@ $router->register('/regen/new', ['RegenController', 'newReport']);
 $router->register('/regen/edit/\d+', ['RegenController', 'edit']);
 $router->register("/regen/gethtml", ['RegenController', 'getHtml']);
 $router->register("/regen/archive", ['RegenController', 'archive']);
+$router->register("/regen/archive/\d+", ['RegenController', 'listReports']);
 
 // API
 $router->register('/subjects/create', ['ApiController', 'createSubject']);
 $router->register('/subjects/update', ['ApiController', 'updateSubject']);
 $router->register('/subjects/delete', ['ApiController', 'deleteSubject']);
+$router->register('/reports/update', ['ApiController', 'updateReport']);
+$router->register('/reports/delete', ['ApiController', 'deleteReport']);
 $router->register('/teachers/read', ['ApiController', 'getTeachers']);
+$router->register('/work_types/read', ['ApiController', 'getWorkTypes']);
 
 $router->register404(['NotFoundController', 'index']);
 

+ 11 - 0
src/models/ReportModel.php

@@ -14,4 +14,15 @@ class ReportModel extends Model {
 		$stm->execute();
 		return $db->lastInsertRowID();
 	}
+
+	// Обновляет запись в таблице
+	public static function update($report) {
+		$db = Database::getConnection();
+		$stm = $db->prepare("UPDATE ".static::$table_name." SET notice=:notice,work_number=:work_number,work_type=:work_type WHERE id=:id");
+		$stm->bindValue(":id", $report['id']);
+		$stm->bindValue(":notice", $report['notice']);
+		$stm->bindValue(":work_number", $report['work_number']);
+		$stm->bindValue(":work_type", $report['work_type']);
+		$stm->execute();
+	}
 }

+ 1 - 1
src/views/RegenArchiveView.php

@@ -17,7 +17,7 @@ class RegenArchiveView extends LayoutView {
 			<div id='subject<?= $subject['id'] ?>' class='crud-item'>
 				<p><?= $subject['name'] ?></p>
 				<div class='crud-buttons'>
-					<button>Отчёты</button>
+					<button onclick='document.location.href = "/regen/archive/<?=$subject['id']?>"'>Отчёты</button>
 					<button onclick='crudUpdateShowWindow("subjects", {"Название": {type: "plain", name: "name", default: "<?=$subject['name']?>"}, "Шифр": {type: "plain", name: "code", default: "<?=$subject['code']?>"}, "Преподаватель": {type: "crudRead", name: "teacher_id", route: "teachers", default:<?=$subject['teacher_id']?>}, "ID": {type: "hidden", name: "id", default: <?=$subject['id']?>}}, "Обновление дисциплины", updateSubject)'>Изменить</button>
 					<button onclick='crudDelete("subjects", <?= $subject['id'] ?>, "subject<?= $subject['id'] ?>")' class='danger'>Удалить</button>
 				</div>

+ 49 - 0
src/views/RegenReportsView.php

@@ -0,0 +1,49 @@
+<?php
+// Архив Regen - список отчётов
+
+class RegenReportsView extends LayoutView {
+	protected $reports;
+	protected $subject;
+	
+	public function content():void { ?>
+
+<div class='text-center'>
+	<h1>Архив отчётов по дисциплине <?=$this->subject['name']?></h1>
+	<h3>Выбери отчёт</h3>
+</div>
+
+<div class='card'>
+	<div id='reportsList'>
+		<?php while ($report = $this->reports->fetchArray()) { ?>
+			<div id='report<?= $report['id'] ?>' class='crud-item'>
+				<p><?=$report['work_number']?><br><?=$report['notice']?><br>Создан: <?=$report['date_create']?></p>
+				<div class='crud-buttons'>
+					<button onclick='document.location.href = "/regen/edit/<?=$report['id']?>"'>Просмотр</button>
+					<button onclick='crudUpdateShowWindow("reports", {"Номер работы": {type: "plain", name: "work_number", default:"<?=$report['work_number']?>"}, "Примечание": {type: "plain", name: "notice", default:"<?=$report['notice']?>"}, "Тип работы": {type: "crudRead", name: "work_type", route: "work_types", default:<?=$report['work_type']?>}, "ID": {type: "hidden", name: "id", default: <?=$report['id']?>}}, "Обновление отчёта", updateReport)'>Изменить</button>
+					<button onclick='crudDelete("reports", <?= $report['id'] ?>, "report<?= $report['id'] ?>")' class='danger'>Удалить</button>
+				</div>
+			</div>
+		<?php } ?>
+	</div>
+</div>
+
+<script>
+	function updateReport(report) {
+		$("#report"+report.id).replaceWith(getReport(report));
+	}
+
+	function getReport(report) {
+		return `
+            <div id='report`+report.id+`' class='crud-item'>
+				<p>`+report.work_number+`<br>`+report.notice+`<br>Создан: `+report.date_create+`</p>
+				<div class='crud-buttons'>
+					<button onclick='document.location.href = "/regen/edit/`+report.id+`"'>Просмотр</button>
+					<button onclick='crudUpdateShowWindow("reports", {"Номер работы": {type: "plain", name: "work_number", default:"`+report.work_number+`"}, "Примечание": {type: "plain", name: "notice", default:"`+report.notice+`"}, "Тип работы": {type: "crudRead", name: "work_type", route: "work_types", default:`+report.work_type+`}, "ID": {type: "hidden", name: "id", default: `+report.id+`}}, "Обновление отчёта", updateReport)'>Изменить</button>
+					<button onclick='crudDelete("reports", `+report.id+`, "report`+report.id+`")' class='danger'>Удалить</button>
+				</div>
+			</div>`;
+	}
+</script>
+
+<?php }
+}