Changeset 219


Ignore:
Timestamp:
May 27, 2009, 1:17:11 PM (15 years ago)
Author:
george
Message:
  • Přidáno: Podpora pro odesílání emailů o měsíčních platbách přes frontu emailů.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/database.php

    r187 r219  
    44// Date: 2009-02-16
    55
     6
    67class Database extends mysqli
    78{
    89  var $Prefix = '';
     10  var $Functions = array('NOW()', 'CURDATE()', 'CURTIME()', 'UUID()');
    911 
    1012  function query($Query)
    1113  {
    12         global $Config;
     14          global $Config;
    1315       
    14         if($Config['Web']['ShowSQLQuery'] == true)
    15           echo('<div style="border-bottom-width: 1px; border-bottom-style: solid; padding-bottom: 3px; padding-top: 3px; font-size: 12px; font-family: Arial;">'.$Query.'</div>');
    16         $Result = parent::query($Query);
     16          if($Config['Web']['ShowSQLQuery'] == true)
     17            echo('<div style="border-bottom-width: 1px; border-bottom-style: solid; padding-bottom: 3px; padding-top: 3px; font-size: 12px; font-family: Arial;">'.$Query.'</div>');
     18          $Result = parent::query($Query);
    1719    if(($this->error != '') and ($Config['Web']['ShowSQLError'] == true))
    1820          echo('<div><strong>SQL Error: </strong>'.$this->error.'<br />'.$Query.'</div>');
     
    3941      $Value = strtr($Value, '"', '\"');
    4042      $Name .= ',`'.$Key.'`';
    41             if($Value == 'NOW()') $Values .= ",".$Value;
    42 else if($Value == 'UUID()') $Values .= ",".$Value;
    43               else $Values .= ",'".$Value."'";
     43            if(!in_array($Value, $this->Functions)) $Value = '"'.$Value.'"';
     44      $Values .= ','.$Value;
    4445    }
    4546    $Name = substr($Name, 1);
     
    5455    {
    5556            $Value = strtr($Value, '"', '\"');
    56       if($Value != 'NOW()') $Value = "'".$Value."'";
     57            if(!in_array($Value, $this->Functions)) $Value = '"'.$Value.'"';
    5758      $Values .= ', '.$Key.'='.$Value;
    5859    }
     
    6869    {
    6970      $Value = strtr($Value, '"', '\"');
     71            if(!in_array($Value, $this->Functions)) $Value = '"'.$Value.'"';
    7072      $Name .= ',`'.$Key.'`';
    71       if($Value == 'NOW()') $Values .= ','.$Value;
    72         else $Values .= ',"'.$Value.'"';
     73      $Values .= ','.$Value;
    7374    }
    7475    $Name = substr($Name, 1);
  • trunk/error.php

    r212 r219  
    55  global $Config;
    66 
    7   $Date = date("Y-m-d H:i:s");          // časové razítko položky
     7  $Date = date('Y-m-d H:i:s');          // časové razítko položky
    88  $ErrorType = array
    99  (
     
    2929    $Backtrace[0]['args'] = '';
    3030    //$First = array_shift($Backtrace);
    31     print_r($First);
     31    //print_r($First);
    3232   
    3333    //array_unshift($Backtrace, $First);
  • trunk/finance/manage.php

    r207 r219  
    517517      // Generuj účetní položky
    518518      $DbResult = $this->Database->query('SELECT Member.*, MemberPayment.MonthlyTotal, UNIX_TIMESTAMP(Member.BillingPeriodLastDate), Subject.Name AS SubjectName FROM MemberPayment JOIN Member ON Member.Id=MemberPayment.Member JOIN Subject ON Subject.Id=Member.Subject');
    519       while($Member = $DbResult->fetch_array())
     519      while($Member = $DbResult->fetch_assoc())
    520520      {
    521521        $Output .= $Member['SubjectName'].': ';
    522                                 $Period = $this->GetBillingPeriod($Member['BillingPeriodNext']);
     522                                //$Member['UNIX_TIMESTAMP(Member.BillingPeriodLastDate)'] = MysqlDateTimeToTime('2009-04-01 1:1:1');
     523        $Period = $this->GetBillingPeriod($Member['BillingPeriodNext']);
    523524                                if($Period['From'] > $Member['UNIX_TIMESTAMP(Member.BillingPeriodLastDate)'])
    524525                                {
    525526                                        $this->Database->update('Member', 'Id='.$Member['Id'], array('BillingPeriod' => $Member['BillingPeriodNext'], 'InternetTariffCurrentMonth' => $Member['InternetTariffNextMonth']));
    526527                                        $Member['BillingPeriod'] = $Member['BillingPeriodNext'];
     528          $Member['InternetTariffCurrentMonth'] = $Member['InternetTariffNextMonth'];
    527529                                }
    528530                                $Period = $this->GetBillingPeriod($Member['BillingPeriod']);
     
    536538          $BillId = $this->System->Modules['Bill']->CreateBill($Member['Subject'], array(array('Description' => 'Připojení k síti', 'Price' => $PayPerPeriod, 'Quantity' => 1)), $Period['From'], $Period['To'], $BillCode);
    537539          $this->Database->insert('FinanceClaimsLiabilities', array('Value' => $PayPerPeriod, 'Subject' => $Member['Subject'], 'TimeCreation' => 'NOW()', 'Text' => 'Připojení k síti za období '.$TimePeriodText, 'Bill' => $BillId, 'BillCode' => $BillCode));
     540          $Output .= $this->SendPaymentEmail($Member['Id']);
    538541                                        $this->Database->update('Member', 'Id='.$Member['Id'], array('BillingPeriodLastDate' => TimeToMysqlDateTime($Period['To'])));
    539542        } else $Output .= '<br />';
     
    565568
    566569      // Restart traffic shaping
    567       //$this->Database->update('NetworkConfiguration', 'Id = 3', array('Changed' => 1));
    568     }
    569     return($Output);
     570      //$this->Database->update('NetworkConfiguration', 'Id = 3', array('Changed' => 1));     
     571    }
     572    return($Output);
     573  }
     574 
     575  function SendPaymentEmail($MemberId)
     576  {
     577    global $Config;
     578   
     579    $DbResult = $this->Database->select('Member', '*', 'Id='.$MemberId);
     580    $Member = $DbResult->fetch_assoc();
     581
     582    $DbResult = $this->Database->select('MemberPayment', '*', 'Member='.$MemberId);
     583    $MemberPayment = $DbResult->fetch_assoc();   
     584
     585    $DbResult = $this->Database->select('Subject', 'Name', 'Id='.$Member['Subject']);
     586    $Subject = $DbResult->fetch_assoc();     
     587   
     588    $DbResult = $this->Database->select('User', '*', 'Id='.$Member['ResponsibleUser']);   
     589    $User = $DbResult->fetch_assoc();
     590       
     591    if($User['Email'] != '')
     592    {
     593      $Title = 'Pravidelné vyúčtování internetu';
     594      $Content = 'Vyúčtovaní subjektu <strong>'.$Subject['Name'].'</strong> zastoupeného uživatelem <strong>'.$User['Name'].'</strong>.<br /><br />'.
     595        'Váš aktuální tarif: <strong>'.$this->System->Modules['Finance']->Tariffs[$Member['InternetTariffCurrentMonth']]['Name'].'</strong><br />'.
     596        'Vaše platební období: <strong>'.$this->System->Modules['Finance']->BillingPeriods[$Member['BillingPeriod']]['Name'].'</strong><br />'.
     597        'Pravidelná platba za období: <strong>'.$MemberPayment['MonthlyTotal'].' Kč</strong><br />'.
     598        'Stav vašeho účtu: <strong>'.$MemberPayment['Cash'].' Kč</strong><br /><br />';
     599      $Content .= 'Nové finanční operace:<br/>'.
     600        '<table border="1"><tr><th>Čas</th><th>Popis</th><th>Částka [Kč]</th></tr>';
     601      //$Member['BillingPeriodLastDate'] = '2009-04-01';
     602      $DbResult = $this->Database->query('SELECT T1.* FROM ((SELECT Text, Time, Value AS Value, Bill FROM FinanceOperation WHERE (Subject='.$Member['Subject'].')) UNION ALL '.
     603      '(SELECT Text, TimeCreation as Time, -Value as Value, Bill FROM FinanceClaimsLiabilities WHERE (Subject='.$Member['Subject'].')) ORDER BY Time DESC) AS T1 WHERE (T1.Time > "'.$Member['BillingPeriodLastDate'].'")');
     604      while($DbRow = $DbResult->fetch_assoc())
     605      {
     606        $Content .= '<tr><td>'.HumanDate($DbRow['Time']).'</td><td>'.$DbRow['Text'].'</td><td>'.$DbRow['Value'].'</td></tr>';
     607      }
     608      $Content .= '</table>'.
     609      'Pro více informací a možnost změny údajů se prosím přihlašte na stránkách <a href="http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'">http://'.$Config['Web']['Host'].$Config['Web']['RootFolder'].'</a>.<br /><br />';
     610       
     611      $Content .= '<br />Tento email je generován automaticky. V případě zjištění nesrovnalostí pište zpět.';
     612      $AdditionalHeaders = 'To: =?UTF-8?B?'.base64_encode($User['Name']).'?= <'.$User['Email'].">\n".'From: =?UTF-8?B?'.base64_encode($Config['Web']['Title']).'?='." <".$Config['Web']['AdminEmail'].">\n";
     613      $this->System->AddEmailToQueue($User['Email'], $Title, $Content, $AdditionalHeaders);
     614      $Output = '';
     615    } else $Output = 'Uživatel '.$User['Name'].' nemá email.';
    570616  }
    571617}
  • trunk/form_classes.php

    r204 r219  
    149149    ),
    150150  ),
     151  'Email' => array(
     152    'Title' => 'Nový email',
     153    'Table' => 'EmailQueue',
     154    'SubmitText' => 'Odeslat',
     155    'Items' => array(
     156      'Address' => array('Type' => 'String', 'Caption' => 'Adresa', 'Default' => ''),
     157      'Subject' => array('Type' => 'String', 'Caption' => 'Předmět', 'Default' => ''),
     158      'Content' => array('Type' => 'Text', 'Caption' => 'Obsah', 'Default' => ''),
     159    ),
     160  ),
    151161);
    152162
  • trunk/forms.php

    r202 r219  
    4343          break;
    4444        case 'String':
    45           $Edit = '<input type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
    46           break;
    47         case 'Password':
    48           $Edit = '<input type="password" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
     45          $Edit = '<input style="width: 100%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
     46          break;
     47        case 'Text':
     48          $Edit = '<textarea style="width: 100%; height: 200px;" name="'.$Context.$Index.'">'.$this->Values[$Index].'</textarea>';
     49          break;
     50        case 'Password':
     51          $Edit = '<input style="width: 100%;" type="password" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
    4952          break;
    5053        case 'Integer':
    51           $Edit = '<input type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
     54          $Edit = '<input style="width: 100%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
    5255          break;
    5356        case 'Float':
    54           $Edit = '<input type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
     57          $Edit = '<input style="width: 100%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
    5558          break;
    5659        case 'Time':
    5760          if($this->Values[$Index] == 'Now') $this->Values[$Index] = date('j.n.Y');
    58           $Edit = '<input type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
     61          $Edit = '<input style="width: 100%;" type="text" name="'.$Context.$Index.'" value="'.$this->Values[$Index].'" />';
    5962          break;
    6063        case 'Array':
     
    7982            {
    8083              case 'Enumeration':
    81                 $Edit = '<select name="'.$Context.$Index.'">';
     84                $Edit = '<select style="width: 100%;" name="'.$Context.$Index.'">';
    8285                foreach($FormTypes[$Item['Type']]['States'] as $StateIndex => $StateName)
    8386                {
     
    8992                break;
    9093              case 'Reference':
    91                 $Edit = '<select name="'.$Context.$Index.'">';
     94                $Edit = '<select style="width: 100%;" name="'.$Context.$Index.'">';
    9295                $DbResult = $Database->select($FormTypes[$Item['Type']]['Table'], $FormTypes[$Item['Type']]['Id'].' as Id, '.$FormTypes[$Item['Type']]['Name'].' as Name', $FormTypes[$Item['Type']]['Filter'].' ORDER BY Name');
    9396                while($Row = $DbResult->fetch_array())
     
    175178          break;
    176179        case 'String':
     180          $Values[$Index] = $_POST[$Context.$Index];
     181          break;
     182        case 'Text':
    177183          $Values[$Index] = $_POST[$Context.$Index];
    178184          break;
  • trunk/global.php

    r208 r219  
    3737    $this->Modules[get_class($Module)] = $Module;
    3838  }
     39 
     40  function AddEmailToQueue($Address, $Subject, $Content, $Headers = '')
     41  {
     42    $this->Database->insert('EmailQueue', array('Address' => $Address, 'Subject' => $Subject, 'Content' => $Content, 'Time' => 'NOW()', 'Headers' => $Headers));
     43  }
     44 
     45  function MailUTF8($To, $Subject = '(No subject)', $Message = '', $Header = '')
     46  {
     47    $Header = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=UTF-8' . "\r\n".$Header;
     48    mail($To, '=?UTF-8?B?'.base64_encode($Subject).'?=', $Message, $Header);
     49  }
     50
     51  function ProcessEmailQueue()
     52  {
     53    $DbResult = $this->Database->select('EmailQueue', '*', 'Archive=0');
     54    while($DbRow = $DbResult->fetch_assoc())
     55    {     
     56      $this->MailUTF8($DbRow['Address'], $DbRow['Subject'], $DbRow['Content'], $DbRow['Headers']);
     57      //echo('mail('.$DbRow['Address'].', '.$DbRow['Subject'].', '.$DbRow['Content'].', FromUTF8('.$DbRow['Headers'].', \'iso2\'));');
     58      $this->Database->update('EmailQueue', 'Id='.$DbRow['Id'], array('Archive' => 1));
     59      $this->Modules['Log']->NewRecord('System', 'SendEmail', $DbRow['Id']);
     60    }   
     61  }
    3962}
    4063
    4164$System = new System();
    4265$System->Config = $Config;
     66$System->Database = &$Database;
    4367include_once('log.php');
    4468$System->AddModule(new Log());
     
    119143function ToCzfreeIp($Host)
    120144{
    121     $Parts = explode('.', $Host['external_ip']);
    122     if($Host['name'] == 'CENTRALA') return('10.144.1.1');
    123       else return('10.144.200.'.$Parts[3]);
     145  $Parts = explode('.', $Host['external_ip']);
     146  if($Host['name'] == 'CENTRALA') return('10.144.1.1');
     147    else return('10.144.200.'.$Parts[3]);
    124148}
    125149
  • trunk/network/administration.php

    r197 r219  
    66  var $FullTitle = 'Administrace sítě';
    77  var $ShortTitle = 'Administrace sítě';
    8   var $State = array('Neplánováno', 'V plánu');
    9   var $Period = 60;
    108
    119  function Show()
    1210  {
    1311    if(!$this->System->Modules['User']->CheckPermission('Network', 'Administration')) return('Nemáte oprávnění');
    14 
    15     $Output = '
    16 <a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/known_mac.php">Zachycené MAC adresy</a><br>
    17 <a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/connections.php">Síťová připojení</a><br>
    18 <a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/bandwidth.php">Zatížení linky do internetu</a><br>
    19 <a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/bandwidth_full.php">Zatížení linky do internetu všechny počítače</a><br>
    20 <a href="'.$this->System->Config['Web']['RootFolder'].'/network/dostupnost.php">Dostupnost sítě</a><br>
    21 <a href="'.$this->System->Config['Web']['RootFolder'].'/is/wlan.php">Bezdrátové sítě v okolí</a><br>
    22 <a href="'.$this->System->Config['Web']['RootFolder'].'/network/restart.php">Ruční restart konfigurace sítě</a><br>
    23 <a href="'.$this->System->Config['Web']['RootFolder'].'/backup/index.php">Nastavení zálohování</a><br>
    24 <a href="'.$this->System->Config['Web']['RootFolder'].'/LogShow.php">Záznamy operací</a><br>
    25 <a href="tc.php?dev=imq0">Traffic control IMQ0(Inet down)</a><br>
    26 <a href="tc.php?dev=imq1">Traffic control IMQ1(Inet up)</a><br>
    27 <a href="wlan.php">WiFi signál</a><br>';
     12    $Output = '';
     13    if(array_key_exists('Action', $_GET))
     14    {
     15      if($_GET['Action'] == 'SendEmail')
     16      {
     17        $Form = new Form('Email');
     18        $Form->OnSubmit = '?Action=SendEmail2';
     19        $Output = $Form->ShowEditForm();
     20      } else
     21      if($_GET['Action'] == 'SendEmail2')
     22      {
     23        $Form = new Form('Email');
     24        $Form->LoadValuesFromForm();
     25        $Result = $this->System->AddEmailToQueue($Form->Values['Address'], $Form->Values['Subject'], $Form->Values['Content']);
     26        $Output = $this->SystemMessage('Vložení emailu', 'Nový email byl vložen do fronty');
     27      }
     28      if($_GET['Action'] == 'ProcessEmailQueue')
     29      {
     30        $this->System->ProcessEmailQueue();
     31        $Output = $this->SystemMessage('Zpracování fronty emailů', 'Nové emaily byly odeslány');
     32      }
     33    } else
     34    $Output =
     35      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/known_mac.php">Zachycené MAC adresy</a><br />'.
     36      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/connections.php">Síťová připojení</a><br />'.
     37      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/bandwidth.php">Zatížení linky do internetu</a><br />'.
     38      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/statistic/bandwidth_full.php">Zatížení linky do internetu všechny počítače</a><br />'.
     39      '<a href="'.$this->System->Config['Web']['RootFolder'].'/network/dostupnost.php">Dostupnost sítě</a><br />'.
     40      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/is/wlan.php">Bezdrátové sítě v okolí</a><br />'.
     41      '<a href="'.$this->System->Config['Web']['RootFolder'].'/network/restart.php">Ruční restart konfigurace sítě</a><br />'.
     42      //'<a href="'.$this->System->Config['Web']['RootFolder'].'/backup/index.php">Nastavení zálohování</a><br />'.
     43      '<a href="'.$this->System->Config['Web']['RootFolder'].'/LogShow.php">Záznamy operací</a><br />'.
     44      '<a href="?Action=SendEmail">Zaslat email</a><br />'.
     45      '<a href="?Action=ProcessEmailQueue">Zpracovat frontu emailů</a><br />';
     46      //'<a href="tc.php?dev=imq0">Traffic control IMQ0(Inet down)</a><br />'.
     47      //'<a href="tc.php?dev=imq1">Traffic control IMQ1(Inet up)</a><br />'.
     48      //'<a href="wlan.php">WiFi signál</a><br />';
    2849    return($Output);
    2950  }
Note: See TracChangeset for help on using the changeset viewer.