Биллинговая система Nodeny
23 Ноября 2024, 00:36:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: nomake.pl  (Прочитано 6184 раз)
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« : 20 Апреля 2011, 22:56:51 »

Предлогаю такой патч:
Код:
--- nomake.pl.old	2011-04-20 23:39:38.000000000 +0300
+++ nomake.pl 2011-04-20 23:51:06.000000000 +0300
@@ -57,7 +57,9 @@
 $Config_out=$1;
 $Config_out="$Program_dir/$Config_out" if $Config_out!~/^\//;
 $Reload_com=$config_in=~s/<reload>(.+)<\/reload>\n?//igs? $1 : '';
-$Template_num=$config_in=~s/<template>(\d+)<\/template>\n?//igs? $1 : 1;
+$Template_num=$config_in=~s/<template>(\d+||no)<\/template>\n?//igs? $1 : 1;
+$Sql_query=$config_in=~s/<query>(.+)<\/query>\n?//igs?$1:'';
+$Fields=$config_in=~s/<fields>(.+)<\/fields>\n?//igs?$1:'';
 
 # разобъем файл-шаблон на блоки, к которым применяются фильтры
 ($no_filtr_block,@blocks)=split /<filtr/,$config_in;
@@ -151,7 +153,7 @@
 sub Form_Config
 {
  $When_Form_Config=&TimeNow()+$t_reload_users;
- $sql="$SQL_BUF id,ip,name,state,auth,AES_DECRYPT(passwd,'$Passwd_Key') FROM $c{Db_usr_table} $Where_grp ORDER BY id";
+ $sql=$Sql_query || "$SQL_BUF id,ip,name,state,auth,AES_DECRYPT(passwd,'$Passwd_Key') FROM $c{Db_usr_table} $Where_grp ORDER BY id";
  $sth=&sql($sql);
  $sth or return;
 
@@ -165,25 +167,33 @@
  {
     $ok++;
     %f=( 'id'=>$p->{id}, 'ip'=>$p->{ip}, 'state'=>$p->{state}, 'auth'=>$p->{auth} );
+ {
+ $Fields or next;
+ foreach (split ',',$Fields){
+ &Debug("Fields: $Fields");
+ exists $p->{$_} or next;
+ $f{$_} = $p->{$_};
+ }
+ }
     $ip_raw=pack('CCCC', split /\./,$f{ip});
     $f{login}=$p->{name};
     &Debug("=== id: $f{id} === $f{ip} === $f{login} ===");
     $f{pass}=$p->{"AES_DECRYPT(passwd,'$Passwd_Key')"};
     $f{lat_login}=&translit($f{login});
-
-    $sql="SELECT field_alias,field_value FROM dopdata ".
-         "WHERE parent_type=0 AND template_num=$Template_num AND parent_id=$f{id} AND revision=".
-         "(SELECT MAX(revision) FROM dopdata WHERE parent_type=0 AND template_num=$Template_num AND parent_id=$f{id})";
-    &Debug($sql);
-    $sth2=$dbh->prepare($sql);
-    if( $sth2->execute )
-    {
-       while( $h=$sth2->fetchrow_hashref )
-       {
-          $f{'dopdata-'.$h->{field_alias}}=$h->{field_value};
-          &Debug('DOPDATA: '.$h->{field_alias}.' = '.$h->{field_value});
-       }
-    }
+ {
+ $Template_num eq 'no' && last;
+ $sql="SELECT field_alias,field_value FROM dopdata ".
+ "WHERE parent_type=0 AND template_num=$Template_num AND parent_id=$f{id} AND revision=".
+ "(SELECT MAX(revision) FROM dopdata WHERE parent_type=0 AND template_num=$Template_num AND parent_id=$f{id})";
+ &Debug($sql);
+ $sth2=$dbh->prepare($sql);
+ if( $sth2->execute ){
+ while( $h=$sth2->fetchrow_hashref ){
+ $f{'dopdata-'.$h->{field_alias}}=$h->{field_value};
+ &Debug('DOPDATA: '.$h->{field_alias}.' = '.$h->{field_value});
+ }
+ }
+ }
 
     foreach $i (0..$#b)
     {
Суть патча:
1. Основной запрос к базе можно задать из конфига (<query>MAIN SQL QUERY</query>)
2. Поля, по которым можно вести сравнение тоже можно задать из конфига (<fields>f1,f2,f3,f4,...,fn</fields>)
3. В таком параметре как  <template> можно указать 'no', что скажет скрипту не делать выборку из доп данных (так мы можем выиграть в скорости)
Для чего? А все просто нужно было. скажу свое ИМХО: будет на много проще сформировать ПРАКТИЧЕСКИ любой конфиг, не обязательно основываясь на таблице с юзерами.
Записан
Андрій
NoDeny
Старожил
*

Карма: 3
Offline Offline

Сообщений: 294


Просмотр профиля
« Ответ #1 : 21 Апреля 2011, 17:47:35 »

напишіть приклад конфігу з цим namake.pl
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #2 : 21 Апреля 2011, 18:07:21 »

Код:
<file>/dev/null</file>
<template>no</template>
<query>select * from information_chema.tables</query>
<fields>TABLE_NAME</fields>

Tables which name begin with: "use"
<filtr TABLE_NAME='^use'><TABLE_NAME>
</filtr>
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #3 : 28 Апреля 2011, 20:01:51 »

Код:
<file>/dev/null</file>
<template>no</template>
<query>select * from information_chema.tables</query>
<fields>TABLE_NAME</fields>

Tables which name begin with: "use"
<filtr TABLE_NAME='^use'><TABLE_NAME>
</filtr>
0xbad0c0d3, зачет!!! Смеющийся Смеющийся
Записан
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
*

Карма: 116
Offline Offline

Сообщений: 1059



Просмотр профиля
« Ответ #4 : 01 Мая 2011, 22:08:10 »

0xbad0c0d3, зачет!!! Смеющийся Смеющийся
Я что-то недопонял. Это стеб или где?
Записан
Cell
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1407



Просмотр профиля
« Ответ #5 : 02 Мая 2011, 08:54:45 »

Какой нафиг стеб? мне пример понравился просто. + в репу
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!