Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, db, LResources, mysql50conn, mysql51conn, sqldb, FileUtil,
- Forms, Controls, Graphics, Dialogs, StdCtrls, Unit2, Process, INIFiles;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Button1: TButton;
- ButtonAccept: TButton;
- Datasource1: TDatasource;
- Login: TEdit;
- Password: TEdit;
- conn: TMySQL51Connection;
- query: TSQLQuery;
- transaction: TSQLTransaction;
- procedure Button1Click(Sender: TObject);
- //procedure ButtonAcceptClick(Sender: TObject);
- private
- { private declarations }
- public
- { public declarations }
- end;
- var
- Form1: TForm1;
- balance:Integer;
- XCow: TProcess;
- s: String;
- MyLogin: Integer;
- implementation
- {$R *.lfm}
- { TForm1 }
- procedure CallCow();
- begin
- XCow := TProcess.Create(nil);
- XCow.CommandLine := 'xcowsay -t5 --at=1600,566 ' + s;
- XCow.Execute;
- XCow.Free;
- s:='';
- end;
- procedure ReadIni();
- begin
- filename:='/etc/blocker/settings.ini';
- IF(FileExists(filename))then
- begin
- IniF := TINIFile.Create(filename);
- srvName:=INiF.ReadString('connection','srvName','');
- dbName:=INiF.ReadString('connection','dbName','');
- userName:=INiF.ReadString('connection','userName','');
- pass:=INiF.ReadString('connection','pass','');
- adminName:=INiF.ReadString('admin','adminName','');
- adminPass:=INiF.ReadString('admin','adminPass','');
- End else ShowMessage('Файл настроек не найден...');
- end;
- procedure StartWorkWithDB();
- begin
- Form1.conn := TMySQL51Connection.Create(Nil);
- Form1.query := TSQLQuery.Create(nil);
- Form1.transaction := TSQLTransaction.Create(nil);
- Form1.conn.HostName:=srvName;
- Form1.conn.UserName:=userName;
- Form1.conn.Password:=pass;
- Form1.conn.DatabaseName:=dbName;
- Form1.conn.Connected:=true;
- Form1.conn.Transaction:=Form1.transaction;
- Form1.query.DataBase:=Form1.conn;
- end;
- procedure BDWorkUD();
- begin
- if (Form1.conn.Connected=False) then Form1.conn.Connected:=True;
- if (Form1.transaction.Active=False) then Form1.transaction.Active:=True;
- Form1.query.ExecSQL;
- end;
- procedure BDWork();
- begin
- Form1.conn.Open;
- Form1.query.Open;
- end;
- procedure EndWorkWithDB();
- begin
- Form1.query.Close;
- Form1.conn.Close;
- Form1.query.Free;
- Form1.transaction.Free;
- Form1.conn.Free;
- end;
- procedure EndWorkWithDBUD();
- begin
- Form1.query.Close;
- Form1.transaction.CommitRetaining;
- end;
- function UserExist:Boolean;
- var
- b: Boolean;
- begin
- b := False;
- try
- MyLogin := StrToInt(AnsiToUtf8(Form1.Login.Text));
- Except
- On E : EConvertError do
- begin
- s:='Вы что-то ввели неверно...';
- CallCow();
- Result := b;
- end;
- end;
- StartWorkWithDB();
- Form1.query.SQL.Text:='select case when exists (select id, pass from users where (id = :id) and pass like :password) then 1 else 0 end AS result;';
- Form1.query.ParamByName('id').AsInteger:= MyLogin;
- Form1.query.ParamByName('password').AsString:=Form1.Password.Text;
- BDWork();
- b := Form1.query.FieldByName('result').AsBoolean;
- EndWorkWithDB();
- Result := b;
- end;
- procedure TimeBalance();
- begin
- StartWorkWithDB();
- Form1.query.SQL.Text:='select time_balance from time_used where user_id = :id;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWorkUD();
- balance := Form1.query.FieldByName('balance').AsInteger;
- EndWorkWithDB();
- end;
- procedure BalanceMinus();
- begin
- balance:=balance - 1;
- StartWorkWithDB();
- Form1.query.SQL.Text:='UPDATE time_used SET time_balance = :balance WHERE user_id = :id;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- Form1.query.ParamByName('balance').AsInteger:=balance;
- BDWorkUD();
- Form1.query.ExecSQL;
- EndWorkWithDBUD();
- end;
- procedure UpdateUserBalance();
- begin
- StartWorkWithDB();
- Form1.query.SQL.Text:='UPDATE time_used SET time_balance = (SELECT norm FROM restrictions WHERE id = (SELECT age FROM user_age WHERE user_id = :id))WHERE user_id = :id;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWorkUD();
- Form1.query.ExecSQL;
- EndWorkWithDBUD();
- end;
- function IsBurthday:Boolean;
- var
- birthday: Boolean;
- begin
- birthday:=False;
- StartWorkWithDB();
- Form1.query.SQL.Text:='select (select date_format((current_date),''%m''))-(select date_format((select birthday from users where id = :id),''%m''))+(select date_format((current_date),''%d''))-(select date_format((select birthday from users where id = :id),''%d'')) as bday;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWork();
- birthday := Form1.query.FieldByName('bday').AsBoolean;
- EndWorkWithDB();
- Result := birthday;
- end;
- procedure AgeUp();
- begin
- StartWorkWithDB();
- Form1.query.SQL.Text:='UPDATE user_age SET age = ((select age where user_id = @id)+1) where user_id = :id;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWorkUD();
- Form1.query.ExecSQL;
- EndWorkWithDBUD();
- end;
- function IsBanned:Boolean;
- var
- tmpIntBan: Integer;
- begin
- StartWorkWithDB();
- Form1.query.SQL.Text:='select ban from users where id = :id;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWork();
- tmpIntBan := Form1.query.FieldByName('ban').AsInteger;
- EndWorkWithDB();
- if (tmpIntBan = 1) then Result := True
- else Result := False;
- end;
- function LastLoginNotToday:boolean;
- var
- tmpInt: Integer;
- begin
- StartWorkWithDB();
- Form1.query.SQL.Text:='select (select date_format((current_date),"%m"))-(select date_format((select time_start from time_used where user_id = :id),"%m"))+(select date_format((current_date),"%d"))-(select date_format((select time_start from time_used where user_id = :id),"%d")) as yn;';
- Form1.query.ParamByName('id').AsInteger:=MyLogin;
- BDWork();
- tmpInt:= Form1.query.FieldByName('yn').AsInteger;
- EndWorkWithDB();
- if (tmpInt > 0 ) then Result := True
- else
- Result := False;
- end;
- procedure iLogin();
- begin
- balance:=0;
- if (UserExist = True)
- then begin
- if (IsBanned = False)
- then begin
- s:='Привет!';
- CallCow();
- if (LastLoginNotToday = True)
- then
- begin
- //TODO Пофиксить багу с неизменением нормы, если человек
- //не пришёл в свой день рождения
- if (IsBurthday = True)
- then
- begin
- AgeUp();
- s:='С Днём Рождения!';
- CallCow();
- end;
- UpdateUserBalance();
- end;
- end
- //TODO Здесь нужно будет вызывать xcowsay и говорить, что забанен
- else
- s:='Простите, но мне сказали, что Вы нарушали правила!';
- CallCow();
- end
- //TODO Здесь нужно сказать, что нет такого пользователя
- else
- s:='Я не могу найти такого пользователя. Наверное, Вы ошиблись!';
- CallCow();
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- var
- a, b : string;
- begin
- ReadIni();
- a := Form1.Login.Text;
- b := Form1.Password.Text;
- if (((a) = (adminName)) and ((b) = (adminPass))) then
- begin
- s := 'Привет, Админ! Оставляю комп тебе и отключаюсь ;-)';
- CallCow();
- Form1.Close;
- end
- else
- iLogin();
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement