From c809da4f21f248e43cd8c6fe24adf7c2b5cd728f Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Sun, 19 Feb 2023 00:00:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B9=D1=82=D0=B8=D0=BD=D0=B3=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D0=BA=D0=BD=D0=B5=20TeacherControlPlugin.cs=20?= =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D1=80=D0=B0=D1=81=D1=8B=D0=B2=D0=B0=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=8C=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=20=D0=B4=D0=B5=D0=B1?= =?UTF-8?q?=D0=B0=D0=B3=D0=B3=D0=B8=D0=BD=D0=B3=D0=B5=20=D0=9C=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=A0=D0=BE=D0=B1=D0=BE=D1=82=D0=B0=20-=20=D0=BA=D0=BB=D0=B5?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20?= =?UTF-8?q?=D1=8F=D1=87=D0=B5=D0=B9=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CodeCompletion/DomSyntaxTreeVisitor.cs | 2 +- CodeCompletion/SymTable.cs | 2 +- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- Release/pabcversion.txt | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- TestSuite/CompilationSamples/Robot.pas | 16 ++++-- VisualPascalABCNET/AboutBox.Designer.cs | 4 +- .../DockContent/CompilerConsoleWindowForm.cs | 9 ++- .../CompilerControllerPlugin.cs | 2 + .../LoginForm.Designer.cs | 34 ++++++++---- .../TraningControlPlugin/LoginForm.cs | 9 +++ .../TraningControlPlugin/SiteAccessInfo.cs | 55 +++++++++++++++++++ .../TeacherControlPlugin.cs | 2 + bin/Lib/Robot.pas | 16 ++++-- 15 files changed, 130 insertions(+), 31 deletions(-) diff --git a/CodeCompletion/DomSyntaxTreeVisitor.cs b/CodeCompletion/DomSyntaxTreeVisitor.cs index b8a4d305e..64d2d506c 100644 --- a/CodeCompletion/DomSyntaxTreeVisitor.cs +++ b/CodeCompletion/DomSyntaxTreeVisitor.cs @@ -2706,7 +2706,7 @@ namespace CodeCompletion private void add_system_unit() { - string unit_file_name = this.converter.controller.Parser.LanguageInformation.SystemUnitName; + string unit_file_name = this.converter.controller.Parser?.LanguageInformation.SystemUnitName; if (unit_file_name == null) return; string unit_name = CodeCompletionNameHelper.FindSourceFileName(unit_file_name); if (unit_name != null) diff --git a/CodeCompletion/SymTable.cs b/CodeCompletion/SymTable.cs index 597a7d3b0..dfc97afdf 100644 --- a/CodeCompletion/SymTable.cs +++ b/CodeCompletion/SymTable.cs @@ -1291,7 +1291,7 @@ namespace CodeCompletion public override string ToString() { - return CodeCompletionController.CurrentParser.LanguageInformation.GetSimpleDescription(this); + return CodeCompletionController.CurrentParser?.LanguageInformation.GetSimpleDescription(this); } } diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index de17c2fec..13b799e7f 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "8"; public const string Build = "3"; - public const string Revision = "3244"; + public const string Revision = "3247"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 71bdc9cbc..55da1eb11 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=3244 %MINOR%=8 +%REVISION%=3247 +%COREVERSION%=3 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 6c06c3741..7e37cf865 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.8.3.3244 +3.8.3.3247 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index af6119332..0258213b6 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.8.3.3244' +!define VERSION '3.8.3.3247' diff --git a/TestSuite/CompilationSamples/Robot.pas b/TestSuite/CompilationSamples/Robot.pas index b88e758ec..9184a2ef8 100644 --- a/TestSuite/CompilationSamples/Robot.pas +++ b/TestSuite/CompilationSamples/Robot.pas @@ -17,7 +17,7 @@ procedure Left; procedure Up; /// Переместить Робота вниз procedure Down; -/// Закрасить текущую ячейку +/// Закрасить текущую клетку procedure Paint; /// Возвращает True, если справа от Робота - свободно, и False в противном случае function FreeFromRight: boolean; @@ -35,9 +35,9 @@ function WallFromLeft: boolean; function WallFromUp: boolean; /// Возвращает True, если снизу от Робота - стена, и False в противном случае function WallFromDown: boolean; -/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае function CellIsFree: boolean; -/// Возвращает True, если текущая ячейка закрашена, и False в противном случае +/// Возвращает True, если текущая клетка закрашена, и False в противном случае function CellIsPainted: boolean; /// Вызывать задание с именем name procedure Task(name: string); @@ -79,10 +79,14 @@ function СлеваСтена: boolean; function СверхуСтена: boolean; /// Возвращает True, если снизу от Робота - стена, и False в противном случае function СнизуСтена: boolean; -/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае function ЯчейкаНеЗакрашена: boolean; -/// Возвращает True, если текущая ячейка закрашена, и False в противном случае +/// Возвращает True, если текущая клетка закрашена, и False в противном случае function ЯчейкаЗакрашена: boolean; +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае +function КлеткаНеЗакрашена: boolean; +/// Возвращает True, если текущая клетка закрашена, и False в противном случае +function КлеткаЗакрашена: boolean; /// Вызывать задание с данным именем procedure Задание(имя: string); /// Создать пустое поле размера 9 на 11 клеток @@ -250,6 +254,8 @@ function СверхуСтена := WallFromUp; function СнизуСтена := WallFromDown; function ЯчейкаНеЗакрашена := CellIsFree; function ЯчейкаЗакрашена := CellIsPainted; +function КлеткаНеЗакрашена := CellIsFree; +function КлеткаЗакрашена := CellIsPainted; procedure Задание(имя: string) := Task(имя); procedure СтандартноеПоле := StandardField; procedure Поле(n,m: integer) := Field(n,m); diff --git a/VisualPascalABCNET/AboutBox.Designer.cs b/VisualPascalABCNET/AboutBox.Designer.cs index 040b9e09e..d99fdc448 100644 --- a/VisualPascalABCNET/AboutBox.Designer.cs +++ b/VisualPascalABCNET/AboutBox.Designer.cs @@ -167,9 +167,9 @@ this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this.label12.Location = new System.Drawing.Point(3, 0); this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(317, 13); + this.label12.Size = new System.Drawing.Size(311, 13); this.label12.TabIndex = 17; - this.label12.Text = "Copyright (c) 2005, 2023 Ivan Bondarev, Stanislav Mikhalkovich"; + this.label12.Text = "Copyright (c) 2005, 2023 Ivan Bondarev, Stanislav Mikhalkovich"; // // label9 // diff --git a/VisualPascalABCNET/DockContent/CompilerConsoleWindowForm.cs b/VisualPascalABCNET/DockContent/CompilerConsoleWindowForm.cs index 28cc17c04..1bd2a8cc2 100644 --- a/VisualPascalABCNET/DockContent/CompilerConsoleWindowForm.cs +++ b/VisualPascalABCNET/DockContent/CompilerConsoleWindowForm.cs @@ -25,7 +25,14 @@ namespace VisualPascalABC } public void AppendTextToConsoleCompiler(object text) { - CompilerConsole.AppendText(text as string); + try + { + CompilerConsole.AppendText(text as string); // SSM !!!!!!!!!!!!!!! 18/02/23 + } + catch (Exception e) + { + + } } public void AddTextToCompilerMessages(string text) diff --git a/VisualPlugins/CompilerController/CompilerControllerPlugin.cs b/VisualPlugins/CompilerController/CompilerControllerPlugin.cs index 1cc4cc92c..5a530df92 100644 --- a/VisualPlugins/CompilerController/CompilerControllerPlugin.cs +++ b/VisualPlugins/CompilerController/CompilerControllerPlugin.cs @@ -103,6 +103,8 @@ namespace VisualPascalABCPlugins key = key.OpenSubKey("Microsoft"); key = key.OpenSubKey("VisualStudio"); key = key.OpenSubKey("8.0"); + if (key == null) + return null; string s = (string)key.GetValue("InstallDir"); key.Close(); s = System.IO.Path.GetDirectoryName(s); diff --git a/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs b/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs index 58b1fde1b..02867cdfd 100644 --- a/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs +++ b/VisualPlugins/TraningControlPlugin/LoginForm.Designer.cs @@ -43,8 +43,9 @@ this.PluginImageAuthorized = new System.Windows.Forms.PictureBox(); this.panelUnAuthorized = new System.Windows.Forms.Panel(); this.panelAuthorized = new System.Windows.Forms.Panel(); - this.labelUserName = new System.Windows.Forms.Label(); this.labelRating = new System.Windows.Forms.Label(); + this.labelUserName = new System.Windows.Forms.Label(); + this.labelDetails = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.userImage)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.groupImage)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.PluginImage)).BeginInit(); @@ -188,29 +189,39 @@ // panelAuthorized // this.panelAuthorized.Controls.Add(this.labelRating); + this.panelAuthorized.Controls.Add(this.labelDetails); this.panelAuthorized.Controls.Add(this.labelUserName); this.panelAuthorized.Location = new System.Drawing.Point(0, 0); this.panelAuthorized.Name = "panelAuthorized"; this.panelAuthorized.Size = new System.Drawing.Size(422, 132); this.panelAuthorized.TabIndex = 14; // + // labelRating + // + this.labelRating.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelRating.Location = new System.Drawing.Point(12, 50); + this.labelRating.Name = "labelRating"; + this.labelRating.Size = new System.Drawing.Size(398, 26); + this.labelRating.TabIndex = 12; + this.labelRating.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // // labelUserName // - this.labelUserName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.labelUserName.Location = new System.Drawing.Point(25, 14); + this.labelUserName.Font = new System.Drawing.Font("Microsoft Sans Serif", 13F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelUserName.Location = new System.Drawing.Point(0, 14); this.labelUserName.Name = "labelUserName"; - this.labelUserName.Size = new System.Drawing.Size(372, 26); + this.labelUserName.Size = new System.Drawing.Size(419, 26); this.labelUserName.TabIndex = 11; this.labelUserName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // labelRating + // labelDetails // - this.labelRating.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); - this.labelRating.Location = new System.Drawing.Point(25, 53); - this.labelRating.Name = "labelRating"; - this.labelRating.Size = new System.Drawing.Size(372, 26); - this.labelRating.TabIndex = 12; - this.labelRating.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.labelDetails.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); + this.labelDetails.Location = new System.Drawing.Point(12, 86); + this.labelDetails.Name = "labelDetails"; + this.labelDetails.Size = new System.Drawing.Size(398, 26); + this.labelDetails.TabIndex = 13; + this.labelDetails.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // LoginForm // @@ -259,5 +270,6 @@ private System.Windows.Forms.Label labelUserName; private System.Windows.Forms.Panel panelAuthorized; private System.Windows.Forms.Label labelRating; + private System.Windows.Forms.Label labelDetails; } } \ No newline at end of file diff --git a/VisualPlugins/TraningControlPlugin/LoginForm.cs b/VisualPlugins/TraningControlPlugin/LoginForm.cs index acc838374..d0872f3b5 100644 --- a/VisualPlugins/TraningControlPlugin/LoginForm.cs +++ b/VisualPlugins/TraningControlPlugin/LoginForm.cs @@ -238,6 +238,12 @@ namespace DBAccessPluginNamespace } } + public void SetRating(string rating) + { + var ss = rating.Split('|'); + labelRating.Text = $"Рейтинг: {ss[0]} баллов"; + labelDetails.Text = ss[1]; + } public void ChangeControlsAfterLogin(string login) { try @@ -308,6 +314,9 @@ namespace DBAccessPluginNamespace { WriteLoginPassToAuthDat(usersNamesBox.Text, passwordBox.Text); ChangeControlsAfterLogin(usersNamesBox.Text); + var Rating = await SiteProvider.GetRating("", usersNamesBox.Text, passwordBox.Text); + SetRating(Rating); + //labelRating.Text = "Рейтинг: " + Rating.ToString(); } else MessageBox.Show(answer, "Ошибка"); } diff --git a/VisualPlugins/TraningControlPlugin/SiteAccessInfo.cs b/VisualPlugins/TraningControlPlugin/SiteAccessInfo.cs index 5a2da6592..e36be26ca 100644 --- a/VisualPlugins/TraningControlPlugin/SiteAccessInfo.cs +++ b/VisualPlugins/TraningControlPlugin/SiteAccessInfo.cs @@ -213,6 +213,61 @@ namespace DBAccessPluginNamespace return "Success"; } + async public Task GetRating(string shortFIO, string fullFIO, string password) + { + var values = new Dictionary + { + //`id`, `pupilId`, `taskName`, `lessonName`, `type`, `content`, `time`, `IP` + //{ "shortFIO", ShortFIO }, // shortFIO или FIO, и они должны совпадать с такими же в базе + { "FIO", FullFIO }, + //{ "password", Password} + }; + // Отправка запроса на сервер + var content = new FormUrlEncodedContent(values); + var response = await client.PostAsync(ServAddr + "/getRating.php", content); + string responseText = await response.Content.ReadAsStringAsync(); + var pieces = responseText.Split(';'); + + var res = ""; + var ClassTasksSolved = 0; + var ControlTasksSolved = 0; + var HomeworkTasksSolved = 0; + var AdditionalTasksSolved = 0; + try + { + foreach (var s in pieces) + { + if (s.IndexOf(':') < 1) continue; + var pair = s.Split(':'); + switch (pair[0]) + { + case "ClassTasks": + ClassTasksSolved = int.Parse(pair[2]); + break; + case "ControlTasks": + ControlTasksSolved = int.Parse(pair[2]); + break; + case "HomeworkTasks": + HomeworkTasksSolved = int.Parse(pair[2]); + break; + case "AdditionalTasks": + AdditionalTasksSolved = int.Parse(pair[2]); + break; + } + } + // великая формула !!! + var Rating = ClassTasksSolved * 1 + ControlTasksSolved * 5 + HomeworkTasksSolved * 3 + AdditionalTasksSolved * 2; + var Details = $" (Осн: {ClassTasksSolved}×1, Доп: {AdditionalTasksSolved}×2, ДЗ: {HomeworkTasksSolved}×3, КР: {ControlTasksSolved}×5)"; + res = Rating.ToString() + '|' + Details; + } + catch (Exception e) + { + res = e.Message; + } + + return res; + } + // Так как мы на сервере пока ничего не запоминаем, то процесс выхода - просто стереть всё public void Logout() { diff --git a/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs b/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs index 6d500460b..880fdfb53 100644 --- a/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs +++ b/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs @@ -97,6 +97,8 @@ namespace VisualPascalABCPlugins if (answer.Result == "Success") { loginForm.ChangeControlsAfterLogin(login); + var Rating = User.GetRating("", login, pass); + loginForm.SetRating(Rating.Result); } } catch (Exception e) diff --git a/bin/Lib/Robot.pas b/bin/Lib/Robot.pas index b88e758ec..9184a2ef8 100644 --- a/bin/Lib/Robot.pas +++ b/bin/Lib/Robot.pas @@ -17,7 +17,7 @@ procedure Left; procedure Up; /// Переместить Робота вниз procedure Down; -/// Закрасить текущую ячейку +/// Закрасить текущую клетку procedure Paint; /// Возвращает True, если справа от Робота - свободно, и False в противном случае function FreeFromRight: boolean; @@ -35,9 +35,9 @@ function WallFromLeft: boolean; function WallFromUp: boolean; /// Возвращает True, если снизу от Робота - стена, и False в противном случае function WallFromDown: boolean; -/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае function CellIsFree: boolean; -/// Возвращает True, если текущая ячейка закрашена, и False в противном случае +/// Возвращает True, если текущая клетка закрашена, и False в противном случае function CellIsPainted: boolean; /// Вызывать задание с именем name procedure Task(name: string); @@ -79,10 +79,14 @@ function СлеваСтена: boolean; function СверхуСтена: boolean; /// Возвращает True, если снизу от Робота - стена, и False в противном случае function СнизуСтена: boolean; -/// Возвращает True, если текущая ячейка не закрашена, и False в противном случае +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае function ЯчейкаНеЗакрашена: boolean; -/// Возвращает True, если текущая ячейка закрашена, и False в противном случае +/// Возвращает True, если текущая клетка закрашена, и False в противном случае function ЯчейкаЗакрашена: boolean; +/// Возвращает True, если текущая клетка не закрашена, и False в противном случае +function КлеткаНеЗакрашена: boolean; +/// Возвращает True, если текущая клетка закрашена, и False в противном случае +function КлеткаЗакрашена: boolean; /// Вызывать задание с данным именем procedure Задание(имя: string); /// Создать пустое поле размера 9 на 11 клеток @@ -250,6 +254,8 @@ function СверхуСтена := WallFromUp; function СнизуСтена := WallFromDown; function ЯчейкаНеЗакрашена := CellIsFree; function ЯчейкаЗакрашена := CellIsPainted; +function КлеткаНеЗакрашена := CellIsFree; +function КлеткаЗакрашена := CellIsPainted; procedure Задание(имя: string) := Task(имя); procedure СтандартноеПоле := StandardField; procedure Поле(n,m: integer) := Field(n,m);