Example #1
0
  public function run() {                                                      // the main sub in our application
   if(!isset($_SESSION)) session_start();
   
   $action = getvariablereq('action');          // get action from the request
   $data   = getvariablereq('data'  );          // get JSON data from the request
   
   $data = ajaxdecode($data);            // fix some escaped paths (if any)
   
//   echo htmlspecialchars($data);
   if ($data) {
    $json=json_decode($data);                      // parse Json data came from AJAX (if any)
   }
   
   
   
   
   $userid     = getvariable('userid'     ,0);
   if (!$userid) {
    $userid     = getsecurevariable('userid'     ,0);
   }
   
//    ajax_echo_r ($userid);
//    ajax_echo_r (session_id());
//    ajax_echo_r ($_SESSION);
//    ajax_echo_r ($this->userdetails);
   
//    $hue        = getvariable       ('hue'       );
   $hue                = getsecurevariable ('hue'            ,-1);
   $theme              = getsecurevariable ('theme'          ,-1);
   $SmoothAnimation    = getsecurevariable ('SmoothAnimation',-1);
   $this->userdetails = $this->model->getUserDetails($userid);
   $isadmin = $this->userdetails->usergroup->Password==2;
   
//   ajax_echo_r ($this->userdetails);
   
   if (!is_dir("view/".$theme."/")) {
    $theme=$this->settings->defaulttheme;
   }
   if ((int)$SmoothAnimation==-1) {                                            // if it's not stored in session
    if ($userid>-1) {                                                             // if the user is logged
     $SmoothAnimation = $this->userdetails->SmoothAnimation;                         // get hue value from user details
    } else {                                                                   // if the user is came for the first time
     $SmoothAnimation = 0;                                                     // set the default value
    }
   }
   
//   $this->userdetails = new stdClass();
//   $this->model->setUserDetails($this->userdetails);
   
   $this->viewroot = "view/".$theme;
   setsecurevariable("viewroot",$this->viewroot);
   $this->imgfolder = $this->viewroot."/img";
   
   if (file_exists($this->viewroot."theme.php")) {
    $this->themeinfo = parse_ini_file($this->viewroot."theme.php");
   }
   
   
   
   
   if (sizeof($_FILES)>0) {                        // file upload
//    echo "Fileupload...";
//    echo session_id();
    
//    ajax_echo_r($_FILES);
    
    $file = $_FILES['fileupload'];
//    ajax_echo_r($file);
    mkdirr($this->settings->temppath);
    
    switch ($action) {
     case ('balance'):
      $fname = $this->settings->temppath.'/'.session_id().".xls";
      $rslt = move_uploaded_file($file['tmp_name'], $fname);
      
      $this->model->loadBalance($fname);
      
     break;
     case ('integration'):
      $ext = substr($file['name'], strrpos($file['name'], "."));
      
      $fname = $this->settings->temppath.'/'.session_id().$ext;
//      echo $fname;
      $rslt = move_uploaded_file($file['tmp_name'], $fname);
      
      switch ($ext) {
       case ('.csv'): // import youtube stats
        $this->model->importYoutubeStats($fname);
       break;
      }
      
      //$this->model->loadBalance($fname);
      
     break;
     case ('steps'):
      $ext = substr($file['name'], strrpos($file['name'], "."));
      
      $dir = sdir($this->settings->temppath, "full_".session_id().'_*.*');
//      ajax_echo_r ($dir);
      if ($dir) {
       foreach ($dir as $f) {
        $pos0 = strrpos($f,"_")+1;
        $pos1 = strrpos($f,".");
        $fid = (int)substr($f, $pos0, $pos1-$pos0);
        if ($fid>$thisid) $thisid = $fid;
//           echo $fid."<br>";
       }
      }
      
      $thisid++;
      
      $filef     = $this->settings->temppath.'/full_'.session_id()."_".$thisid.$ext;
      $filet     = $this->settings->temppath.'/thb_' .session_id()."_".$thisid.$ext;
      
//      $fname = $this->settings->temppath.'/'.session_id().$ext;
//      echo $filef."<br>";
//      echo $filet."<br>";
      
      $rslt = move_uploaded_file($file['tmp_name'], $filef);
//      echo $rslt;
      
      
      $pic = $this->model->preparePic($filef, $filet, 0);
      
//      echo $this->showTempPics();
      
      $ajax_fileupload_img_str = $this->fillAttachments($action, $this->settings->temppath."/", session_id());
      echo $ajax_fileupload_img_str;
      
     break;
    }
    
    if (($file['error']==0) && $rslt) {
//     echo localize("<en>File uploaded successfully</en><ru>Файл загружен успешно</ru>");
    } else {
     echo localize($this->getMessage('error_upload'));
    }
   } else {                                               // no file upload
    $go      = getvariablereq('go');
    $key     = getvariablereq('key').getvariablereq('k');          // get JSON data from the request
    
    if ($key) {
     $go="ownlogin";
//     echo strlen($key);
//     $key = str_replace(".", "", $key);
     $key = substr($key, 0, 32);
//     echo $key;
    }
    
    if ($go=='ownlogin') {
     $login = $this->model->ownLogin($key);
     
     if ($login) {
      //$tmp = new Template($this->viewroot, 'redir.htt');
      //$tmp->fill('%Link%', '?go=users');
      
//      ajax_echo_r($login);
      
      if ($login->IsProject) {
       $virtuser = new stdClass;
       $virtuser->ID = -2;
       $virtuser->Name = $login->Firstname." ".$login->Surname;
       $virtuser->usergroup = $this->model->getUserGroup(0);
       
       setsecurevariable('userid',$virtuser->ID);
       setsecurevariable('tmpcnt',0         );
 //      session_write_close();
       
       $this->sess->close();
       
       $this->userdetails = $virtuser;
       $this->projectdetails = $login;
       
       $userid = $virtuser->ID;
       
       
      } else {
       setsecurevariable('userid',$login->ID);
       setsecurevariable('tmpcnt',0         );
 //      session_write_close();
       
       $this->sess->close();
       
       $this->userdetails = $login;
       $userid = $login->ID;
      }
     } else {
      //$tmp = new Template($this->viewroot, 'wrong_key.htt');
     }
    }
    $isadmin = $this->userdetails->usergroup->Password==2;
    
    
//    $userstate = $this->model->isUserAuth($userid);                             // check user's session and login state
    if ($action) {                                                             // start the processing of ajax commands
     header("Pragma:        no-cache");
     header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
     header("Expires:       0");
     
//     echo $action;
     if (($userid>-1) || ($action=='dologin') || ($action=='dologout') || ($action=='api') || ($action=='ownlogin')) {
      switch ($action) {
       case ("savefield"):
       case ("saveField"):
        $this->model->saveField($json);
       break;
       case ("dologin"):                                             // used to login the user
        $is_auth = $this->model->userAuth($json);
        if ($is_auth) {
         setsecurevariable('userid',$is_auth->ID);
         setsecurevariable('tmpcnt',0           );
  //       $tmp = new Template($this->viewroot, 'ajax_nouser_logged.htt');   // load JS user successful login template
         ajax_echo ("##refresh##");
        } else {
         $tmp = new Template($this->viewroot, 'ajax_nouser_error.htt');      // load JS user login error template
         $tmp->fill('%imgfolder%'          , $this->imgfolder                    );
         ajax_echo($tmp->output());
        }
       break;
       case ("dologout"):                                                       // used to log out
        setsecurevariable(             "hue", "-1" );                           // set to default (abstracted)
        setsecurevariable(           "theme", $this->settings->defaulttheme );  // set to default (abstracted)
        setsecurevariable( "SmoothAnimation", "1"  );                           // enabled by default
        setsecurevariable(          "userid", "-1" );
        $userid = -1;
  //       ajax_echo_r($_SESSION);
        ajax_echo ("##refresh##");
       break;
       case ("setUserParameter"):                                               // used to save user's setting
        setsecurevariable($json->name, $json->value);
 //        $userid = 0;
 //        ajax_echo_r($_SESSION);
        if (($json->name=='hue') || ($json->name=='theme')) {
         ajax_echo ("##refresh##");
        }
       break;
       
       case ("newpartner"):                                   // used to login the user
        $is_sent = (trim($json->name)!='') && (trim($json->email)!='') && (trim($json->comments)!='');
        if ($is_sent) {
         $is_sent = sendmail("Email from ".$json->name,"Bricks Pro partnership request: <br>\n".$json->comments);
        }
        if ($is_sent) {
         $tmp = new Template($this->viewroot, 'ajax_new_partner.htt');            // load JS success template
        } else {
         $tmp = new Template($this->viewroot, 'ajax_new_partner_error.htt');      // load JS error template
        }
        $tmp->fill('%imgfolder%'  ,$this->imgfolder );
        ajax_echo($tmp->output());
       break;
       
       case ("showgallery"):
 //        ajax_echo_r($json);
        if ($json->operation=='download') {
         $ret = $this->model->getGalleryItem($json);
        } else {
         if ($json->operation=='delete') {
          $ret = $this->model->deleteGalleryItem($json);
         }
         $gal = $this->getGallery($json);
         $ret = $gal->compiled;
        }
        ajax_echo ($ret);
       break;
       
       
       case ('postevent'):
        $ret=$this->model->addEvent($json);
 //       ajax_echo_r ($ret->rowsAffected);
        ajax_echo_r($json);
       break;
       
       case ('getnewevents'):
        $events = $this->model->getNewEvents($json);
        
        echo json_encode($events);
       break;
       
       case ('processxls'):
        $xls = $this->model->loadXls(0);
        
        setCache('settings',$json);
        
        if ($xls) {
         $data = $this->model->processXls($xls, $json);
        } else {
         $data = "";
        }
        ajax_echo_r($data);
        
       break;
       
       case ('showtable'):
//        ajax_echo_r ($this->userdetails->usergroup);
        
        $json->tablename = $json->go;
        
        $thisdebug = 0;
        if ($thisdebug) $mtime = microtime(true);
        switch ($json->go) {
         case ('news'):
          $params = new stdClass;
          $params->listid=-1;
          $table = $this->model->getTasks($params);
         break;
         case ('users'):
          if ($this->userdetails->GroupID!=1) $id = $this->userdetails->ID;
          $table[1] = $this->model->getUsers($json, $id);
         break;
         case ('dashboard'):
          // see case sections for each dashboard subpage
         break;
         case ('objects'):
          $table = $this->model->getObjects($json);
         break;
         case ('customers'):
          $table = $this->model->getCustomers($json);
         break;
         case ('happiness'):
          $table = $this->model->getHappiness($json);
         break;
         case ('system'):
         break;
         default:
          $table = $this->model->getTable($json, $this->userdetails);
         break;
        }
        
//        ajax_echo_r($table);
//        ajax_echo_r($json);
        
        if ($json->isexport) {
         $tmp = new Template($this->viewroot, 'output_list.htt');                                      // load common parent template
         $block_item = new Template($this->viewroot, $tmp->returnloop('block_item'));
         
         $thislist = "";
         if (sizeof($table[1])) {
          foreach ($table[1] as $item) {
           $block_item->reload();
           $block_item->fill("%Item%"           , $item->Item     );
           $block_item->fill("%Name%"           , $item->Name     );
           $thislist.=$block_item->output();
          }
         }
         
         $tmp->fillloop("block_item"           , $thislist     );
         
         $tmp->fill("%numrows%",sizeof($table[1]));
         
         ajax_echo(sup($tmp->output()));
        } else {
//         ajax_echo_r ($json);
         if ($json->r_viewmode) {
          $tmp_src = new Template($this->viewroot, 'main_'.$json->go.'_'.$json->r_viewmode.'.htt');             // load common parent template
         } else {
          $tmp_src = new Template($this->viewroot, 'main_'.$json->go.'_'.$json->r_cutby.'.htt');                                   // load common parent template
          if (!$tmp_src->is_template) {
//           echo $isadmin;
           if ($isadmin) {
            $tmp_src = new Template($this->viewroot, 'main_'.$json->go.'.htt');                                   // load common parent template
           } else {
            $tmp_src = new Template($this->viewroot, 'main_'.$json->go.'_manager.htt');                                   // load common parent template
           }
          }
         }
         $tmp_src = $this->fillStricts($tmp_src, 1);
         $tmp_src->fill(  '%imgfolder%' , $this->imgfolder                    );
         
//         ajax_echo_r ($json);
         switch ($json->go) {
          case ('dashboard'):
//           $tmp_src->loadloop('block_dashboard');
           
  //         $cutBy = "customersources";
           $cutBy   = $json->r_cutby;
           $caption = $json->r_cutby_caption;
           
           $tmp_src->fill('%caption%', $caption);
           
           switch ($json->r_cutby) {
            case ('common'):
             $t = $this->model->getStats('common','', $json->s_UserID);
             
             $vars = $tmp_src->getVariables();
//             ajax_echo_r ($t);
             foreach ($vars as $var) {
              if (is_numeric($item->$var)) {
               $tmp_src->fill(        '%'.$var.'%', format($t->$var, "#.#")   );
              } else {
               $tmp_src->fill(        '%'.$var.'%',        $t->$var           );
              }
             }
             
            break;
            case ('ads'):
             $t = $this->model->getStats('ads','', $json->s_UserID);
             
             
             
             $c = 0;
             $loop1  = new Template($this->viewroot, $tmp_src->returnloop('loop_cell1'));
             $loop2  = new Template($this->viewroot, $tmp_src->returnloop('loop_cell2'));
             $loop3  = new Template($this->viewroot, $tmp_src->returnloop('loop_cell3'));
             $loopstr = "";
             
             if ($t) {
              foreach ($t as $k=>$v) {
               $loop1->reload();
               $loop2->reload();
               $loop3->reload();
               
               $loop1->fill(  "%h1%", (int)($v->Cnt*10   ));
               $loop2->fill(  "%h2%", (int)($v->Value/1000));
               $loop3->fill(  "%h3%", (int)($v->Views/10));
               $loopstr1.= $loop1->output();
               $loopstr2.= $loop2->output();
               $loopstr3.= $loop3->output();
               $c++;
               
//               echo (int)($v->Views)."<br>";
               
              }
             } else {
              $block_norows = new Template($this->viewroot, $tmp_src->returnloop('block_norows'));
              $loopstr = $block_norows->output();
             }
             $tmp_src->fillloop( 'loop_cell1', $loopstr1 );
             $tmp_src->fillloop( 'loop_cell2', $loopstr2 );
             $tmp_src->fillloop( 'loop_cell3', $loopstr3 );
             
             
             $vars = $tmp_src->getVariables();
//             ajax_echo_r ($t);
             
             echo sizeof($t);
             
             
             foreach ($vars as $var) {
              if (is_numeric($item->$var)) {
               $tmp_src->fill(        '%'.$var.'%', format($t->$var, "#.#")   );
              } else {
               $tmp_src->fill(        '%'.$var.'%',        $t->$var           );
              }
             }
             
            break;
            case ('monthly'):
             $list = $this->model->getMoneyStats($json->r_cutby);
//             ajax_echo_r ($list);
             
             $loop = new Template($this->viewroot, $tmp_src->returnloop('loop_row'));
             
             $vars = $loop->getVariables();
//             ajax_echo_r ($t);
             foreach ($list->data as $t) {
              $loop->reload();
              foreach ($vars as $var) {
               if (is_numeric($t->$var)) {
                $loop->fill(        '%'.$var.'%', format($t->$var, "#.#")   );
               } else {
                $loop->fill(        '%'.$var.'%',        $t->$var           );
               }
              }
              $loopstr .= $loop->output();
             }
             $tmp_src->fillloop('loop_row', $loopstr);
             
             
             $vars = $tmp_src->getVariables();
             foreach ($vars as $var) {
              if (is_numeric($list->$var)) {
               $tmp_src->fill(        '%'.$var.'%', format($list->$var, "#.#")   );
              } else {
               $tmp_src->fill(        '%'.$var.'%',        $list->$var           );
              }
             }
             
            break;
            case ('deposits'):
             $list = $this->model->getDepositsStats($json);
//             ajax_echo_r ($list);
             
             foreach (array('objects', 'customers') as $tablename) {
              $c = 0;
              $loop = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row_'.$tablename));
              $loopstr = "";
              
              if ($list->$tablename) {
               $vars = $loop->getVariables();
  //             ajax_echo_r ($t);
               foreach ($list->$tablename as $t) {
                $loop->reload();
                $loop->fill("%c%",  $c%2);
                foreach ($vars as $var) {
                 if (is_numeric($t->$var)) {
                  $loop->fill(        '%'.$var.'%', format($t->$var, "#.#")   );
                 } else {
                  $loop->fill(        '%'.$var.'%',        $t->$var           );
                 }
                }
                $loopstr .= $loop->output();
                $c++;
               }
              } else {
               $block_norows = new Template($this->viewroot, $tmp_src->returnloop('block_norows'));
               $loopstr = $block_norows->output();
              }
              $tmp_src->fillloop('loop_table_row_'.$tablename, $loopstr);
             }
             
             /*
             $vars = $tmp_src->getVariables();
             foreach ($vars as $var) {
              if (is_numeric($list->$var)) {
               $tmp_src->fill(        '%'.$var.'%', format($list->$var, "#.#")   );
              } else {
               $tmp_src->fill(        '%'.$var.'%',        $list->$var           );
              }
             }
             */
             
            break;
            case ('handshakes'):
             $list = $this->model->getHandshakesStats($json);
//             ajax_echo_r ($list);
             
             foreach (array('objects', 'customers') as $tablename) {
              $c = 0;
              $loop = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row_'.$tablename));
              $loopstr = "";
              
              if ($list->$tablename) {
               $vars = $loop->getVariables();
  //             ajax_echo_r ($t);
               foreach ($list->$tablename as $t) {
                $loop->reload();
                $loop->fill("%c%",  $c%2);
                foreach ($vars as $var) {
                 if (is_numeric($t->$var)) {
                  $loop->fill(        '%'.$var.'%', format($t->$var, "#.#")   );
                 } else {
                  $loop->fill(        '%'.$var.'%',        $t->$var           );
                 }
                }
                $loopstr .= $loop->output();
                $c++;
               }
              } else {
               $block_norows = new Template($this->viewroot, $tmp_src->returnloop('block_norows'));
               $loopstr = $block_norows->output();
              }
              $tmp_src->fillloop('loop_table_row_'.$tablename, $loopstr);
             }
             
             /*
             $vars = $tmp_src->getVariables();
             foreach ($vars as $var) {
              if (is_numeric($list->$var)) {
               $tmp_src->fill(        '%'.$var.'%', format($list->$var, "#.#")   );
              } else {
               $tmp_src->fill(        '%'.$var.'%',        $list->$var           );
              }
             }
             */
             
            break;
            case ('userseff'):
             $loop = new Template($this->viewroot, $tmp_src->returnloop('loop'));
             $t = $this->model->getStatsUsersEff($json);
//             ajax_echo_r ($t);
             $vars = $loop->getVariables();
             $loopstr = "";
             foreach ($t as $k=>$item) {
              $loop->reload();
              $loop->fill('%total%', $k);
              foreach ($vars as $var) {
               if ($var) {
                if (is_numeric($item->$var)) {
                 $loop->fill(        '%'.$var.'%', format($item->$var, "#.#")   );
                } else {
                 $loop->fill(        '%'.$var.'%', $item->$var   );
                }
               }
              }
              $loopstr .= $loop->output();
             }
             $tmp_src->fillloop('loop', $loopstr);
            break;
            default:
             $loop = new Template($this->viewroot, $tmp_src->returnloop('loop_customersources'));
             $t = $this->model->getStats('customers', $cutBy, $json->s_UserID);
//             ajax_echo_r ($t);
             $vars = $loop->getVariables();
             $loopstr = "";
             foreach ($t as $k=>$item) {
              $loop->reload();
              $loop->fill('%total%', $k);
              foreach ($vars as $var) {
               if (is_numeric($item->$var)) {
                $loop->fill(        '%'.$var.'%', format($item->$var, "#.#")   );
               } else {
                $loop->fill(        '%'.$var.'%', $item->$var   );
               }
              }
              $loopstr .= $loop->output();
             }
             $tmp_src->fillloop('loop_customersources', $loopstr);
             
             $loop = new Template($this->viewroot, $tmp_src->returnloop('loop_objectsources'));
             $t = $this->model->getStats('objects', $cutBy, $json->s_UserID);
             $vars = $loop->getVariables();
             $loopstr = "";
             foreach ($t as $k=>$item) {
              $loop->reload();
              $loop->fill('%total%', $k);
              foreach ($vars as $var) {
               if (is_numeric($item->$var)) {
                $loop->fill(        '%'.$var.'%', format($item->$var, "#.#")   );
               } else {
                $loop->fill(        '%'.$var.'%', $item->$var   );
               }
              }
              $loopstr .= $loop->output();
             }
             $tmp_src->fillloop('loop_objectsources', $loopstr);
            break;
           }
           
           $tmp_src->fillloop(       "block_no","" );
           $tmp_src->fillloop(   "block_norows","" );
           $tmp_src->fillloop(    "block_type1","" );
           $tmp_src->fillloop(    "block_type2","" );
           $tmp_src->fillloop(     "block_dir0","" );
           $tmp_src->fillloop(     "block_dir1","" );
          break;
          case ('news'):
           $looptmp = new Template($this->viewroot, $tmp_src->returnloop('loop_table'));
           $loop_table_row = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row'));
           $vars = $loop_table_row->getVariables();
           
           $c = 0;
           
           $thistable = "";
           if (sizeof($table)) {
            $thisidcolumnname = $json->tablename."_ID";
            foreach ($table as $item) {
             $loop_table_row->reload();
             foreach ($vars as $vn) {
              if ($vn!=="Children") {
               $loop_table_row->fill("%".$vn."%", $item->$vn);
              }
             }
             
             $thistable.=$loop_table_row->output();
             $c++;
            }
           }
           $looptmp->fillloop('loop_table_row',$thistable);
           $tmp_src->fillloop("loop_table",$looptmp->output());
           
           $tmp_src->fill("%numrows%",sizeof($table));
           
          break;
          case ('money'):
           $looptmp        = new Template($this->viewroot, $tmp_src->returnloop('loop_table'));
           $loop_table_row = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row'));
           $vars = $loop_table_row->getVariables();
           
           $block_type = array();
           $block_type[1]     = new Template($this->viewroot, $tmp_src->returnloop('block_type1'));
           $block_type[2]     = new Template($this->viewroot, $tmp_src->returnloop('block_type2'));
           
           $block_type[1] = $block_type[1]->output();
           $block_type[2] = $block_type[2]->output();
           
           $lastTypeID = -1;
           $c = 0;
//           ajax_echo_r ($table[1]);
           $thistable = "";
           if (sizeof($table)) {
            $thisidcolumnname = $json->tablename."_ID";
            foreach ($table[1] as $item) {
             if ($lastTypeID!=$item->TypeID) {
              $lastTypeID = $item->TypeID;
              $c = 1;
             }
             
             $loop_table_row->reload();
             $loop_table_row->fill( "%TypePicture%", $block_type[$item->TypeID]);
             $loop_table_row->fill("%c%",  $c%2+($item->TypeID-1)*2);
             foreach ($vars as $vn) {
              $loop_table_row->fill("%".$vn."%", $item->$vn);
             }
             
             $thistable.=$loop_table_row->output();
             $c++;
            }
           }
           $looptmp->fillloop('loop_table_row',$thistable);
           $tmp_src->fillloop("loop_table",$looptmp->output());
           
           $tmp_src->fill("%numrows%",sizeof($table[1]));
           
           $tmp_src->fillloop(       "block_no","" );
           $tmp_src->fillloop(   "block_norows","" );
           $tmp_src->fillloop(    "block_type1","" );
           $tmp_src->fillloop(    "block_type2","" );
          break;
          case ('events'):
//           ajax_echo_r ($json);
           
           if (($json->go=='events') || ($json->go=='customers') || ($json->r_viewmode=='all') || ($json->r_viewmode=='current')) {
            $looptmp = clone $tmp_src;
            
            $looptmp->loadloop("loop_table");
            $tmp = clone $looptmp;
            
            if (sizeof($table[1])) {
             $block_no = clone $looptmp;
             $block_no->loadloop('block_no');
             $block_no=$block_no->output();
             
             $tmp->loadloop("checkbox_th");
             $checkbox_th=clone $tmp;
             $tmp = clone $looptmp;
             
             $tmp->loadloop("checkbox_td");
             $checkbox_td=clone $tmp;
             $tmp = clone $looptmp;
             
             $loop_table_row = clone $looptmp;                                  // load common parent template
             $loop_table_cell = clone $looptmp;                                 // load common parent template
             
             $looptmp->loadloop("loop_table_header");
             $loopdata = "";
             $loopdata.=$checkbox_th->output();
             
             if ($table[0]) {
              foreach ($table[0] as $k => $v ) {
               if ($v) {
                if ($v!='CustomerID') {
                 $looptmp->reload();
                 $looptmp->fill("%th%"       , $this->StringForge->prepare($v));
                 $loopdata.=$looptmp->output();
                }
               }
              }
             }
             
             $tmp->fillloop("loop_table_header"   ,$loopdata           );
             $loop_table_row->loadloop("loop_table_row");
             $loop_table_cell->loadloop("loop_table_cell");
             $emptyinfo = file_get_contents($this->viewroot.'/templates/emptyinfo.htt');
             $c = 0;
             
             $thistable = "";
             
             $thisidcolumnname = $json->tablename."_ID";
             foreach ($table[1] as $item) {
              $loop_table_row->reload();
              $thisrow   = "";
              $checkbox_td->reload();
              $checkbox_td->fill('%checked%' , 'checked'            );
              $checkbox_td->fill('%id%'      , $item->$thisidcolumnname );
              $thisrow.=$checkbox_td->output();
              foreach ($item as $k=>$v) {
               if ($k && ($k!='CustomerID')) {
                $loop_table_cell->reload();
                if ($k==$json->tablename."_AuxInfo") {
                 if (trim($v)=="") $v=$emptyinfo;
                }
                $loop_table_cell->fill("%celldata%"     , (((int)$v==0) && ((string)(int)$v==$v))?$block_no:($v));
                $loop_table_cell->fill("%k%"     , $k);
                $thisrow.=$loop_table_cell->output();
               }
              }
              $loop_table_row->fillloop('loop_table_cell',$thisrow);
              $loop_table_row->fill("%c%",  $c%2);
              
              $loop_table_row->fill("%id%"           , $item->ID             );
              $loop_table_row->fill("%tablename%"    , $json->tablename      );
              
              $thistable.=$loop_table_row->output();
              $c++;
             }
             $tmp->fillloop('loop_table_row',$thistable);
             $tmp->fillloop("checkbox_th","");
             $tmp->fillloop("checkbox_td","");
             $tmp_src->fillloop("block_norows","");
             
             
             $tmp_src->fillloop("loop_table",$tmp->output());
            } else {
             $block_norows = clone $looptmp;
             $block_norows->loadloop('block_norows');
             $block_norows=$block_norows->output();
             
             $tmp_src->fillloop("loop_table",$block_norows);
            }
            
            $tmp_src->fill("%numrows%",sizeof($table[1]));
           } else {
            switch ($json->r_viewmode=='monthly') {
             case ('monthly'):
              $loop_month = clone $tmp_src;
              $loop_month->loadloop('loop_month');
              
              $loop_bytype = clone $tmp_src;
              $loop_bytype->loadloop('loop_bytype');
              
              $months = "";
              if (sizeof($table[1])) {
               $report=array();
               $prevmonth = -1;
               
               //ajax_echo_r($table[1][0]);
               $thismonth = new stdClass();
               
               $fakeitem = new stdClass();
               $fakeitem->Month=-2;
               $table[1][]=$fakeitem;
               
               foreach ($table[1] as $item) {
                if (($prevmonth!=$item->Month) && ($thismonth->month)) {
                 $days = cal_days_in_month(CAL_GREGORIAN, $thismonth->month, $thismonth->year);
                 
                 $thismonth->etm    = $etm;
                 $thismonth->itm    = $itm;
                 $thismonth->aetm   = sprintf("%01F", $etm/$days);
                 $thismonth->aitm   = sprintf("%01F", $itm/$days);
                 $thismonth->ietm   = $ietm;
                 $thismonth->eetm   = $eetm;
                 
                 arsort($bytype);
                 $thismonth->bytype = $bytype;
                 
                 $report[] = clone $thismonth;
                 
                 $etm    = 0;
                 $itm    = 0;
                 $ietm   = 0;
                 $eetm   = 0;
                 $bytype = array();
                }
                
   //             if ($item->Month==5) {
   //              ajax_echo_r($bytype);
   //             }
                
                $thismonth->year  = $item->Year  ;
                $thismonth->month = $item->Month ;
                
                $bytype[$item->Description] += $item->Value;
                
                If (($item->EZID == 1) And ($item->TypeID == 2)) {
                 $eetm += $item->Value;
                }
                If (($item->EZID == 2) And ($item->TypeID == 2)) {
                 $ietm += $item->Value;
                }
                
                If (($item->TypeID == 1) || ($item->TypeID == 3)) {                   // income
                 $itm += $item->Value;
                } else {                                                               // expenditure
                 $etm += $item->Value;
                }
                
                $prevmonth=$item->Month;
                
               }
               
               foreach ($report as $thismonth) {
                $loop_month->reload();
                $loop_month->fill( "%year%",$thismonth->year );
                $loop_month->fill("%month%",$thismonth->month);
                
                $loop_month->fill(  "%etm%",$thismonth->etm  );
                $loop_month->fill(  "%itm%",$thismonth->itm  );
                $loop_month->fill( "%aetm%",$thismonth->aetm );
                $loop_month->fill( "%aitm%",$thismonth->aitm );
                $loop_month->fill( "%eetm%",$thismonth->eetm );
                $loop_month->fill( "%ietm%",$thismonth->ietm );
                
                $bytype="";
                if (is_array($thismonth->bytype)) {
                 foreach ($thismonth->bytype as $k=>$v) {
                  $loop_bytype->reload();
                  
                  $loop_bytype->fill("%k%",$k);
                  $loop_bytype->fill("%v%",$v);
                  
                  $bytype.= $loop_bytype->output();
                 }
                }
                
                $loop_month->fillloop("loop_bytype",$bytype);
                $months.=$loop_month->output();
               }
              }
              $tmp_src->fillloop("loop_month",$months);
             break;
            }
           }
           
          break;
          
          case ('users'):
//           echo $id;
           if ($id) {
            $tmp_src->fillloop('block_delete', '');
           } else {
            $tmp_src->removeloop('block_delete');
           }
           
           $block_no       = new Template($this->viewroot, $tmp_src->returnloop('block_no'));
           $block_no=$block_no->output();
           
           $block_norows   = new Template($this->viewroot, $tmp_src->returnloop('block_norows'));
           $block_norows=$block_norows->output();
           
           $loop_table_row = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row'));
           
           $block_dir = array();
           $block_dir[0]     = new Template($this->viewroot, $tmp_src->returnloop('block_dir0'));
           $block_dir[1]     = new Template($this->viewroot, $tmp_src->returnloop('block_dir1'));
           
           $block_dir[0] = $block_dir[0]->output();
           $block_dir[1] = $block_dir[1]->output();
           
           $loopdata = "";
           
           $cols = $loop_table_row->getVariables();
//           ajax_echo_r ($cols);
           
           $emptyinfo = file_get_contents($this->viewroot.'/templates/emptyinfo.htt');
           $c = 0;
           
           $thistable = "";
           if (sizeof($table[1])) {
            $thisidcolumnname = $json->tablename."_ID";
    //          echo $thisidcolumnname."<br>";
            foreach ($table[1] as $item) {
             $loop_table_row->reload();
             $thisrow   = "";
             
             $loop_table_row->fill(           "%ID%", $item->ID);
             $loop_table_row->fill( "%calldiretion%", $block_dir[$item->DirectionID]);
//             $loop_table_row->fill("%c%",  ($c%2) + (((date_timestamp_get(date_create($item->LastAccess)) + 3600*72)>date_timestamp_get(date_create()) )?0:2) );
             $loop_table_row->fill("%c%",  $c%2);
             
             foreach ($cols as $cv) {
              $k=$cv;
              $v = $item->$k;
              if ($k && ($k!='CustomerID')) {
               if ($k==$json->tablename."_AuxInfo") {
                if (trim($v)=="") $v=$emptyinfo;
               }
               
               $loop_table_row->fill(  "%".$k."%", (((int)$v==0) && ((string)(int)$v==$v) && ($k!='Cost'))?$block_no:($v));
              }
             }
             $loop_table_row->fillloop('loop_table_cell',$thisrow);
             
//             echo (date_timestamp_get(date_create($item->DateTarget))."-".date_timestamp_get(date_create())."<br>");
             
             $loop_table_row->fill("%id%"           , $item->ID             );
             $loop_table_row->fill("%tablename%"    , $json->tablename      );
             
             $thistable.=$loop_table_row->output();
             $c++;
            }
           } else {
            /*
            $thisrow   = "";
            $thisrow.=$block_norows;
            $loop_table_row->fillloop('loop_table_cell',$thisrow);
            $loop_table_row->fill("%c%",  $c%2);
            $thistable.=$loop_table_row->output();
            */
            $tmp_src->fillloop('loop_table', $block_norows);
           }
           
           $tmp_src->removeloop('loop_table');
           
           $tmp_src->fillloop('loop_table_row',$thistable);
           
           $tmp_src->fillloop(     "block_no","" );
           $tmp_src->fillloop( "block_norows","" );
           $tmp_src->fillloop(   "block_dir0","" );
           $tmp_src->fillloop(   "block_dir1","" );
           
           
           $tmp_src->fill("%numrows%",sizeof($table[1]));          
           
          break;
          default:
           $looptmp = new Template($this->viewroot, $tmp_src->returnloop('loop_table'));
           $loop_table_row = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row'));
           $vars = $loop_table_row->getVariables();
           
           $block_no       = new Template($this->viewroot, $tmp_src->returnloop('block_no'));
           $block_no=$block_no->output();
           
           $c = 0;
           
           $thistable = "";
           if (sizeof($table[1])) {
            $thisidcolumnname = $json->tablename."_ID";
            foreach ($table[1] as $item) {
             $loop_table_row->reload();
             $loop_table_row->fill("%c%",  $c%2);
             
             foreach ($vars as $vn) {
              if ($vn!=="Children") {
               $loop_table_row->fill("%".$vn."%", ($item->$vn)?$item->$vn:$block_no);
              }
             }
             
             $thistable.=$loop_table_row->output();
             $c++;
            }
           } else {
            $block_norows = new Template($this->viewroot, $tmp_src->returnloop('block_norows'));
            $thistable = $block_norows->output();
           }
           
           $looptmp->fillloop(  'loop_table_row', $thistable);
           $tmp_src->fillloop(      "loop_table", $looptmp->output());
           $tmp_src->fillloop(    "block_norows", "" );
           $tmp_src->fillloop(        "block_no", "" );
           
           $tmp_src->fill("%numrows%",sizeof($table[1]));
          break;
         }
         
         $tmp_src = $this->fillStricts($tmp_src);
         $tmp_src->processfcb('');
         $tmp_src->fill(  '%imgfolder%' , $this->imgfolder                    );
         $tmp_src->fill(   '%viewroot%' , $this->viewroot                     );
         
         ajax_echo(sup($tmp_src->output()));
        }
       break;
       
       case ('clearColumn'):
        echo $this->model->clearColumn($json->id);
       break;
       
       
       
       
       case ("setListID"):
        $this->model->setListID($json);
       break;
       
       case ("addTask"):
        $json->AddedBy = $userid;
 //       echo $userid;
        $this->model->addTask($json);
       break;
       
       case ("deleteTask"):
        $this->model->deleteTask($json);
       break;
       
       case ("resumeTask"):
        $this->model->resumeTask($json);
       break;
       
       case ("pauseTask"):
        $this->model->pauseTask($json);
       break;
       
       
       
       
       
       case ('newProject'):
//        ajax_echo_r($json);
        $leftcontent = new Template($this->viewroot, "editor_projects.htt");
        if ($json->ID) {
         $rec = $this->model->getProject($json->ID);
         $leftcontent->fill('%mode%', 'edit');
        } else {
         $rec = new stdClass;
         $rec->TypeID   = 1;
         $rec->SendSMS  = 1;
         $rec->HasDoors = 1;
         $leftcontent->fill('%mode%', 'create');
        }
        
//        ajax_echo_r ($rec);
        
//        $leftcontent->processfcb();
        
        $leftcontent = $this->fillStricts($leftcontent, $json->ID);
        
        if (!$rec->City        ) $rec->City        = "Санкт-Петербург";
        if (!$rec->DateFinish  ) $rec->DateFinish  = date('Y-m-d', strtotime('+2 weeks'));   // date_add dateadd
        if (!$rec->DateMeasure ) $rec->DateMeasure = date('Y-m-d H:i:s');
        if (!$rec->DateInstall ) $rec->DateInstall = date('Y-m-d H:i:s');
        
//        ajax_echo_r ($rec);
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
        $list = $this->model->getUsersLst();
        $loopdata = $this->fillList($list, $loop, $rec->UserID);
        $leftcontent->fillloop('loop_users', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("block_Customer"));
        $loopdata = $this->fillList($list, $loop, $rec->CustomerID);
        $leftcontent->fillloop('block_Customer', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("block_AssignedTo"));
        $loopdata = $this->fillList($list, $loop, $rec->AssignedTo);
        $leftcontent->fillloop('block_AssignedTo', $loopdata);
        
        
        
        $loopdata = $this->getParticipants($json);
        $leftcontent->fillloop('block_participants', $loopdata);
        
//        ajax_echo_r ($json);
//        ajax_echo_r ($rec);
//        ajax_echo_r ($this->userdetails);
        $json->IsFull = $this->getIsFull();
        $loopdata = $this->getProjectSteps($json);
        $leftcontent->fillloop('loop_step', $loopdata);
        $leftcontent->fillloop('loop_stepa', '');
        
//        echo htmlentities($loopdata);
        
        $vars = $leftcontent->getVariables();
        
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , $rec->$var);
         }
        }
        
        $leftcontent->processfcb('');
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        ajax_echo (localize($leftcontent->output()));        
        
//        $users=$this->model->getList('users');
       break;
       
       case ('closeProject'):
//        ajax_echo_r ($json);
        $ret = $this->model->closeProject($json);
        ajax_echo_r ($ret);
       break;
       
       case ('addProject'):
        $json->DateMeasure = dateTimeAdaptWrite($json->DateMeasure);
        $json->DateInstall = dateTimeAdaptWrite($json->DateInstall);
        if (!$json->ID) {
         $json->AddedBy   = $this->userdetails->ID;
         $json->DateAdded = date("Y-m-d H:i:s");
        }
        
//        ajax_echo_r ($json);
//        if (substr_count($json->DateMeasure,":")==1) $json->DateMeasure.=":00";
//        if (substr_count($json->DateInstall,":")==1) $json->DateInstall.=":00";
        
        $ret = new stdClass;
        
        if ((gettype($json->Firstname)!="NULL") && ($json->Firstname=='')) {
         $ret->message = $this->getMessage('addproject_error_nofirstname');
         $ret->result = 0;
        } elseif ($json->lastid=='div_Email'       && !$json->City        ) {
         $ret->message = $this->getMessage('addproject_error_nocity');
         $ret->result = 0;
        } elseif ($json->lastid=='div_OrderNumber' && (!$json->PhoneMain || $json->PhoneMain=='+7(___) ___-____')   ) {
         $ret->message = $this->getMessage('addproject_error_nophone');
         $ret->result = 0;
        } elseif ($json->lastid=='div_Email'       && !$json->Street      ) {
         $ret->message = $this->getMessage('addproject_error_nostreet');
         $ret->result = 0;
        } elseif ($json->lastid=='div_OrderNumber' && !$json->PhoneMain   ) {
         $ret->message = $this->getMessage('addproject_error_nophone');
         $ret->result = 0;
        } elseif ($json->lastid=='div_DateFinish'  && !$json->OrderNumber ) {
         $ret->message = $this->getMessage('addproject_error_noordernumber');
         $ret->result = 0;
        } elseif ($json->lastid=='div_Doors'       && !$json->Cost        ) {
         $ret->message = $this->getMessage('addproject_error_nocost');
         $ret->result = 0;
        } elseif ((date_create($json->DateTarget)) && ((int)date_format(date_create($json->DateTarget), 'Y')<1985)) {
         $ret->message = $this->getMessage('addmoney_error_nodate');
         $ret->result = 0;
        } else {
         if ($json->ID) {
          $rec = $this->model->getProject($json->ID);
//          echo gettype($json->Cost);
//          ajax_echo_r ($json);
          if ($json->PhoneMain) $rec->PhoneMain = $json->PhoneMain;
          if ($json->Email    ) $rec->Email     = $json->Email;
//          ajax_echo_r ($rec);
          
          if (
           (!$rec->IsCompleted) && 
           (
            ($json->lastid=='div_Finish') ||
            ($json->lastid=='0')
           )
          ) {
           
//           echo "send now<br>";
           $json->IsCompleted = 1;
           
           $params = new stdClass;
           $params->ProjectID = $json->ID;
           $params->StepID = 1;
           $params->DateTarget = date("Y-m-d H:i:s");
           $this->model->addProjectStep($params);
           
           $this->sendStepMessages(1, $rec);
           
           
          }
          
         }
         
         unset ($json->lastid);
         $r = $this->model->addProject($json, $userid);
         if ($r) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
         }
        }
        $ret->ID = $r;
        echo json_encode($ret);
        
       break;
       
       case ('deleteProject'):
        $this->model->deleteProject($json);
       break;
       
       case ('addComment'):
        $json->UserID = $userid;
        ajax_echo_r ($json);
        $ret = $this->model->addComment($json);
        ajax_echo_r ($ret);
        
       break;
       
       case ('getComments'):
 //       ajax_echo_r($json);
 //       ajax_echo_r (htmlentities($this->getComments($json)));
        ajax_echo (($this->getComments($json)));
        
       break;
       
       case ('deleteComment'):
 //       ajax_echo_r($json);
        $ret = $this->model->deleteComment($json);
 //       ajax_echo_r($ret);
        echo $this->getComments($ret);
        
       break;
       
       
       
       
       
       
       case ('loadProjectParticipants'):
//        ajax_echo_r($json);
        echo $this->getParticipants($json);
       break;
       
       case ('addProjectParticipant'):
        $this->model->addProjectParticipant($json);
        echo $this->getParticipants($json);
       break;
       
       case ('removeProjectParticipant'):
//        ajax_echo_r($json);
        $this->model->removeProjectParticipant($json);
        echo $this->getParticipants($json);
       break;
       
       
       
       case ('addProjectStep'):
        if ($json->StepID) {
         $json->DateTarget = date("Y-m-d H:i:s");
         
         $step = $this->model->getStep($json->StepID);
         
 //        ajax_echo_r ($json);
 //        ajax_echo_r ($step);
         
         $success = 1;
         
         $usr = $this->model->getCustomerFromProject($json->ProjectID);
         $project = $this->model->getProject($json->ProjectID);
         if ($json->DateMeasure || $json->DateInstall) {
          if ($json->DateMeasure) {
           $project->DateMeasure = $json->DateMeasure;
           unset ($json->DateMeasure);
          }
          if ($json->DateInstall) {
           $project->DateInstall = $json->DateInstall;
           unset ($json->DateInstall);
          }
          
          $r = $this->model->addProject($project, $userid);
          
         }
         
         if (($step->NeedDate)) {
          switch ($step->ID) {
           case (2):
            $project->DateAux = dateAdaptRead($project->DateMeasure).", ".$daynames[dayWeekAdaptRead($project->DateMeasure)];
            $project->TimeAux = timeAdaptRead($project->DateMeasure);
           break;
           case (13):
            $project->DateAux = dateAdaptRead($project->DateInstall).", ".$daynames[dayWeekAdaptRead($project->DateInstall)];
            $project->TimeAux = timeAdaptRead($project->DateInstall);
           break;
          }
          
          if (($project->DateAux==0) || ($project->DateAux=='')) {
           switch ($step->ID) {
            case (2):
             echo localize($this->getMessage('error_nodatemeasure'));
            break;
            case (13):
             echo localize($this->getMessage('error_nodateinstall'));
            break;
           }
           $success = 0;
          }
         }
         
         if ($step->NeedImg) {
          $rslt = $this->moveUploads('steps', $json);
 //         echo $rslt;
          
          if ($rslt==0) {
           $success = 0;
           echo localize($this->getMessage('error_nopictures'));
          }
         }
         
 //        ajax_echo_r ($usr);
         
         if ($success) {
          switch ($step->ID) {
           case (14):
            $project->DateFinished = date("Y-m-d H:i:s");
            unset ($project->DateAux);
            unset ($project->TimeAux);
            $r = $this->model->addProject($project, $userid);
           break;
          }
          
          $this->model->addProjectStep($json);
          
          $this->sendStepMessages($step->ID, $project);
          
         }
        }
        
        $json->IsFull = $this->getIsFull();
        echo $this->getProjectSteps($json);
       break;
       
       
       
       case ('api'):
        $method = getvariablereq('method');
        
        switch ($method) {
         case ('getCurrentProjects'):
          $json = new stdClass;
          $json->tablemode = 0;
          $json->isexport = 0;
          $json->go = "projects";
          $json->r_projectsview = "current";
          $json->tablename = "projects";
          $json->isapi = 1;
          
          $table = $this->model->getTable($json);
          
         break;
         default:
          echo "Unknown api method: ".$method;
         break;
        }
        
        echo json_encode($table);
        
       break;
       
       
       
       case ('loadUserPrivileges'):
        echo $this->getUserPrivileges($json);
       break;
       
       case ('addUserPrivilege'):
        $this->model->addUserPrivilege($json);
        echo $this->getUserPrivileges($json);
       break;
       
       case ('removeUserPrivilege'):
        $this->model->removeUserPrivilege($json);
        echo $this->getUserPrivileges($json);
       break;
       
       
       case ('selectChange'):
//        ajax_echo_r($json);
        $ret = new stdClass;
        $ret->debug = ajax_return_r($json);
        
        switch ($json->id) {
         case ('TypeID'):
          $leftcontent = new Template($this->viewroot, 'left_money.htt');                                      // load common parent template
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_groupids"));
          $list = $this->model->getExpenditureGroups($json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_groupids', $loopdata);
          $ret->GroupID = localize($loopdata);
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placenames"));
          $list = $this->model->getPlaceNames($json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placenames', $loopdata);
          $ret->PlaceName = localize($loopdata);
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placetypes"));
          $list = $this->model->getPlaceTypes($json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placetypes', $loopdata);
          $ret->PlaceType = localize($loopdata);
         break;
         
         case ('GroupID'):
          $leftcontent = new Template($this->viewroot, 'left_money.htt');                                      // load common parent template
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placenames"));
          $list = $this->model->getPlaceNames(0, 0, $json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placenames', $loopdata);
          $ret->PlaceName = localize($loopdata);
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placetypes"));
          $list = $this->model->getPlaceTypes(0, 0, $json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placetypes', $loopdata);
          $ret->PlaceType = localize($loopdata);
         break;
         
         case ('PlaceType'):
          $leftcontent = new Template($this->viewroot, 'left_money.htt');                                      // load common parent template
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placenames"));
          $list = $this->model->getPlaceNames(0, $json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placenames', $loopdata);
          $ret->PlaceName = localize($loopdata);
         break;
         
         case ('PlaceName'):
          $leftcontent = new Template($this->viewroot, 'left_money.htt');                                      // load common parent template
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placetypes"));
          $list = $this->model->getPlaceTypes(0, $json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
//          $leftcontent->fillloop('loop_placetypes', $loopdata);
          $ret->PlaceType = localize($loopdata);
         break;
         
         case ('CustomerTypeID'):
          $leftcontent = new Template($this->viewroot, 'left_objects.htt');                                      // load common parent template
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersources"));
          $list = $this->model->getCustomerSources($json->value);
          $loopdata = $this->fillList($list, $loop, 0);
          $ret->SourceID = localize($loopdata);
          
          $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersubtypes"));
          $list = $this->model->getCustomerSubtypes($json->value);
//          ajax_echo_r ($list);
          $loopdata = $this->fillList($list, $loop, 0);
          $ret->CustomerSubtypeID = localize($loopdata);
         break;
        }
        
        echo json_encode($ret);
       break;
       
       
       case ('newMoney'):
//        ajax_echo_r ($json);
        if ($json->ID) {
         $rec = $this->model->getMoney($json->ID);
        } else {
         $rec = new stdClass;
         $rec->TypeID=1;
        }
//        ajax_echo_r ($rec);
        
        $leftcontent = new Template($this->viewroot, "editor_money.htt");
//        $leftcontent->loadloop('block_popupdefault','');
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_typeids"));
        $list = $this->model->getList('moneyrecordtypes');
//        ajax_echo_r ($list);
//        ajax_echo_r ($rec);
        $loopdata = $this->fillList($list, $loop, $rec->TypeID);
        $leftcontent->fillloop('loop_typeids', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_groupids"));
        $list = $this->model->getExpenditureGroups($rec->TypeID);
//         ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop, $rec->GroupID);
        $leftcontent->fillloop('loop_groupids', $loopdata);
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersources_objects"));
        $list = $this->model->getCustomerSources(1);
//        ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop, $rec->SourceID);
        $leftcontent->fillloop('loop_customersources_objects', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersources_customers"));
        $list = $this->model->getCustomerSources(2);
//        ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop, $rec->SourceID);
        $leftcontent->fillloop('loop_customersources_customers', $loopdata);
        
        
        /*
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_months"));
        $list = $this->model->getMonths('money','DateAdded');
        $loopdata = $this->fillList($list, $loop, 0);
        $leftcontent->fillloop('loop_months', $loopdata);
        */
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_objects"));
        $list = $this->model->getObjects(false, 1);
//        ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop, $rec->ObjectID);
        $leftcontent->fillloop('loop_objects', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customers"));
        $list = $this->model->getCustomers();
//        ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop, $rec->CustomerID);
        $leftcontent->fillloop('loop_customers', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
        $list = $this->model->getUsersLst();
        $loopdata = $this->fillList($list, $loop, $rec->UserID);
        $leftcontent->fillloop('loop_users', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placenames"));
        $list = $this->model->getPlaceNames($rec->TypeID);
        $loopdata = $this->fillList($list, $loop, $rec->PlaceName, "PlaceName");
        $leftcontent->fillloop('loop_placenames', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_placetypes"));
        $list = $this->model->getPlaceTypes($rec->TypeID);
        $loopdata = $this->fillList($list, $loop, $rec->PlaceType, "PlaceType");
        $leftcontent->fillloop('loop_placetypes', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_accounts"));
        $list = $this->model->getListOrdered('accounts', 'ID');
        $loopdata = $this->fillList($list, $loop, $rec->AccountID);
        $leftcontent->fillloop('loop_accounts', $loopdata);
        
        
//        $leftcontent
        $vars = $leftcontent->getVariables();
        
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , $rec->$var);
         }
        }
        
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        $leftcontent->processfcb('');
        ajax_echo (localize($leftcontent->output()));
       break;
       
       case ('addMoney'):
        $ret = new stdClass;
//        if (date_create($json->DateAdded)) {
//         ajax_echo_r (date_create($json->DateAdded));
//         echo "test: ".(date_format(date_create($json->DateAdded), 'Y'));
//        }
        
//        return 1;
        if (floatval($json->Value)<=0) {
         $ret->message = $this->getMessage('addmoney_error_novalue');
         $ret->result = 0;
        } elseif ((date_create($json->DateAdded)) && ((int)date_format(date_create($json->DateAdded), 'Y')<1985)) {
         $ret->message = $this->getMessage('addmoney_error_nodate');
         $ret->result = 0;
        } else {
         if ($this->model->addMoney($json)) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
         }
        }
        echo json_encode($ret);
        
       break;
       
       case ('deleteMoney'):
        $this->model->deleteMoney($json);
       break;
       
       
       
       
       case ('newDiary'):
//        ajax_echo_r ($json);
        if ($json->ID) {
         $rec = $this->model->getDiary($json->ID);
        } else {
         $rec = new stdClass;
         $rec->TypeID=1;
        }
        
//        ajax_echo_r ($rec);
        
        $leftcontent = new Template($this->viewroot, "left_diary.htt");
        $leftcontent->loadloop('block_popupdefault','');
        
        $vars = $leftcontent->getVariables();
        
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , brtonl($rec->$var));
         }
        }
        
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        $leftcontent->processfcb('');
        ajax_echo (localize($leftcontent->output()));
       break;
       
       case ('addDiary'):
        $ret = new stdClass;
        if (($json->Description)=='') {
         $ret->message = $this->getMessage('addmoney_error_novalue');
         $ret->result = 0;
        } elseif ((date_create($json->DateTarget)) && ((int)date_format(date_create($json->DateTarget), 'Y')<1985)) {
         $ret->message = $this->getMessage('addmoney_error_nodate');
         $ret->result = 0;
        } else {
         if ($this->model->addDiary($json)) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
         }
        }
        echo json_encode($ret);
        
       break;
       
       case ('deleteDiary'):
        $this->model->deleteDiary($json);
       break;
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       case ('newUser'):
        $leftcontent = new Template($this->viewroot, "left_users.htt");
        $leftcontent->loadloop('block_popupdefault','');
        
        if ($this->userdetails->GroupID==1) {
         $leftcontent->removeloop('block_adminonly2');
        } else {
         $leftcontent->fillloop('block_adminonly2','');
        }
        
        
        if ($json->ID) {
         $rec = $this->model->getUser($json->ID);
         $leftcontent->removeloop('block_editonly');
        } else {
         $rec = new stdClass;
         $rec->TypeID=1;
         $leftcontent->fillloop('block_editonly', '');
        }
        
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_usergroups"));
        $list = $this->model->getList('usergroups');
//        ajax_echo_r ($list);
//        ajax_echo_r ($rec);
        $loopdata = $this->fillList($list, $loop, $rec->GroupID);
        $leftcontent->fillloop('loop_usergroups', $loopdata);
        
        
        
        $leftcontent->fillloop('block_p','');
        
        $vars = $leftcontent->getVariables();
        
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , brtonl($rec->$var));
         }
        }
        
        $leftcontent->processfcb('');
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        ajax_echo (localize($leftcontent->output()));
       break;
       
       case ('addUser'):
        $ret = new stdClass;
        
//        if (($json->Username=='') && ($this->userdetails->ID!=1)) {
//         $ret->message = $this->getMessage('adduser_error_nousername');
//         $ret->result = 0;
//        } elseif (($json->Email=='') && ($this->userdetails->ID!=1)) {
//         $ret->message = $this->getMessage('adduser_error_noemail');
//         $ret->result = 0;
//        } else {
//         ajax_echo_r ($json);
         
         $d = dateAdaptWrite($json->DateBirth);
         if ($d!="1970-01-01") {
          $json->DateBirth = $d;
         }
         
         $d = dateAdaptWrite($json->DateRemoved);
         if ($d!="1970-01-01") {
          $json->DateRemoved = $d;
         }
         
//         ajax_echo_r ($json->DateBirth);
         
         if ($this->model->addUser($json)) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
         }
//        }
        echo json_encode($ret);
       break;
       
       case ('deleteUser'):
        $this->model->deleteUser($json);
       break;
       
       case ('updatePassword'):
        $ret = new stdClass;
        if ($json->Password=='') {
         $ret->message = $this->getMessage('updatepassword_error_nopassword');
         $ret->result = 0;
        } else {
         if ($this->model->updatePassword($json)) {
          $ret->message = $this->getMessage('updatepassword_success');
          $ret->result = 1;
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
         }
        }
        echo json_encode($ret);
       break;
       
       
       
       
       
       
       
       
       case ("savefield"):
        $this->model->saveField($json);
       break;
       
       
       
       
       
       
       
       
       
       
       
       case ('addStatus'):
//        ajax_echo_r ($json);
        
        if ($json->ParentID) {
         if ($json->Address && $json->Comment) {
          $ret = $this->model->addStatus($json);
//          ajax_echo_r ($ret);
         }
         
         $leftcontent = new Template($this->viewroot, "editor_objects.htt");
         $typepicture = array();
         $typepicture[1] = $leftcontent->returnloop('block_typepicture_1');
         $typepicture[2] = $leftcontent->returnloop('block_typepicture_2');
         $typepicture[3] = $leftcontent->returnloop('block_typepicture_3');
         $typepicture[4] = $leftcontent->returnloop('block_typepicture_4');
         $typepicture[5] = $leftcontent->returnloop('block_typepicture_5');
         $typepicture[6] = $leftcontent->returnloop('block_typepicture_6');
         
         $leftcontent->loadloop('block_statuses','');
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_statuses"));
         $list = $this->model->getStatuses($json->ParentID, $json->ParentName);
         foreach ($list as $item) {
          $item->typepicture = $typepicture[$item->TypeID];
         }
         $loopdata = $this->fillList($list, $loop);
         $leftcontent->fillloop('loop_statuses', $loopdata);
         
         $leftcontent->fillloop('block_typepicture_1', '');
         $leftcontent->fillloop('block_typepicture_2', '');
         $leftcontent->fillloop('block_typepicture_3', '');
         $leftcontent->fillloop('block_typepicture_4', '');
         $leftcontent->fillloop('block_typepicture_5', '');
         $leftcontent->fillloop('block_typepicture_6', '');
         
         $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
         $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
         $leftcontent->processfcb('');
         ajax_echo (localize($leftcontent->output()));
        }
       break;
       
       case ('fillSelect'):
        $tmp = new Template($this->viewroot, 'left_objects.htt');
        $t   = new Template($this->viewroot, $tmp->returnloop("loop_addr"));
        
        $req = "http://rosreestr.ru/api/online/regions/".$json->elsid;
        $f = file_get_contents($req);
        $j = json_decode($f);
        
        sortbyname ($j);
        
        $loopitems = $this->fillSelect($t, $j);
//        $t = new Template($this->viewroot, $tmp->returnloop("loop_addr_default"));
//        $loop_addr_default = $t->output();
        
        echo localize($loopitems);
       break;
       
       case ('ownlogin'):
        $key = getvariablereq('key').getvariablereq('k');          // get JSON data from the request
        $login = $this->model->ownLogin($key);
        
        if ($login) {
         $tmp = new Template($this->viewroot, 'redir.htt');
         $tmp->fill('%Link%', '?go=users');
         
         setsecurevariable('userid',$login->ID);
         setsecurevariable('tmpcnt',0         );
         
        } else {
         $tmp = new Template($this->viewroot, 'wrong_key.htt');
        }
        
        echo localize($tmp->output());
       break;
       
       case ('sendEmail'):
        $user = $this->model->getUser($json->ID);
        
        $tmp = new Template($this->viewroot, 'mail1.htt');
        $tmp->fill(  "%LoginKey%", $user->LoginKey  );
        $tmp->fill( "%Firstname%", $user->Firstname );
        
        $mail = localize($tmp->output());
        
        $is_sent = sendmail("Welcome to Alchemy", $mail, $user->Email);
        
        echo "Emails sent: ".$is_sent."<br>";
        
       break;
       
       case ('setUserStatus'):
        if ($json->ID) {
         $sta = $this->model->setUserStatus($this->userdetails->ID, $json->ID);
        }
        $sta = $this->model->getUserStatus($this->userdetails->ID);
        
        $tmp = new Template($this->viewroot, 'adminparent.htt');                                       // load common parent template
        
        $tmp->loadloop('block_status_'.$sta,'');
        
        $tmp->processfcb('');
        $tmp->fill(  '%imgfolder%' , $this->imgfolder                    );
        $tmp->fill(   '%viewroot%' , $this->viewroot                     );
        ajax_echo (localize($tmp->output()));
       break;
       
       
       
       
       case ('getBalance'):
        $bal = $this->model->getBalance();
        
        $tmp = new Template($this->viewroot, 'left_money.htt');                                       // load common parent template
        
        $tmp->loadloop('block_balance');
        $tmp->fill('%balance%', $bal);
        
        $tmp->processfcb('');
        $tmp->fill(  '%imgfolder%' , $this->imgfolder                    );
        $tmp->fill(   '%viewroot%' , $this->viewroot                     );
        ajax_echo (localize($tmp->output()));
       break;
       
       case ('exportToExcel'):
        echo $this->model->backup();
       break;
       
       
       
       case ('deleteAttachment'):
        $json->filename = $json->id;
        if (strpos($json->id,"?")) {
         $json->filename = substr($json->id,0,strpos($json->id,"?"));
        }
        
//        ajax_echo_r ($json);
        
        unlink ($json->filename);
        unlink (str_replace("full_", "thb_", $json->filename));
//        unlink (str_replace("full_", "dst_", $json->filename));
        
        
       case ('fullUploads'):
        $action = "steps";
        $ajax_fileupload_img_str = $this->fillAttachments($action, $this->settings->temppath."/", session_id());
        echo $ajax_fileupload_img_str;
       break;
       
       
       default:                                                                   // for me if I miss something.
        ajax_echo ("Unknown AJAX action: ".$action);
       break;
       
      }
     } else {
      echo "You need to login again.";
      
     }
    } else {                                                                        // for plain HTML (not an Ajax)
     $privileges_this = $this->model->getUserPrivileges($userid);
//     ajax_echo_r ($privileges_this);
//     ajax_echo_r ($this->userdetails);
//     ajax_echo_r ($userid);
     
     $mode = getvariablereq ('mode', 0);
//     echo $mode;
//     echo $userid;
//     echo $this->userdetails->usergroup->ID>0;
//     echo !$this->userdetails->usergroup;
//     echo sizeof($privileges_this);
     
     if (((sizeof($privileges_this)!=0) || ($userid==-1) || ($userid==-2 && !$this->userdetails->usergroup) || ($this->userdetails->usergroup->ID>0)) && ($mode==0)) {         // if the admin wants to see his admin-panel
      
      $id      = getvariablereq('id'     );
      $auxmode = getvariablereq('auxmode');
      
//      echo "isadmin: ".$isadmin;
      
      if ($isadmin) {
       $go      = getvariablereq('go');
       if (!$go) $go="projects";
       
       $tmp = new Template($this->viewroot, 'adminparent.htt');                                      // load common parent template
      } else {
       if ($userid>-1) {
        $go="projects";
       } else {
        $go="login";
       }
       
       $tmp = new Template($this->viewroot, 'managerparent.htt');                                    // load common parent template
      }
      
      $tmp->fill(     "%Title%", $this->userdetails->usergroup->Title   );
      
      $tmp->fillloop('block_status_1','');
      $tmp->fillloop('block_status_2','');
      
      if ($this->userdetails->usergroup->Password) {
       $privileges_all  = $this->model->getUserPrivileges(0);
       
       if (!$privileges_this[$go]) $go=array_keys($privileges_this)[0];
       $allowed = 0;
       
       foreach ($privileges_this as $p) {
        $tmp->removeloop('block_link_'.$p->PageName);
        if ($go == $p->PageName) $allowed = 1;
       }
       
       foreach ($privileges_all as $p) {
        $tmp->fillloop('block_link_'.$p->PageName, '');
       }
       
       if (!$allowed) {
        $go = $privileges_this[0]->PageName;
       }
      }
      if (!$go) $go="projects";
      
      $loop_clean = clone $tmp;
      
      if ($userid>-1) {
       $tmp_user_info = clone $loop_clean;
       $tmp_user_info->loadloop("loop_user_info");
       
       $tmp_user_info->fill(  "%username%",$this->userdetails->Username  );
       $tmp_user_info->fill( "%Firstname%",$this->userdetails->Firstname );
       $tmp_user_info->fill(   "%Surname%",$this->userdetails->Surname   );
       
       $loop_user_auth=$tmp_user_info->output();
       
       $tmp->removeloop("loop_globalparent");
       $tmp->fillloop("loop_user_auth"      , $loop_user_auth );
       $tmp->fillloop("loop_user_info"      , ""              );
       
       
       
       
       if ($isadmin) {
        $leftcontent = new Template($this->viewroot, 'left_'  .$go.'.htt');                                    // load common parent template
        $maincontent = new Template($this->viewroot, 'main_'  .$go.'.htt');                                    // load common parent template
       } else {
        $leftcontent = new Template($this->viewroot, 'left_'  .$go.'_manager.htt');                                    // load common parent template
        $maincontent = new Template($this->viewroot, 'main_'  .$go.'_manager.htt');                                    // load common parent template
       }
       
       if ($this->userdetails->GroupID==1) {
        $leftcontent->removeloop('block_adminonly');
       } else {
        $leftcontent->fillloop('block_adminonly', '');
       }
       
       $leftcontent->fill('%today%', date("Y-m-d"));
       
       switch ($go) {
        case ('dashboard'):
         $maincontent->fillloop('block_dashboard', '');
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
         $list = $this->model->getUsersLst();
         $loopdata = $this->fillList($list, $loop, $rec->UserID);
         $leftcontent->fillloop('loop_users', $loopdata);
         
        break;
        case ('users'):
         
         
         
        break;
        case ('money'):
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_typeids"));
         $list = $this->model->getList('moneyrecordtypes');
         $loopdata = $this->fillList($list, $loop, 0);
         $leftcontent->fillloop('loop_typeids', $loopdata);
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_groupids"));
         $list = $this->model->getExpenditureGroups(0);
         $loopdata = $this->fillList($list, $loop, 0);
         $leftcontent->fillloop('loop_groupids', $loopdata);
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_months"));
         $list = $this->model->getMonths('money','DateAdded');
         $loopdata = $this->fillList($list, $loop, 0);
         $leftcontent->fillloop('loop_months', $loopdata);
         
         $leftcontent->fillloop( 'block_popupdefault','' );
         $leftcontent->fillloop(      'block_balance','' );
        break;
        case ('projects'):
         
         
        break;
       }
       
       $tmp->fill("%leftcontent%"      , $leftcontent->output());                                      // fill the template with actual data
       $tmp->fill("%maincontent%"      , $maincontent->output());                                      // fill the template with actual data
       
       $tmp->fill("%fromajax%"                 , 0                   );
       
       $json = getFromCache('settings');
       
       $tmp->fillloop('block_split_none'       ,'');
       $tmp->fillloop('block_split_vertical'   ,'');
       $tmp->fillloop('block_split_horizontal' ,'');
       
       $tmp->fillloop('loop_table'    ,'');
       $tmp->fillloop('block_no'      ,'');
       $tmp->fillloop('block_norows'  ,'');
       $tmp->fillloop("block_limited" ,"");
       
       $params = new stdClass();
       
       $params->tablename   = $objecttype;
       $params->OfferTypeID = "2";
       
       $tmp->fill("%justlogged%"         , $this->userdetails->JustLogged          );        // fill template
       $tmp->fill("%tableview%"          , $this->imgfolder                  );        // fill the template with actual data
       $tmp->fill("%agentname%"          , $this->userdetails->FirstName." ".$this->userdetails->LastName                );        // fill the template with actual data
       
       
       
       
       
      } else {
       $loop_user_auth=$loop_clean->returnloop("loop_user_auth");
       $tmp->fillloop("loop_globalparent", $loop_user_auth);
      }
      
      if ($isadmin) {
       $this->processstylesheet($hue,'admin');
      } else {
       $this->processstylesheet($hue,'manager');
      }
      
      $tmp->fill("%theme%"              , $this->userdetails->Theme                 );
      $tmp->fill('%objecttype%'         , $objecttype                         );
      $tmp->fill('%SmoothAnimation%'    , $SmoothAnimation                    );
      $tmp->fill('%auxmode%'            , $auxmode                            );
      
      if ((int)$this->userdetails->AccountType!=1) {
       $tmp->fillloop("adminpanellink","");
      }
      $tmp->fillloop("block_link","");
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      $tmp->fillloop(     "block_no","" );
      $tmp->fillloop( "block_norows","" );
      $tmp->fillloop(   "block_dir0","" );
      $tmp->fillloop(   "block_dir1","" );
      
      
      
      
      $tmp->fill( "%projectname%", $this->settings->projectname    );        // fill the template with actual data
      $tmp->fill(         '%go%' , $go                                 );
      $tmp->fill(         '%id%' , $id                                 );
      $tmp->processfcb('');
      
      $tmp = $this->fillStricts($tmp);
      
      $tmp->fill(  '%imgfolder%' , $this->imgfolder                    );
      $tmp->fill(   '%viewroot%' , $this->viewroot                     );
      
      
      echo localize($tmp->output());                                              // show it
     } else {
      $tmp = new Template($this->viewroot, 'mainparent.htt');                                       // load common parent template
      $tmp->fill(    "%username%", $this->userdetails->Username         );
      $tmp->fill(   "%Firstname%", $this->projectdetails->Firstname     );
      $tmp->fill(     "%Surname%", $this->projectdetails->Surname       );
      $tmp->fill(          "%ID%", $this->projectdetails->ID            );
      $tmp->fill( "%OrderNumber%", $this->projectdetails->OrderNumber   );
      
//      ajax_echo_r ($this->projectdetails);
      
      $tmp_loop_project = $tmp->returnloop("loop_project");
      $loop_project = new Template($this->viewroot, $tmp_loop_project);
      
//      ajax_echo_r ($this->userdetails);
      if ($this->projectdetails) {
       $projects = array();
       $projects[] = $this->projectdetails;
      } else {
       $projects = $this->model->getProjectsFromCustomer($this->userdetails->ID);
      }
//      ajax_echo_r ($projects);
//      $projects = $this->model->getProjectPictures($projects);
      
      if (!$json) $json = new stdClass;
      $json->IsFull = $this->getIsFull();
      
      $loop_projects = "";
      foreach ($projects as $project) {
       $loop_project->reload();
       $loop_project->fill('%Title%', $project->Street);
       
       $loopdata = $this->getProjectSteps($project, $tmp_loop_project);
       $loop_project->fillloop('loop_step', $loopdata);
       $loop_project->fillloop('loop_stepa', '');
       
       
       $loop_projects.=$loop_project->output();
      }
      
      
      $tmp->fillloop('loop_project', $loop_projects);
      
      
      
      $tmp->fill(         '%go%' , $go                                 );
      $tmp->fill(         '%id%' , $id                                 );
      $tmp->processfcb('');
      
      $tmp = $this->fillStricts($tmp);
      
      $this->processstylesheet($hue,'style');
      $tmp->fill(  '%imgfolder%' , $this->imgfolder                    );
      $tmp->fill(   '%viewroot%' , $this->viewroot                     );
      
      echo localize($tmp->output());                                               // show it
     }
    }
   }
  }
Example #2
0
  function importtable($json,$txt) {
   $t = array_keys(get_object_vars($json));
   $t=$t[0];
 //  echo_r ($t);
   $tablespreview = 0; //(1==2) || !(($t=='ApartSell')||($t=='ArendSell')||($t=='RoomsSell'));
   
   global $fieldid;
   $fieldid = array();
   
   $thistable = $json->$t;
 //  ajax_echo_r ($thistable); 
   
   if ($tablespreview) {
    echo "<hr><h3>".$t."</h3>";
   }
   
   
   
   switch ($t) {
    case ('Orders'):
     $thissqltablename = 'orders';
     
 //    echo "tablespreview: ".$tablespreview."<br>";
//     $sql_l_tr  ="DELETE `locationinfo`.* FROM `locationinfo`,`lands`  WHERE (`locationinfo`.`IsTemplate` = 0) AND (`locationinfo`.`ID`=`lands`.`LocationID`) ; ";
     $sql_b_tr  ="DELETE FROM `".$thissqltablename."`   WHERE `SourceID` = 2 ; ";
     
//     $r=$this->db->exec($sql_l_tr);
//     $mar=$r->rowsAffected;
//     echo_log ("lands->locationinfo items deleted: ".$mar);
     
     $r=$this->db->exec($sql_b_tr);
     $mar=$r->rowsAffected;
     echo_log ($thissqltablename." items deleted: ".$mar);
     
     if ($tablespreview) {
      echo "<table border=\"1\" borderColor=\"\" cellpadding=\"0\" cellspacing=\"0\">\n";
      echo "<tr> ";
     }
     
     // -- print field name
     for ($j=0; $j<=sizeof($thistable->fields); $j++) {
      if ($tablespreview) {
       echo "<th  align=\"left\" bgcolor=\"#CCCCCC\" > <font color=\"#990000\"> ";
       echo($thistable->fields[$j]);
       echo "</font> </th>";
      }
      $fieldid[$thistable->fields[$j]] = $j;
     }
     $j=$j-1;
     
     $c  = 0;
     $ca = 0;
     
     $mar_b=0;
     do { // getting data
      $rowid = "row".$c;
      $result = $thistable->$rowid;
      
      $items=array();
      
      $items['DateAdded']        = dateAdaptWrite(_odbc_result($result, 'OrderDate'));
      $items['SourceID']         = 2;
      $items['SrcID']            = _odbc_result($result, 'OrderID'          );
      $items['OrderNo']          = _odbc_result($result, 'OrderNo'          );
      $items['CustomerSrcID']    = _odbc_result($result, 'CustomerID'       );
      $items['Value']            = _odbc_result($result, 'DeclaimValue'     );
      
//      $items['DateCreated']      = convertfield($result, 'ZDATE'                  ,0);
      
      $keys   = "";
      $values = "";
      
      foreach ($items as $k => $v) {
       if ($keys) $keys.=", ";
       $keys.="`".$k."`";
       
       if ($values) $values.=", ";
       $values.="'".$v."'";
      }
      
      $sql_this_b="INSERT INTO `".$thissqltablename."` 
       (
      ".$keys."
       ) VALUES (
      ".$values."
       ) ; 
      ";
      
      $r=$this->db->exec($sql_this_b);
      $lastid_b=$r->lastInsertID;
      if ($r->rowsAffected<1) {
       echo((($tags_enabled)?"<p>":"").$sql_this_b.": ".mysql_error().(($tags_enabled)?"</p>":"\n"));
       break;
      } else {
       $mar_b += 1;
      }
      
      $c++;
      if ($tablespreview) {
       if ($c%2==0)
        echo("<tr bgcolor=\"#d0d0d0\">\n");
       else
        echo "<tr bgcolor=\"#eeeeee\">\n";
      }
      for ($i=1; $i<=sizeof($thistable->fields); $i++) {
       //        $thissql.="'".iconv("windows-1251", "UTF-8", odbc_result($result, $i))."'";
       if ($tablespreview) {
        echo("<td>");
        echo(_odbc_result($result, $i));
        echo "</td>";
       }
       if ($i%$j==0) {
        $nrows+=1; // counting no of rows    
       }
      }
  //    $res=odbc_fetch_row($result);
      if ($tablespreview) {
       echo "</tr>";
      }
     } while ($result);
     $thissql.=";";
     if ($tablespreview) {
      echo "</td> </tr>\n";
      echo "</table >\n<br>";
     }
//     echo (($tags_enabled)?"<p>":"")."locationinfo items added: ".$mar_l.(($tags_enabled)?"</p>":"<br>\r");
     echo (($tags_enabled)?"<p>":"").$thissqltablename." items added: "       .$mar_b.(($tags_enabled)?"</p>":"<br>\r");
     
    break;
    
    case ('Customers'):
     $thissqltablename = 'customers';
     
 //    echo "tablespreview: ".$tablespreview."<br>";
//     $sql_l_tr  ="DELETE `locationinfo`.* FROM `locationinfo`,`lands`  WHERE (`locationinfo`.`IsTemplate` = 0) AND (`locationinfo`.`ID`=`lands`.`LocationID`) ; ";
     $sql_b_tr  ="DELETE FROM `".$thissqltablename."`   WHERE `SourceID` = 2 ; ";
     
//     $r=$this->db->exec($sql_l_tr);
//     $mar=$r->rowsAffected;
//     echo_log ("lands->locationinfo items deleted: ".$mar);
     
     $r=$this->db->exec($sql_b_tr);
     $mar=$r->rowsAffected;
     echo_log ($thissqltablename." items deleted: ".$mar);
     
     if ($tablespreview) {
      echo "<table border=\"1\" borderColor=\"\" cellpadding=\"0\" cellspacing=\"0\">\n";
      echo "<tr> ";
     }
     
     // -- print field name
     for ($j=0; $j<=sizeof($thistable->fields); $j++) {
      if ($tablespreview) {
       echo "<th  align=\"left\" bgcolor=\"#CCCCCC\" > <font color=\"#990000\"> ";
       echo($thistable->fields[$j]);
       echo "</font> </th>";
      }
      $fieldid[$thistable->fields[$j]] = $j;
     }
     $j=$j-1;
     
     $c  = 0;
     $ca = 0;
     
     $mar_b=0;
     do { // getting data
      $rowid = "row".$c;
      $result = $thistable->$rowid;
      
      $items=array();
      
//      $items['DateTarget']       = dateAdaptWrite(_odbc_result($result, 'OrderDate'));
      $items['SourceID']         = 2;
      $items['SrcID']            = _odbc_result($result, 'CustomerID'          );
      $items['Name']             = _odbc_result($result, 'custName'          );
      $items['Country']          = _odbc_result($result, 'custCountry'       );
      $items['PostalCode']       = _odbc_result($result, 'custPostalCode'     );
      $items['Region']           = _odbc_result($result, 'custRegion'     );
      $items['City']             = _odbc_result($result, 'custCity'     );
      $items['Address']          = _odbc_result($result, 'custAddress'     );
      $items['Email']            = _odbc_result($result, 'custEmail'     );
      $items['Phone']            = _odbc_result($result, 'custPhone'     );
      $items['Metro']            = _odbc_result($result, 'custUndergrSt'     );
      $items['Entrance']         = _odbc_result($result, 'custEntranceNum'     );
      $items['Intercom']         = _odbc_result($result, 'custIntercomCode'     );
      
//      $items['DateCreated']      = convertfield($result, 'ZDATE'                  ,0);
      
      $keys   = "";
      $values = "";
      
      foreach ($items as $k => $v) {
       if ($keys) $keys.=", ";
       $keys.="`".$k."`";
       
       if ($values) $values.=", ";
       $values.="'".$v."'";
      }
      
      $sql_this_b="INSERT INTO `".$thissqltablename."` 
       (
      ".$keys."
       ) VALUES (
      ".$values."
       ) ; 
      ";
      
      $r=$this->db->exec($sql_this_b);
      $lastid_b=$r->lastInsertID;
      if ($r->rowsAffected<1) {
       echo((($tags_enabled)?"<p>":"").$sql_this_b.": ".mysql_error().(($tags_enabled)?"</p>":"\n"));
       break;
      } else {
       $mar_b += 1;
      }
      
      $c++;
      if ($tablespreview) {
       if ($c%2==0)
        echo("<tr bgcolor=\"#d0d0d0\">\n");
       else
        echo "<tr bgcolor=\"#eeeeee\">\n";
      }
      for ($i=1; $i<=sizeof($thistable->fields); $i++) {
       //        $thissql.="'".iconv("windows-1251", "UTF-8", odbc_result($result, $i))."'";
       if ($tablespreview) {
        echo("<td>");
        echo(_odbc_result($result, $i));
        echo "</td>";
       }
       if ($i%$j==0) {
        $nrows+=1; // counting no of rows    
       }
      }
  //    $res=odbc_fetch_row($result);
      if ($tablespreview) {
       echo "</tr>";
      }
     } while ($result);
     $thissql.=";";
     if ($tablespreview) {
      echo "</td> </tr>\n";
      echo "</table >\n<br>";
     }
//     echo (($tags_enabled)?"<p>":"")."locationinfo items added: ".$mar_l.(($tags_enabled)?"</p>":"<br>\r");
     echo (($tags_enabled)?"<p>":"").$thissqltablename." items added: "       .$mar_b.(($tags_enabled)?"</p>":"<br>\r");
     
    break;
    
    
    
    
    case ('Money'):
     $thissqltablename = 'money';
     
 //    echo "tablespreview: ".$tablespreview."<br>";
//     $sql_l_tr  ="DELETE `locationinfo`.* FROM `locationinfo`,`lands`  WHERE (`locationinfo`.`IsTemplate` = 0) AND (`locationinfo`.`ID`=`lands`.`LocationID`) ; ";
     $sql_b_tr  ="DELETE FROM `".$thissqltablename."`   WHERE `SourceID` = 0 ; ";
     
//     $r=$this->db->exec($sql_l_tr);
//     $mar=$r->rowsAffected;
//     echo_log ("lands->locationinfo items deleted: ".$mar);
     
     $r=$this->db->exec($sql_b_tr);
     $mar=$r->rowsAffected;
     echo_log ($thissqltablename." items deleted: ".$mar);
     
     if ($tablespreview) {
      echo "<table border=\"1\" borderColor=\"\" cellpadding=\"0\" cellspacing=\"0\">\n";
      echo "<tr> ";
     }
     
     // -- print field name
     for ($j=0; $j<=sizeof($thistable->fields); $j++) {
      if ($tablespreview) {
       echo "<th  align=\"left\" bgcolor=\"#CCCCCC\" > <font color=\"#990000\"> ";
       echo($thistable->fields[$j]);
       echo "</font> </th>";
      }
      $fieldid[$thistable->fields[$j]] = $j;
     }
     $j=$j-1;
     
     $c  = 0;
     $ca = 0;
     
     $mar_b=0;
     do { // getting data
      $rowid = "row".$c;
      $result = $thistable->$rowid;
      
      $items=array();
      
      $items['DateAdded']        = _odbc_result($result, 'DateTime'         );
      $items['TypeID']           = _odbc_result($result, 'Type'             );
      $items['Value']            = _odbc_result($result, 'Value'            );
      $items['Content']          = _odbc_result($result, 'Content'          );
      $items['ProjectID']        = _odbc_result($result, 'ProjectID'        );
      $items['GroupID']          = _odbc_result($result, 'Group'            );
      $items['PlaceName']        = _odbc_result($result, 'PlaceName'        );
      $items['PlaceType']        = _odbc_result($result, 'PlaceType'        );
//      $items['DateEdited']       = 'NOW()';
      $items['SourceID']         = '0';
      
//      $items['DateCreated']      = convertfield($result, 'ZDATE'                  ,0);
      
      $keys   = "";
      $values = "";
      
      foreach ($items as $k => $v) {
       if ($keys) $keys.=", ";
       $keys.="`".$k."`";
       
       if ($values) $values.=", ";
       $values.="'".$v."'";
      }
      
      $sql_this_b="INSERT INTO `".$thissqltablename."` 
       (
      ".$keys."
       ) VALUES (
      ".$values."
       ) ; 
      ";
      
      $r=$this->db->exec($sql_this_b);
      $lastid_b=$r->lastInsertID;
      if ($r->rowsAffected<1) {
       echo((($tags_enabled)?"<p>":"").$sql_this_b.": ".mysql_error().(($tags_enabled)?"</p>":"\n"));
       break;
      } else {
       $mar_b += 1;
      }
      
      $c++;
      if ($tablespreview) {
       if ($c%2==0)
        echo("<tr bgcolor=\"#d0d0d0\">\n");
       else
        echo "<tr bgcolor=\"#eeeeee\">\n";
      }
      for ($i=1; $i<=sizeof($thistable->fields); $i++) {
       //        $thissql.="'".iconv("windows-1251", "UTF-8", odbc_result($result, $i))."'";
       if ($tablespreview) {
        echo("<td>");
        echo(_odbc_result($result, $i));
        echo "</td>";
       }
       if ($i%$j==0) {
        $nrows+=1; // counting no of rows    
       }
      }
  //    $res=odbc_fetch_row($result);
      if ($tablespreview) {
       echo "</tr>";
      }
     } while ($result);
     $thissql.=";";
     if ($tablespreview) {
      echo "</td> </tr>\n";
      echo "</table >\n<br>";
     }
//     echo (($tags_enabled)?"<p>":"")."locationinfo items added: ".$mar_l.(($tags_enabled)?"</p>":"<br>\r");
     echo (($tags_enabled)?"<p>":"").$thissqltablename." items added: "       .$mar_b.(($tags_enabled)?"</p>":"<br>\r");
     
    break;
    
    case ('Projects'):
     
     $thissqltablename = 'projects';
     
 //    echo "tablespreview: ".$tablespreview."<br>";
//     $sql_l_tr  ="DELETE `locationinfo`.* FROM `locationinfo`,`lands`  WHERE (`locationinfo`.`IsTemplate` = 0) AND (`locationinfo`.`ID`=`lands`.`LocationID`) ; ";
     $sql_b_tr  ="DELETE FROM `".$thissqltablename."`   WHERE `SourceID` = 0 ; ";
     
//     $r=$this->db->exec($sql_l_tr);
//     $mar=$r->rowsAffected;
//     echo_log ("lands->locationinfo items deleted: ".$mar);
     
     $r=$this->db->exec($sql_b_tr);
     $mar=$r->rowsAffected;
     echo_log ($thissqltablename." items deleted: ".$mar);
     
     if ($tablespreview) {
      echo "<table border=\"1\" borderColor=\"\" cellpadding=\"0\" cellspacing=\"0\">\n";
      echo "<tr> ";
     }
     
     // -- print field name
     for ($j=0; $j<=sizeof($thistable->fields); $j++) {
      if ($tablespreview) {
       echo "<th  align=\"left\" bgcolor=\"#CCCCCC\" > <font color=\"#990000\"> ";
       echo($thistable->fields[$j]);
       echo "</font> </th>";
      }
      $fieldid[$thistable->fields[$j]] = $j;
     }
     $j=$j-1;
     
     $c  = 0;
     $ca = 0;
     
     $mar_b=0;
     do { // getting data
      $rowid = "row".$c;
      $result = $thistable->$rowid;
      
      $items=array();
      
      $items['ID']               = _odbc_result($result, 'ID'               );
      $items['Title']            = _odbc_result($result, 'ProjectName'      );
      $items['DateAdded']        = _odbc_result($result, 'DateStarted'      );
      $items['DateFinished']     = _odbc_result($result, 'DateFinished'     );
      $items['AddedBy']          = '1';
      $items['Description']      = _odbc_result($result, 'Description'      );
      $items['Cost']             = _odbc_result($result, 'Cost'             );
      $items['CustomerID']       = _odbc_result($result, 'Customer'         );
      $items['TypeID']           = _odbc_result($result, 'Type'             );
//      $items['DateEdited']       = 'NOW()';
      $items['SourceID']         = '0';
      
//      $items['DateCreated']      = convertfield($result, 'ZDATE'                  ,0);
      
      $keys   = "";
      $values = "";
      
      foreach ($items as $k => $v) {
       if ($keys) $keys.=", ";
       $keys.="`".$k."`";
       
       if ($values) $values.=", ";
       $values.="'".$v."'";
      }
      
      $sql_this_b="INSERT INTO `".$thissqltablename."` 
       (
      ".$keys."
       ) VALUES (
      ".$values."
       ) ; 
      ";
      
      $r=$this->db->exec($sql_this_b);
      $lastid_b=$r->lastInsertID;
      if ($r->rowsAffected<1) {
       echo((($tags_enabled)?"<p>":"").$sql_this_b.": ".mysql_error().(($tags_enabled)?"</p>":"\n"));
       break;
      } else {
       $mar_b += 1;
      }
      
      $c++;
      if ($tablespreview) {
       if ($c%2==0)
        echo("<tr bgcolor=\"#d0d0d0\">\n");
       else
        echo "<tr bgcolor=\"#eeeeee\">\n";
      }
      for ($i=1; $i<=sizeof($thistable->fields); $i++) {
       //        $thissql.="'".iconv("windows-1251", "UTF-8", odbc_result($result, $i))."'";
       if ($tablespreview) {
        echo("<td>");
        echo(_odbc_result($result, $i));
        echo "</td>";
       }
       if ($i%$j==0) {
        $nrows+=1; // counting no of rows    
       }
      }
  //    $res=odbc_fetch_row($result);
      if ($tablespreview) {
       echo "</tr>";
      }
     } while ($result);
     $thissql.=";";
     if ($tablespreview) {
      echo "</td> </tr>\n";
      echo "</table >\n<br>";
     }
//     echo (($tags_enabled)?"<p>":"")."locationinfo items added: ".$mar_l.(($tags_enabled)?"</p>":"<br>\r");
     echo (($tags_enabled)?"<p>":"").$thissqltablename." items added: "       .$mar_b.(($tags_enabled)?"</p>":"<br>\r");
     
    break;
    
    
    default:
     echo_log ('This table ('.$t.') is not supported by converter.');
    break;
    
   }
  }