Example #1
0
function mysql_query_cache($sql, $linkIdentifier = false, $timeout = 4)
{
    //首先调用上面的getCache函数,如果返回值不为false的话,就说明是从memcached服务器获取的数据
    //如果返回false,此时就需要直接从数据库中获取数据了。
    //需要注意的是这里使用操作的命令加上sql语句的md5码作为一个特定的key,可能大家觉得使用数据项的
    //名称作为key会比较自然一点。运行memcached加上"-vv"参数,并且不作为daemon运行的话,可以看见
    //memcached处理时输出的相关信息
    if (!($cache = getCache(md5("mysql_query" . $sql)))) {
        $cache = false;
        $r = $linkIdentifier != false ? mysql_query($sql, $linkIdentifier) : mysql_query($sql);
        //读取数据库,并将结果放入$cache数组中
        if (is_resource($r) && ($rows = mysql_num_rows($r)) != 0) {
            for ($i = 0; $i < $rows; $i++) {
                $fields = mysql_num_fields($r);
                $row = mysql_fetch_array($r);
                for ($j = 0; $j < $fields; $j++) {
                    if ($i == 0) {
                        $columns[$j] = mysql_field_name($r, $j);
                    }
                    $cache[$i][$columns[$j]] = $row[$j];
                }
            }
            //将数据放入memcached服务器中,如果memcached服务器没有开的话,此语句什么也不会做
            //如果开启了服务器的话,数据将会被缓存到memcached服务器中
            if (!setCache(md5("mysql_query" . $sql), $cache, $timeout)) {
                # If we get here, there isn’t a memcache daemon running or responding
            }
        }
    }
    return $cache;
}
Example #2
0
  /**
   * 产品信息缓存
   */
  function SetDetail(){
    $ids = $_REQUEST['id'];
	$data['id'] = array('in',explode(',',$ids));
    $list = $this->db->where($data)->select();
	$pmodel = M('Pic');
	C('DATA_CACHE_TYPE','File');
	foreach($list as $vo){
		$p_data['source'] = 'Product';
		$p_data['sourceid'] = $vo['id'];
		$pics = $pmodel->field('domain,filepath,is_thumb')->where($p_data)->select();
		$options['dir'] = get_dir($vo['id']);
		$vo['imgs'] = $pics;
		setCache('detail',$vo,0,$options);
	}
	  foreach($list as $array){
	    $data[$array['id']] = $array;
	  }
	  if($_POST['from']=='self'){
	    return $data;exit;
	  }
	  $return = $this->SetCache('detail',$vo);
	  if($return){
	    $msg['error_code'] = 0;
	  }else{
	    $msg['error_code'] = 8002;
	  }
	  if($_POST['status'])$msg['data'] = $data;
	  echo json_encode($msg);exit;
  }
Example #3
0
/**
 * 取得今天要顯示的圖片
 * @return 圖片的完整路徑 (含檔名)
 *     FALSE: 找不到圖片
 **/
function getTodayImage($orgimg)
{
    global $chroot, $imgext;
    $dir = $chroot;
    $now = date('Ymd');
    $imglst = array();
    foreach (array_keys($imgext) as $ext) {
        foreach (glob($dir . "*.{$ext}") as $filename) {
            $name = basename($filename, ".{$ext}");
            if (!is_numeric($name) || strlen($name) != 8) {
                continue;
            }
            if (strcmp($now, $name) < 0) {
                continue;
            }
            $imglst[$name] = $filename;
        }
    }
    if (count($imglst) <= 0) {
        setCache($orgimg);
        return FALSE;
    } else {
        krsort($imglst);
        $img = array_shift($imglst);
        setCache($img);
        return $img;
    }
}
Example #4
0
function mysql_query_cache($sql, $linkIdentifier = false, $timeout = 4)
{
    $mysqli = $GLOBALS['mysqli'];
    //首先调用上面的getCache函数,如果返回值不为false的话,就说明是从memcached服务器获取的数据
    //如果返回false,此时就需要直接从数据库中获取数据了。
    //需要注意的是这里使用操作的命令加上sql语句的md5码作为一个特定的key,可能大家觉得使用数据项的
    //名称作为key会比较自然一点。运行memcached加上"-vv"参数,并且不作为daemon运行的话,可以看见
    //memcached处理时输出的相关信息
    if (!($cache = getCache(md5("mysql_query" . $sql)))) {
        $cache = false;
        $r = mysqli_query($mysqli, $sql);
        $fields = mysqli_fetch_fields($r);
        //读取数据库,并将结果放入$cache数组中
        for ($i = 0; $row = mysqli_fetch_array($r); $i++) {
            $j = 0;
            foreach ($fields as $val) {
                $cache[$i][$val->name] = $row[$j];
                $j++;
            }
        }
        //将数据放入memcached服务器中,如果memcached服务器没有开的话,此语句什么也不会做
        //如果开启了服务器的话,数据将会被缓存到memcached服务器中
        if (!setCache(md5("mysql_query" . $sql), $cache, $timeout)) {
            # If we get here, there isn’t a memcache daemon running or responding
            echo "apt-get install memcached";
        }
    }
    return $cache;
}
    public function run()
    {
        global $_FANWE;
        $root = array();
        $root['return'] = 1;
        $key = 'm/sharecate';
        $cache_list = getCache($key);
        if ($cache_list !== NULL || TIME_UTC - $cache_list['cache_time'] > 600) {
            $cate_list = array();
            $min_time = $this->getQuarterMinTime();
            $max_time = getTodayTime();
            FanweService::instance()->cache->loadCache('albums');
            $album_cate = $_FANWE['cache']['albums']['category'];
            foreach ($album_cate as $k => $v) {
                $cate = array();
                $cate['cate_id'] = $v['id'];
                $cate['cate_name'] = $v['name'];
                $cate['short_name'] = $v['name'];
                $cate['cate_code'] = $v['cate_code'];
                $cate['cate_icon'] = FS("Image")->getImageUrl($v['img'], 2);
                $cate['desc'] = $v['desc'];
                $cate['create_time'] = $v['create_time'];
                //获取本季分享数量
                $share_count_sql = 'select count(DISTINCT s.share_id) from ' . FDB::table("share") . ' as s 
					INNER JOIN ' . FDB::table("album_share") . ' as al on s.share_id = al.share_id where al.cid = ' . $v['id'] . " and s.day_time >= {$min_time} AND s.day_time <= {$max_time} ";
                $cate['share_count'] = FDB::resultFirst($share_count_sql);
                $cate['img_tags'] = array();
                $img_size = 320;
                $sql = 'select s.share_id,al.title,sp.img from ' . FDB::table("share") . ' as s
					INNER JOIN ' . FDB::table("album_share") . ' as als ON s.share_id = als.share_id 
					INNER JOIN ' . FDB::table("album") . ' as al ON als.album_id = al.id
					INNER JOIN ' . FDB::table("share_photo") . " as sp ON s.share_id = sp.share_id \r\n\t\t\t\t\tWHERE s.day_time >= {$min_time} AND s.day_time <= {$max_time} AND als.cid = " . $v['id'] . " GROUP BY s.share_id ORDER BY s.share_id desc limit 5";
                $res = FDB::query($sql);
                while ($data = FDB::fetch($res)) {
                    $img_data = array();
                    $img_data['share_id'] = $data['share_id'];
                    $img_data['tag_name'] = $data['title'];
                    $img_data['is_tag'] = 0;
                    $img_data['img'] = FS("Image")->getImageUrl(getImgName($data['img'], $img_size, $img_size, 1, true), 2);
                    $img_data['url_tag'] = urlencode($data['title']);
                    $cate['img_tags'][] = $img_data;
                    $img_size = 160;
                }
                $cate['txt_tags'] = array();
                $cate_list[] = $cate;
            }
            $cache_list = array();
            $cache_list['cate_list'] = $cate_list;
            $cache_list['cache_time'] = TIME_UTC;
            setCache($key, $cache_list);
        } else {
            $cate_list = $cache_list['cate_list'];
        }
        $root['item'] = $cate_list;
        m_display($root);
    }
function m_express($content)
{
    global $_FANWE;
    $express = getCache('m_emotion_express_cache');
    //缓存过的表情hash
    if (!$express) {
        $express_rs = FDB::fetchAll("select `emotion`,concat('" . $_FANWE['site_url'] . "public/expression/',`type`,'/',`filename`) as fname from " . FDB::table('expression'));
        foreach ($express_rs as $k => $row) {
            $express[0][] = $row['emotion'];
            $express[1][] = "<img src='" . $row['fname'] . "' title='" . preg_replace("/[\\[\\]]/", '', $row['emotion']) . "' />";
        }
        setCache('m_emotion_express_cache', $express);
    }
    $content = str_replace($express[0], $express[1], $content);
    $parse_user = array();
    preg_match_all("/@([^\f\n\r\t\v@<> ]{2,20}?)(?:\\:| )/", $content, $users);
    if (!empty($users[1])) {
        $patterns = array();
        $replace = array();
        $users = array_unique($users[1]);
        $arr = array();
        foreach ($users as $user) {
            if (!empty($user)) {
                $arr[] = addslashes($user);
            }
        }
        $res = FDB::query('SELECT uid,user_name
			FROM ' . FDB::table('user') . '
			WHERE user_name ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            $parse_user[$data['user_name']] = $data['uid'];
        }
    }
    $parse_events = array();
    preg_match_all("/#([^\f\n\r\t\v]{1,80}?)#/", $content, $events);
    if (!empty($events[1])) {
        $patterns = array();
        $replace = array();
        $events = array_unique($events[1]);
        $arr = array();
        foreach ($events as $event) {
            if (!empty($event)) {
                $arr[] = addslashes($event);
            }
        }
        $res = FDB::query('SELECT id,title
			FROM ' . FDB::table('event') . '
			WHERE title ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            $parse_events[$data['title']] = $data['id'];
        }
    }
    return array("users" => $parse_user, "events" => $parse_events);
}
Example #7
0
 function getSiteByToken($token)
 {
     $cacheName = 'siteByToken' . $token;
     $cache = getCache($cacheName);
     if ($cache) {
         return unserialize($cache);
     } else {
         $site = $this->get_one(array('token' => $token));
         setCache($cacheName, serialize($site));
         return $site;
     }
 }
Example #8
0
 public function getContentPictures($id)
 {
     $id = intval($id);
     $crt = getCache('contentPictures' . $id);
     if ($crt) {
         return unserialize($crt);
     } else {
         $ps = $this->get_results('*', '', array('contentid' => $id), 'taxis ASC');
         setCache('contentPictures' . $id, serialize($ps));
         return $ps;
     }
 }
 function keywords()
 {
     $cacheName = 'c_keywords';
     $cache = getCache($cacheName);
     if ($cache) {
         return unserialize($cache);
     } else {
         $keywords = $this->select();
         setCache($cacheName, serialize($keywords));
         return $keywords;
     }
 }
Example #10
0
 public function getCompany($token)
 {
     $token = htmlspecialchars($token, ENT_QUOTES);
     $crt = getCache('company_' . $token);
     if (0 && $crt) {
         return unserialize($crt);
     } else {
         $ps = $this->get_one(array('token' => $token, 'isbranch' => 0));
         setCache('company_' . $token, serialize($ps));
         return $ps;
     }
 }
Example #11
0
 /**
  * 生成缓存
  */
 protected function giveCache()
 {
     $model = D('Config');
     $wdata['status'] = 1;
     $list = $model->where($wdata)->select();
     foreach ($list as $array) {
         $data[$array['key']] = $array['val'];
         $data[$array['key']] = $array['val'];
     }
     //mk_dir(C('DATA_CACHE_PATH').'/config/');
     //F('list',$data,C('DATA_CACHE_PATH').'/config/');
     setCache('list', $data);
 }
Example #12
0
 public function navChannels($siteid)
 {
     $siteid = intval($siteid);
     $cacheName = 'navChannels' . $siteid;
     $cache = getCache($cacheName);
     if ($cache) {
         return unserialize($cache);
     } else {
         $channels = $this->select(array('site' => $siteid, 'isnav' => 1), '*', '', 'taxis ASC');
         setCache($cacheName, serialize($channels));
         return $channels;
     }
 }
Example #13
0
 /**
  * 生成缓存
  */
 function GiveCache()
 {
     $model = D('Links');
     $wdata['status'] = 1;
     $list = $model->where($wdata)->select();
     /*
     if($list)F('list',$list,C('DATA_CACHE_PATH').'/links/');
     */
     if ($list) {
         setCache('list', $list);
     }
     if ($_GET['re']) {
         $this->success('更新完成!');
     }
 }
Example #14
0
  function extmail() {
   $req = new stdClass;
   $req->Get  = $_GET;
   $req->Post = $_POST;
   
//   ajax_echo_r ($req);
   
   $subject       = getvariablereq('subject');
   $mail_template = getvariablereq('mail_template');
   $email         = getvariablereq('email');
   $from_name     = getvariablereq('from_name');
   $from_mail     = getvariablereq('from_mail');
   
   $ret = sendmail ($subject, $mail_template, $email, $from_name, $from_mail);
   $req->Result = $ret;
   setCache('request-'.date('Y-m-d-H-i-s'), $req);
   echo json_encode($req);
  }
 public function run()
 {
     global $_FANWE;
     $root = array();
     $root['return'] = 1;
     $uid = (int) $_FANWE['requestData']['uid'];
     $cid = (int) $_FANWE['requestData']['cid'];
     if ($uid > 0) {
         if (!FS('User')->getUserExists($uid)) {
             $uid = 0;
         }
     }
     if ($cid == 0) {
         $uid == 0;
     }
     if ($uid == 0) {
         $root['info'] = "请先登录";
         m_display($root);
     }
     $key = 'm/useralbum' . $uid . $cid;
     $album_list = getCache($key);
     if ($album_list !== NULL || TIME_UTC - $cache_list['cache_time'] > 600) {
         $album_list = array();
         $sql = 'select id,title from ' . FDB::table('album') . " where cid = " . $cid . " and uid = " . $uid;
         $res = FDB::query($sql);
         $indx = 0;
         while ($data = FDB::fetch($res)) {
             $album_list[$indx] = $data;
             $indx++;
         }
         $cache_list = array();
         $cache_list['album_list'] = $album_list;
         $cache_list['cache_time'] = TIME_UTC;
         setCache($key, $cache_list);
     } else {
         $album_list = $cache_list['album_list'];
     }
     $root['item'] = $album_list;
     m_display($root);
 }
Example #16
0
function mysql_query_cache($sql, $linkIdentifier = false, $timeout = 60)
{
    if (($cache = getCache(md5("mysql_query" . $sql))) !== false) {
        $cache = false;
        $r = $linkIdentifier !== false ? mysql_query($sql, $linkIdentifier) : mysql_query($sql);
        if (is_resource($r) && ($rows = mysql_num_rows($r)) !== 0) {
            for ($i = 0; $i < $rows; $i++) {
                $fields = mysql_num_fields($r);
                $row = mysql_fetch_array($r);
                for ($j = 0; $j < $fields; $j++) {
                    if ($i === 0) {
                        $columns[$j] = mysql_field_name($r, $j);
                    }
                    $cache[$i][$columns[$j]] = $row[$j];
                }
            }
            if (!setCache(md5("mysql_query" . $sql), $cache, $timeout)) {
                # Error en Memcache
            }
        }
    }
    return $cache;
}
function getBlockedUserIDs($receive = 0, $send = 0)
{
    global $plugins;
    global $userid;
    global $blockpluginmode;
    $blockedIds = array();
    $querystring = "";
    if ($send == 1) {
        $querystring = "select fromid as blockedid from cometchat_block where toid = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "' UNION ";
    }
    if (in_array('block', $plugins)) {
        if ($receive == 0) {
            if (!is_array($blockedIds = getCache('blocked_id_of_' . $userid))) {
                $blockedIds = array();
                $sql = "select group_concat(blockedid) blockedids from (" . $querystring . " select toid as blockedid from cometchat_block where fromid = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "') as blocked";
                $query = mysqli_query($GLOBALS['dbh'], $sql);
                $blockedId = mysqli_fetch_assoc($query);
                if (!empty($blockedId['blockedids'])) {
                    $blockedIds = explode(',', $blockedId['blockedids']);
                }
                setCache('blocked_id_of_' . $userid, $blockedIds, 3600);
            }
        } else {
            if (!is_array($blockedIds = getCache('blocked_id_of_receive_' . $userid)) && $receive == 1) {
                $blockedIds = array();
                $sql = "select group_concat(toid) blockedids from cometchat_block where fromid = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "'";
                $query = mysqli_query($GLOBALS['dbh'], $sql);
                $blockedId = mysqli_fetch_assoc($query);
                if (!empty($blockedId['blockedids'])) {
                    $blockedIds = explode(',', $blockedId['blockedids']);
                }
                setCache('blocked_id_of_receive_' . $userid, $blockedIds, 3600);
            }
        }
    }
    return $blockedIds;
}
Example #18
0
 public function clearCache() {
  $this->cache      = array();            // init cache
  setCache('data',$this->cache);          // clear disk cache
 }
 /**
  * 生成缓存
  */
 function GiveCache()
 {
     $name = CONTROLLER_NAME;
     $model = M($name);
     $wdata['status'] = 1;
     //$wdata['pay_class'] = 'ali';
     $list = $model->where($wdata)->order('id desc')->select();
     foreach ($list as $val) {
         /*
         if($val['pay_class']=='ali'){
           $this->alipay_cache($val);
         }else if($val['pay_class']=='wx'){
           $this->wxpay_cache($val);
         }else if($val['pay_class']=='wxapp'){
           $this->wxapppay_cache($val);
         }
         */
         $key = $val['pay_class'];
         $list2[$key] = $val;
     }
     //F('pay',$list2,C('DATA_CACHE_PATH').'/config/');
     setCache('Config:pay', $list2);
 }
Example #20
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 = str_replace('\"','"',$data);            // fix some escaped paths (if any)
   
   if ($data) {
    $json=json_decode($data);                      // parse Json data came from AJAX (if any)
   }
   
   if (sizeof($_FILES)>0) {                        // file upload
//    echo "Fileupload...";
    
//    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";
      move_uploaded_file($file['tmp_name'], $fname);
      
      $this->model->loadBalance($fname);
      
     break;
    }
    
    if ($file['error']==0) {
     echo localize("<en>File uploaded successfully</en><ru>Файл загружен успешно</ru>");
    } else {
     echo localize("<en>Upload error</en><ru>Ошибка при загрузке файла</ru>");
    }
   } else {                                               // no file upload
    $userid     = getsecurevariable('userid'     ,0);
//    echo $userid;
    
//    $hue        = getvariable       ('hue'       );
    $hue                = getsecurevariable ('hue'            ,-1);
    $theme              = getsecurevariable ('theme'          ,-1);
    $SmoothAnimation    = getsecurevariable ('SmoothAnimation',-1);
    $userdetails = $this->model->getUserDetails($userid);          
    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 = $userdetails->SmoothAnimation;                         // get hue value from user details
     } else {                                                                   // if the user is came for the first time
      $SmoothAnimation = 0;                                                     // set the default value
     }
    }
    
    $userDetails = new stdClass();
    $this->model->setUserDetails($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");
    }
    
    $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");
     
     if (($userid>-1) || ($action=='dologin') || ($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'):
        $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 ($userdetails->GroupID!=1) $id = $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);
         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) {
           $tmp_src = new Template($this->viewroot, 'main_'.$json->go.'.htt');                                   // load common parent template
          }
         }
         $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 ('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 ('spiderman'):
           $looptmp = clone $tmp_src;
           $looptmp->loadloop('loop_item');
           $loop_item = "";
           $vars = $looptmp->getVariables();
           
           $parents[] = array();
           
  //         ajax_echo_r ($table[1]);
           if (sizeof($table[1])) {
            foreach ($table[1] as $item) {
             foreach ($vars as $vn) {
              if ($vn!=="Children") {
               $looptmp->fill("%".$vn."%", $item->$vn);
              }
             }
             if (!$parents[$item->ParentID]) $parents[$item->ParentID] = new stdClass();
             $parents[$item->ParentID]->Content.=$looptmp->output();
             $parents[$item->ParentID]->ID=$item->ID;
  //           $loop_item.=$looptmp->output();
             $looptmp->reload();
            }
           }
           
  //         ajax_echo_r ($parents);
           
           foreach($parents as $parent) {
            $parent->Content = str_replace("Children_".$parent->ID."_", $parents[$parent->ID]->Content, $parent->Content);
  //          ajax_echo_r ($parent->Content);
  //          echo "<hr>";
           }
           
           foreach ($table[1] as $item) {
            $parents[0]->Content = str_replace("Children_".$item->ID."_", "", $parents[0]->Content);
           }
           $loop_item=$parents[0]->Content;
           
           $tmp_src->fillloop('loop_item', $loop_item);
          break;
          
          case ('diary'):
           $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();
           
//           $looptmp->loadloop("loop_table");
//           $tmp = clone $looptmp;
           
           $checkbox_th    = new Template($this->viewroot, $tmp_src->returnloop('checkbox_th'));
           $checkbox_td    = new Template($this->viewroot, $tmp_src->returnloop('checkbox_td'));
           $loop_table_row = new Template($this->viewroot, $tmp_src->returnloop('loop_table_row'));
           
           $loopdata = "";
           $loopdata.=$checkbox_th->output();
           
           $cols = array();
           $cols[] = 'ID';
           $cols[] = 'DateAdded';
           $cols[] = 'DateTarget';
           $cols[] = 'Description';
           
           $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   = "";
             $checkbox_td->reload();
             $checkbox_td->fill('%checked%' , 'checked'            );
             $checkbox_td->fill('%id%'      , $item->$thisidcolumnname );
             $thisrow.=$checkbox_td->output();
             
             $loop_table_row->fill(        "%ID%", $item->ID);
             
             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);
             $loop_table_row->fill("%c%",  ($c%2) + ((date_timestamp_get(date_create($item->DateTarget))<date_timestamp_get(date_create()) )?0:2) );
             
//             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->fill("%numrows%",sizeof($table[1]));          
           
          break;
          case ('objects'):
           $tmp_src = $this->fillObjects($tmp_src, $table, $json, $userdetails);
           
          break;
          case ('customers'):
           $tmp_src = $this->fillCustomers($tmp_src, $table, $json, $userdetails);
           
          break;
          case ('happiness'):
           if ($json->r_viewmode=='objects') {
            $tmp_src_subitems = new Template($this->viewroot, 'main_customers.htt');                                   // load common parent template
            $tmp_src = $this->fillObjects($tmp_src, $table, $json, $userdetails, $tmp_src_subitems);
           } else {
            $tmp_src_subitems = new Template($this->viewroot, 'main_objects.htt');                                   // load common parent template
            $tmp_src = $this->fillCustomers($tmp_src, $table, $json, $userdetails, $tmp_src_subitems);
           }
           if ($json->r_viewmode=='objects') {
            $objects = $this->fillCustomers(clone $tmp_src_subitems, $item->subitems, $json, $userdetails);
           } else {
            $objects = $this->fillObjects  (clone $tmp_src_subitems, $item->subitems, $json, $userdetails);
           }
           
          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();
           
           $checkbox_th    = new Template($this->viewroot, $tmp_src->returnloop('checkbox_th'));
           $checkbox_td    = new Template($this->viewroot, $tmp_src->returnloop('checkbox_td'));
           
           $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 = "";
           $loopdata.=$checkbox_th->output();
           
           $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   = "";
             $checkbox_td->reload();
             $checkbox_td->fill('%checked%' , 'checked'            );
             $checkbox_td->fill('%id%'      , $item->$thisidcolumnname );
             $thisrow.=$checkbox_td->output();
             
             $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;
         }
         
         $tmp_src->processfcb('');
         $tmp_src->fill(  '%imgfolder%' , $this->imgfolder                    );
         $tmp_src->fill(   '%viewroot%' , $this->viewroot                     );
         
         ajax_echo(sup($tmp_src->output()));
        }
       break;
       
       case ('showtasks'):
//        ajax_echo_r($json);
//        session_write_close();
        
        setsecurevariable('TaskListID', $json->flt_TaskListID);
        setsecurevariable('ProjectID', $json->flt_ProjectID);
        
        $loop = new Template($this->viewroot, 'main_tasks.htt');                                      // load common parent template
        $block_notasks = new Template($this->viewroot, $loop->returnloop('block_notasks'));
        
        $loop->loadloop("loop_task".$json->listid);
        
        $list = $this->model->getTasks($json);
 //       ajax_echo_r ($list);
        $loopdata = "";
        
        $vars = $loop->getVariables();
 //       ajax_echo_r($vars);
        
        if (sizeof($list)>0)  {
//         $i=0;
         foreach ($list as $ik=>$iv) {
//          ajax_echo_r ($iv);
//          echo $iv->ProjectShortTitle;
//          if (($i==0) && ($json->flt_TaskListID>0)) setsecurevariable('ShortTitle', $iv->ProjectShortTitle);
          
 //         $block_comments = $this->getComments($iv->ID);
 //         $loop->fill(  '%Comments%' , $block_comments                    );
          foreach ($vars as $vn) {
           if ($vn=='Description') {
            $loop->fill("%".$vn."%", ru_translate("".$iv->$vn));
           } else {
            $loop->fill("%".$vn."%", ($iv->$vn));
           }
          }
          
          if ($iv->StateID==1) {
           $loop->fillloop('block_paused','');
           $loop->removeloop('block_playing');
          } else {
           $loop->removeloop('block_paused');
           $loop->fillloop('block_playing','');
          }
          
          $loop->processfcb('');
          $loop->fill(  '%imgfolder%' , $this->imgfolder                    );
          $loopdata.=$loop->output();
          $loop->reload();
          
//          $i++;
         }
        } else {
         $loopdata.=$block_notasks->output();
         //$loopdata.=$block_notasks->output();
        }
        
        ajax_echo($loopdata);
        
        
        
        
        
        
        
        
        
 //       ajax_echo_r($buf);
        
       break;
       
       case ('generateresult'): 
 //       $block_link = new Template($this->viewroot, 'mainparent.htt');
 //       $block_link->loadloop('block_link');
        
 //       $block_link->fill('%href%', $this->model->generateOutput());
        
 //       echo localize($block_link->output());
        echo $this->model->generateOutput();
 //       echo ('test');
        
       break;
       
       case ("cleardatabase"):
        setCache('data', "");
       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 ('closeProject'):
        ajax_echo_r ($json);
        $ret = $this->model->closeProject($json);
        ajax_echo_r ($ret);
       break;
       
       case ('addProject'):
        $this->model->addProject($json, $userid);
       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 ('addSpider'):
        $this->model->addSpider($json);
       break;
       
       case ('deleteSpider'):
        $this->model->deleteSpider($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 ($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', '');
        }
        
        $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=='') && ($userdetails->ID!=1)) {
         $ret->message = $this->getMessage('adduser_error_nousername');
         $ret->result = 0;
        } elseif (($json->Email=='') && ($userdetails->ID!=1)) {
         $ret->message = $this->getMessage('adduser_error_noemail');
         $ret->result = 0;
        } else {
         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 ('cloneObject'):
       case ('newObject'):
        $leftcontent = new Template($this->viewroot, "editor_objects.htt");
        
        $rec = $this->model->getObject($json, $userdetails);
//        $rec_od = $this->model->getObjectDetails($rec->ID, $rec->MarketID);
        if ($action=='cloneObject') $rec->ID = '';
        
        if (($rec->UserID!=$userid) && ($userdetails->GroupID!=1)) {
         $leftcontent->fillloop  ('block_phone_editor','');
         $leftcontent->removeloop('block_phone_hidden');
         
         $leftcontent->fillloop  ('block_userselector','');
         $leftcontent->removeloop('block_nouserselector');
        } else {
         $leftcontent->removeloop('block_phone_editor');
         $leftcontent->fillloop  ('block_phone_hidden','');
         
         $leftcontent->removeloop('block_userselector');
         $leftcontent->fillloop  ('block_nouserselector','');
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
         $list = $this->model->getList('users');
         $loopdata = $this->fillList($list, $loop, $rec->UserID);
         $leftcontent->fillloop('loop_users', $loopdata);
        }
        
        $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->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->loadloop('block_popupdefault','');
        
        /*
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customertypes"));
        $list = $this->model->getList('customertypes');
        $loopdata = $this->fillList($list, $loop, $rec->CustomerTypeID);
        $leftcontent->fillloop('loop_customertypes', $loopdata);
        */
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_methodsofpayment"));
        $list = $this->model->getMethodsOfPayment(2);
        $loopdata = $this->fillList($list, $loop, $rec->MethodOfPaymentID);
        $leftcontent->fillloop('loop_methodsofpayment', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersources"));
        $list = $this->model->getCustomerSources($rec->CustomerTypeID);
        $loopdata = $this->fillList($list, $loop, $rec->SourceID);
        $leftcontent->fillloop('loop_customersources', $loopdata);
        
        /*
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_mortgages"));
        $list = $this->model->getList('mortgages');
        $loopdata = $this->fillList($list, $loop, $rec->MortgageID);
        $leftcontent->fillloop('loop_mortgages', $loopdata);
        */
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersubtypes"));
        $list = $this->model->getCustomerSubtypes($rec->CustomerTypeID);
        $loopdata = $this->fillList($list, $loop, $rec->CustomerSubtypeID);
        $leftcontent->fillloop('loop_customersubtypes', $loopdata);
        
        
        
        
//        ajax_echo_r ($rec);
        
        $marketname = ($rec->MarketID==1)?"apartments":"newbuildings";
//        $innercontent = new Template($this->viewroot, "left_objects_".$marketname.".htt");
        
        $leftcontent = $this->fillLists($leftcontent, $marketname, $rec);
//        echo htmlentities ($leftcontent->output());
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts"));
//        $list = getFromCache('regions');
//        $list = json_decode($list);
        $list = $this->model->getList('districts');
        $loopdata = $this->fillList($list, $loop, $rec->DistrictID);
        $leftcontent->fillloop('loop_districts', $loopdata);
        
        if ($rec->ID) {
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_statuses"));
         $list = $this->model->getStatuses($rec->ID, 'objects');
         foreach ($list as $item) {
          $item->typepicture = $typepicture[$item->TypeID];
         }
         $loopdata = $this->fillList($list, $loop);
        } else {
         $loopdata = "";
        }
        $leftcontent->fillloop('loop_statuses', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_statustypes"));
        $list = $this->model->getList('statustypes');
//        ajax_echo_r ($list);
        $loopdata = $this->fillList($list, $loop);
        $leftcontent->fillloop('loop_statustypes', $loopdata);
        
        $leftcontent->removeloop('block_statuses');
        $leftcontent->removeloop('loop_addr_default');
        $leftcontent->fillloop('loop_addr', '');
        
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        
        $vars = $leftcontent->getVariables();
        
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , brtonl($rec->$var));
         }
        }
        
        $leftcontent->fillloop('loop_table', '');
        
        $leftcontent->processfcb('');
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        
        ajax_echo (localize($leftcontent->output()));
       break;
       
       case ('addObject'):
        $ret = new stdClass;
//        if ($json->Status=='') {
//         $ret->message = $this->getMessage('addcall_error_novalue');
//         $ret->result = 0;
//        } else
        
        if (($json->UserID!=$userid) && ($userdetails->GroupID!=1)) {
         $ret->message = $this->getMessage('error_nouserrights');
         $ret->result = 0;
         $ret->canproceed = 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;
         $ret->canproceed = 0;
        } elseif ($json->Phone=='') {
         $ret->message = $this->getMessage('addcall_error_nophone');
         $ret->result = 0;
         $ret->canproceed = 0;
        } else {
         $r  = $this->model->addObject($json);
//         ajax_echo_r ($r);
//         $rs = $this->model->addSubObject($json);
//         if ($r->rowsAffected>0) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
          $ret->canproceed = 1;
          if ($r->lastInsertID) {
           $ret->ID = $r->lastInsertID;
          } else {
           $ret->ID = $json->ID;
          }
         /*
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
          $ret->canproceed = 1;
          $ret->ID = $json->ID;
         }
         */
        }
        echo json_encode($ret);
        
       break;
       
       case ('deleteObject'):
        $this->model->deleteObject($json);
       break;
       
       
       case ('addSubObject'):
//        ajax_echo_r ($json);
        $ret = new stdClass;
        
        if ($json->MarketID==1) {
         if ($json->Floor=='') {
          $ret->message = $this->getMessage('error_nofloor');
          $ret->result = 0;
          $ret->canproceed = 0;
          /*
         } elseif ($json->Floors=='') {
          $ret->message = $this->getMessage('error_nofloors');
          $ret->result = 0;
          $ret->canproceed = 0;
         } elseif ($json->RoomsTotal=='') {
          $ret->message = $this->getMessage('error_norooms');
          $ret->result = 0;
          $ret->canproceed = 0;
          */
         } else {
          $ret->canproceed = 1;
         }
        } else {
         if ($json->Floors=='') {
          $ret->message = $this->getMessage('error_nofloors');
          $ret->result = 0;
          $ret->canproceed = 0;
         } else {
          $ret->canproceed = 1;
         }
        }
        
        if ($ret->canproceed) {
         $r  = $this->model->addSubObject($json);
         //if ($r->rowsAffected>0) {
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
          $ret->canproceed = 1;
          if ($r->lastInsertID) {
           $ret->ID = $r->lastInsertID;
          } else {
           $ret->ID = $json->ID;
          }
         /*
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
          $ret->canproceed = 1;
          $ret->ID = $json->ID;
         }
         */
        }
        
        echo json_encode($ret);
        
       break;
       
       
       
       case ('loadObjectDetails'):
//        ajax_echo_r ($json);
        $rec = $this->model->getObject($json, $userdetails);
//        ajax_echo_r ($rec);
        
        $marketname = ($rec->MarketID==1)?"apartments":"newbuildings";
        $innercontent = new Template($this->viewroot, "left_objects_".$marketname.".htt");
        
//        $rec_od = $this->model->getObjectDetails($rec->ID, $rec->MarketID);
        
        
        $loop = new Template($this->viewroot, $innercontent->returnloop("loop_quarters"));
        $list = $this->model->getList('quarters');
        $loopdata = $this->fillList($list, $loop, $rec_od->CompletionDateQuarter);
        $innercontent->fillloop('loop_quarters', $loopdata);
        
        $startyear = (int)date('Y') -10;
        $endyear   = (int)date('Y') +10;
        $loop = new Template($this->viewroot, $innercontent->returnloop("loop_years"));
        $list = array();
        for ($y = $startyear; $y<$endyear; $y++) {
         $list[$y] = new stdClass;
         $list[$y]->ID = $y;
         $list[$y]->Description = $y;
        }
        $loopdata = $this->fillList($list, $loop, $rec_od->CompletionDateYear);
        $innercontent->fillloop('loop_years', $loopdata);
        
        
        $leftcontent = $this->fillLists($leftcontent, $marketname, $rec);
        
        $leftcontent->fillloop('loop_table', '');
        
//        ajax_echo_r ($rec_od);
        echo $this->fillObjectDetails($innercontent, $rec_od);
       break;
       
       case ("fillnewbuildingssubitems"):
//        echo_r('deleteID: '.$json->deleteID);
//        ajax_echo_r ($json);
        
        if ($json->deleteID) {
         $this->model->deleteRow('newbuildings_subitems',$json->deleteID);
        }
        if ($json->addID) {
         $this->model->addNewbuilding($json->ID);
        }
        
        $table    = $this->model->getListByParentID('newbuildings_subitems','ParentID',$json->ID);
        
//        ajax_echo_r($table);
        
        $tmp = new Template($this->viewroot, 'left_objects_newbuildings.htt');                                          // load common parent template
        $tmp->loadloop("loop_table");
        
        if (sizeof($table)) {
         $loop_table_row = new Template($this->viewroot, $tmp->returnloop("loop_table_row"));                                          // load common parent template
         
         $block_no       = new Template($this->viewroot, $tmp->returnloop("block_no"));
         $block_no=$block_no->output();
         
         $loopdata = "";
         $c = 0;
         
         $thistable = "";
         
         $vars = $tmp->getVariables();
         
         foreach ($table as $item) {
          $loop_table_row->reload();
          
          $loop_table_row->fill("%c%",  $c%2);
          foreach ($vars as $var) {
           if ($var) {
            $loop_table_row->fill(       "%".$var."%" , $item->$var);
           }
          }
          
          $thistable.=$loop_table_row->output();
          $c++;
         }
         $tmp->fillloop('loop_table_row',$thistable);
         $tmp->fillloop(    "block_no","");
         $tmp->fillloop("block_norows","");
         
         $tmp->processfcb('');
         $tmp->fill('%imgfolder%', $this->imgfolder);
         ajax_echo (localize($tmp->output()));
        } else {
         $block_norows   = new Template($this->viewroot, $tmp->returnloop("block_norows"));
         $block_norows=$block_norows->output();
         
         ajax_echo (localize($block_norows));
        }
       break;
       
       case ("savefield"):
        $this->model->saveField($json);
       break;
       
       
       
       case ('newCustomer'):
        $leftcontent = new Template($this->viewroot, "editor_customers.htt");
        
        if ($json->ID) {
         $rec = $this->model->getCustomer($json->ID);
        } else {
         $rec = new stdClass;
         $rec->TypeID         = 1;
         $rec->Firstname      = $userdetails->Firstname;
         $rec->Surname        = $userdetails->Surname;
         $rec->UserID         = $userdetails->ID;
         $rec->HouseTypeID    = 1;
        }
        $rec->CustomerTypeID = 1;
        
//        ajax_echo_r ($rec);
        
        /*
        if ($rec->UserID!=$userid) {
         $leftcontent->fillloop('block_phone_editor','');
         $leftcontent->removeloop('block_phone_hidden');
        } else {
         $leftcontent->removeloop('block_phone_editor');
         $leftcontent->fillloop('block_phone_hidden','');
        }
        */
        
//        ajax_echo_r ($rec);
        
        
        $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->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', '');
        
        
        if ($userdetails->GroupID!=1) {
//         $leftcontent->fillloop  ('block_phone_editor','');
//         $leftcontent->removeloop('block_phone_hidden');
         
         $leftcontent->fillloop  ('block_userselector','');
         $leftcontent->removeloop('block_nouserselector');
        } else {
//         $leftcontent->removeloop('block_phone_editor');
//         $leftcontent->fillloop  ('block_phone_hidden','');
         
         $leftcontent->removeloop('block_userselector');
         $leftcontent->fillloop  ('block_nouserselector','');
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
         $list = $this->model->getList('users');
         $loopdata = $this->fillList($list, $loop, $rec->UserID);
         $leftcontent->fillloop('loop_users', $loopdata);
        }
        
        
        $loopdata = "";
        $loop = new Template($this->viewroot, $leftcontent->returnloop("block_district"));
        $list = $this->model->getList('districts');
        $DistrictIDs = explode(";",$rec->DistrictIDs);
//        ajax_echo_r ($DistrictIDs);
        foreach ($DistrictIDs as $DistrictID) {
         if ($DistrictID) {
          $thisDistrictID = substr($DistrictID, strpos($DistrictID, "_")+1);
//          echo $thisDistrictID."<br>";
          
          $loop->reload();
          $loop->fill('%ID%', $thisDistrictID);
          $loop->fill('%Description%', $list[$thisDistrictID]->Description);
          $loopdata.= $loop->output();
         }
        }
        //$loopdata = $this->fillList($list, $loop, $rec->DistrictIDs);
//        $leftcontent->loadloop('block_popupdefault','');
        $leftcontent->fill(   '%Districts%', $loopdata);
        
        
        
        
        
        
        $loopdata = "";
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_housetypes"));
        $list = $this->model->getListEx('housetypes', '`Exclude1`=0');
        foreach ($list as $item) {
         $loop->reload();
         $loop->fill(         '%ID%', $item->ID);
         $loop->fill('%Description%', $item->Description);
         $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
         
         $loopdata.= $loop->output();
        }
        $leftcontent->fillloop('loop_housetypes', $loopdata);
        
        $loopdata = "";
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_desiredrooms"));
        $list = $this->model->getList('desiredrooms');
        foreach ($list as $item) {
         $loop->reload();
         $loop->fill(         '%ID%', $item->ID);
         $loop->fill('%Description%', $item->Description);
         $loop->fill('%fcb_checked%', (strpos($rec->DesiredRoomsIDs, "_".$item->ID.";"))?"1":"");
         
         $loopdata.= $loop->output();
        }
        $leftcontent->fillloop('loop_desiredrooms', $loopdata);
        
        
        
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_objects"));
        $list = $this->model->getObjects(false, 1);
        $loopdata = $this->fillList($list, $loop, $rec->ObjectID);
        $leftcontent->fillloop('loop_objects', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_methodsofpayment"));
        $list = $this->model->getMethodsOfPayment(1);
        $loopdata = $this->fillList($list, $loop, $rec->MethodOfPaymentID);
        $leftcontent->fillloop('loop_methodsofpayment', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersources"));
        $list = $this->model->getCustomerSources($rec->CustomerTypeID);
        $loopdata = $this->fillList($list, $loop, $rec->SourceID);
        $leftcontent->fillloop('loop_customersources', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_calldirections"));
        $list = $this->model->getList('calldirections');
        $loopdata = $this->fillList($list, $loop, $rec->DirectionID);
        $leftcontent->fillloop('loop_calldirections', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_customersubtypes"));
        $list = $this->model->getCustomerSubtypes($rec->CustomerTypeID);
        $loopdata = $this->fillList($list, $loop, $rec->CustomerSubtypeID);
        $leftcontent->fillloop('loop_customersubtypes', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_markets"));
        $list = $this->model->getList('markets');
        $loopdata = $this->fillList($list, $loop, $rec->MarketID);
        $leftcontent->fillloop('loop_markets', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_floors"));
        $list = $this->model->getListOrdered('floors','Order');
        $loopdata = $this->fillList($list, $loop, $rec->CustomerSubtypeID);
        $leftcontent->fillloop('loop_floors', $loopdata);
        
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts"));
//        $list = getFromCache('regions');
//        $list = json_decode($list);
        $list = $this->model->getList('districts');
        $loopdata = $this->fillList($list, $loop, $rec->DistrictID);
        $leftcontent->fillloop('loop_districts', $loopdata);
        
        if ($rec->ID) {
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_statuses"));
         $list = $this->model->getStatuses($rec->ID, 'customers');
         foreach ($list as $item) {
          $item->typepicture = $typepicture[$item->TypeID];
         }
         $loopdata = $this->fillList($list, $loop);
        } else {
         $loopdata = "";
        }
        $leftcontent->fillloop('loop_statuses', $loopdata);
        
        $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_statustypes"));
        $list = $this->model->getList('statustypes');
        $loopdata = $this->fillList($list, $loop);
        $leftcontent->fillloop('loop_statustypes', $loopdata);
        
        $leftcontent->removeloop('block_statuses');
        $leftcontent->removeloop('loop_addr_default');
        $leftcontent->fillloop('loop_addr', '');
        
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        
        $block_district = new Template($this->viewroot, $leftcontent->returnloop("block_district"));
        
        $vars = $leftcontent->getVariables();
//        ajax_echo_r ($vars);
        foreach ($vars as $var) {
         if ($var) {
          $leftcontent->fill(       "%".$var."%" , brtonl($rec->$var));
         }
        }
        
        $leftcontent->fillloop("block_district", $block_district->output());
        
        $leftcontent->processfcb('');
        $leftcontent->fill(  '%imgfolder%' , $this->imgfolder                    );
        $leftcontent->fill(   '%viewroot%' , $this->viewroot                     );
        
//        $leftcontent->processfcb('');
//        ajax_echo (htmlentities(localize($leftcontent->output())));
        
        ajax_echo (localize($leftcontent->output()));
       break;
       
       case ('addCustomer'):
//        ajax_echo_r ($json);
        
        $ret = new stdClass;
        if (($json->UserID!=$userid) && ($userdetails->GroupID!=1)) {
         $ret->message = $this->getMessage('error_nouserrights');
         $ret->result = 0;
         $ret->canproceed = 0;
        } elseif ($json->Phone=='') {
         $ret->message = $this->getMessage('addcall_error_nophone');
         $ret->result = 0;
         $ret->canproceed = 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;
         $ret->canproceed = 0;
        } elseif ($json->Status=='') {
         $ret->message = $this->getMessage('addcall_error_novalue');
         $ret->result = 0;
         $ret->canproceed = 0;
        } else {
//         if ($this->model->addCustomer($json)) {
         $r = $this->model->addCustomer($json);
          $ret->message = $this->getMessage('addmoney_success');
          $ret->result = 1;
          $ret->canproceed = 1;
          if ($r->lastInsertID) {
           $ret->ID = $r->lastInsertID;
          } else {
           $ret->ID = $json->ID;
          }
         /*
         } else {
          $ret->message = $this->getMessage('addmoney_error_unknown');
          $ret->result = 0;
          $ret->canproceed = 1;
         }
         */
        }
        
//        ajax_echo_r ($ret);
        
        
        echo json_encode($ret);
        
       break;
       
       case ('deleteCustomer'):
        $this->model->deleteCustomer($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');          // 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 Izum", $mail, $user->Email);
        
        echo "Emails sent: ".$is_sent."<br>";
        
       break;
       
       case ('setUserStatus'):
        if ($json->ID) {
         $sta = $this->model->setUserStatus($userdetails->ID, $json->ID);
        }
        $sta = $this->model->getUserStatus($userdetails->ID);
        
        $tmp = new Template($this->viewroot, 'mainparent.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;
       
       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)
     if (((int)$userdetails->AccountType==1) && (isset($_GET['admin']))) {         // if the admin wants to see his admin-panel
      $tmp = new Template($this->viewroot, 'adminparent.htt');                                      // load common parent template
      $tmp_clean = clone $tmp;
      $tmp->loadloop('selectcompanymsg');
      $selectcompanymsg = $tmp->output();
      
      $tmp = clone $tmp_clean;                                                     // load common parent template
      $tmp->loadloop("adminpage".$_GET['admin']);
      
      if ($_GET['admin']==3) {
       $tmp->fillloop('loop_table', "");
      }
      
      $thispage = $tmp->output();
      $tmp = clone $tmp_clean;                                                     // load common parent template
      $tmp->fillloop("adminpages_parent"  ,  $thispage);
      
      $tmp->fillloop(  "companydetails","" );
      $tmp->fillloop(    "agentdetails","" );
      $tmp->fillloop("selectcompanymsg","" );
      
      $tmp->fill(    "%list_agents%", $selectcompanymsg                 );
      $tmp->fill(     "%justlogged%", $userdetails->JustLogged          );         // fill template
      $tmp->fill(  "%numoldrecords%", -2                                );         // fill the template with actual data
//         $tmp->fill("%imgfolder%"      , "../".$this->settings->imgfolder        );        // fill the template with actual data
      $tmp->fill(      "%tableview%", $this->imgfolder                  );         // fill the template with actual data
      $tmp->fill(      "%agentname%", $userdetails->FirstName." ".$userdetails->LastName                );        // fill the template with actual data
      $tmp->fill(    "%projectname%", $this->settings->projectname    );        // fill the template with actual data
      
      for ($n=0; $n<10; $n++) {
       $tmp->fill("%".$n."%"        , ($n==(int)$_GET['admin']?"active":""));       // fill the template with actual data
      }
      
      $this->processstylesheet($hue,'admin');
      
      echo localize($tmp->output());                                               // show it
      
     } else {                                                                      // if the user or manager wants to see his/her GUI
      $id      = getvariablereq('id'     );
      $auxmode = getvariablereq('auxmode');
      
      $go      = getvariablereq('go');
      if (!$go) $go="objects";
      
      $tmp = new Template($this->viewroot, 'mainparent.htt');                                       // load common parent template
      
      $tmp->fillloop('block_status_1','');
      $tmp->fillloop('block_status_2','');
      
      $privileges_this = $this->model->getUserPrivileges($userid);
      $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;
      }
      
      
      $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%",$userdetails->Username);
       
       $loop_user_auth=$tmp_user_info->output();
       
       $tmp->removeloop("loop_globalparent");
       $tmp->fillloop("loop_user_auth"      , $loop_user_auth );
       $tmp->fillloop("loop_user_info"      , ""              );
       
       
       
       
       $leftcontent = new Template($this->viewroot, 'left_'  .$go.'.htt');                                    // load common parent template
       $maincontent = new Template($this->viewroot, 'main_'  .$go.'.htt');                                    // load common parent template
       
       
       switch ($go) {
        case ('objects'):
         $messages = array('savefirst_nbs');
        break;
       }
       
       if ($messages) {
        if (sizeof($messages)) {
         $tmp_messages = new Template($this->viewroot, $tmp->returnloop('loop_messages'));
         foreach ($messages as $message) {
          $tmp_messages->reload();
          $msg = $this->getMessage($message);
          $tmp_messages->fill("%name%", $message);
          $tmp_messages->fill("%text%", $msg);
          $loop_messages.= trim($tmp_messages->output());
         }
        }
       }
       
       
       $tmp->fillloop('loop_messages'       ,$loop_messages);
       
       
       if ($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 ('tasks'):
         $block_item = new Template($this->viewroot, $leftcontent->returnloop('block_AssignedTo'));
         $users=$this->model->getUsers();
         
         $thislist = "";
         if (sizeof($users)) {
          foreach ($users as $item) {
           $block_item->reload();
           $block_item->fill(        "%ID%", $item->ID           );
           $block_item->fill(  "%Username%", $item->Username     );
           $block_item->fill(  "%selected%", ($item->ID==$userid)?"selected":""     );
           $thislist.=$block_item->output();
          }
         }
         
         $leftcontent->fillloop ('block_AssignedTo', $thislist);
         
         
         
         
         $ProjectID = getvariable('ProjectID');
         setsecurevariable('ProjectID', $ProjectID);
         
         $TaskListID = getvariable('TaskListID');
         setsecurevariable('TaskListID', $TaskListID);
         
         $block_item = new Template($this->viewroot, $leftcontent->returnloop('block_ProjectID'));
         $users=$this->model->getObjects();
         
         $thislist = "";
         if (sizeof($users)) {
          foreach ($users as $item) {
           $block_item->reload();
           $block_item->fill(       "%ID%" , $item->ID           );
           $block_item->fill(    "%Title%" , $item->Title        );
           $block_item->fill(  "%selected%", ($item->ID==$ProjectID)?"selected":""     );
           $thislist.=$block_item->output();
          }
         }
         
         $leftcontent->fillloop ('block_ProjectID', $thislist);
         
         
         
         $block_item = new Template($this->viewroot, $leftcontent->returnloop('block_TaskListID'));
         $users=$this->model->getList('tasklists');
         
         
         $thislist = "";
         if (sizeof($users)) {
          foreach ($users as $item) {
           $block_item->reload();
           $block_item->fill(       "%ID%" , $item->ID           );
           $block_item->fill(    "%Title%" , $item->Title        );
           $block_item->fill(  "%selected%", ($item->ID==$TaskListID)?"selected":""     );
           $thislist.=$block_item->output();
          }
         }
         
         $leftcontent->fillloop ('block_TaskListID', $thislist);
         
         
         
         $block_item = new Template($this->viewroot, $leftcontent->returnloop('block_PriorityID'));
         $users=$this->model->getList('priorities');
         
         $thislist = "";
         if (sizeof($users)) {
          $c=0;
          foreach ($users as $item) {
           $block_item->reload();
           $block_item->fill(        "%ID%" , $item->ID           );
           $block_item->fill(     "%Title%" , $item->Title        );
           $block_item->fill(         "%c%" , $c==2               );
           $thislist.=$block_item->output();
           $c++;
          }
         }
         $leftcontent->fillloop ('block_PriorityID', $thislist);
         
         
         
         
         
         $loop     = clone $maincontent;
         $loop->loadloop("loop_objects");
         
         $list = $this->model->getObjects();
         
         $loopdata = "";
         if (sizeof($list)>0)  {
          foreach ($list as $ik=>$iv) {
           $loop->reload();
           $loop->fill(   "%Description%" ,  $iv->Description );
           $loop->fill(            "%id%" ,  $iv->ID          );
           $loop->fill(      "%selected%" ,  ""               );
           $loopdata.=$loop->output();
          }
         }
         
         $maincontent->fillloop('loop_objects', $loopdata);
         
         
         
         
         
         
        break;
        case ('customers'):
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_markets"));
         $list = $this->model->getList('markets');
         $loopdata = $this->fillList($list, $loop, 0);
         $leftcontent->fillloop('loop_markets', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_desiredrooms"));
         $list = $this->model->getList('desiredrooms');
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->DesiredRoomsIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop('loop_desiredrooms', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts"));
         $list = $this->model->getListEx('districts', "`ID`>1");
//         ajax_echo_r ($list);
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop(   'loop_districts', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts_2"));
         $list = $this->model->getListEx('districts', "`ParentID`=2");
//         ajax_echo_r ($list);
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill(       '%Desc%', $item->Desc       );
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop(   'loop_districts_2', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts_1"));
         $list = $this->model->getListEx('districts', "`ParentID`=1");
//         ajax_echo_r ($list);
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop(   'loop_districts_1', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_housetypes"));
         $list = $this->model->getListEx('housetypes', '`Exclude1`=0');
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop('loop_housetypes', $loopdata);
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
         $list = $this->model->getUsersFlt('customers');
         $loopdata = $this->fillList($list, $loop, $userid);
         $leftcontent->fillloop('loop_users', $loopdata);
         
        case ('objects'): 
         $maincontent->fillloop(   "block_dir0","" );
         $maincontent->fillloop(   "block_dir1","" );
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_markets"));
         $list = $this->model->getList('markets');
         $loopdata = $this->fillList($list, $loop, 0);
         $leftcontent->fillloop('loop_markets', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_desiredrooms"));
         $list = $this->model->getList('desiredrooms');
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->DesiredRoomsIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop('loop_desiredrooms', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts_2"));
         $list = $this->model->getListEx('districts', "`ParentID`=2");
//         ajax_echo_r ($list);
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill(       '%Desc%', $item->Desc       );
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop(   'loop_districts_2', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_districts_1"));
         $list = $this->model->getListEx('districts', "`ParentID`=1");
//         ajax_echo_r ($list);
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop(   'loop_districts_1', $loopdata);
         
         $loopdata = "";
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_housetypes"));
         $list = $this->model->getListEx('housetypes', '`Exclude1`=0');
         foreach ($list as $item) {
          $loop->reload();
          $loop->fill(         '%ID%', $item->ID);
          $loop->fill('%Description%', $item->Description);
          $loop->fill('%fcb_checked%', (strpos($rec->HouseTypeIDs, "_".$item->ID.";"))?"1":"");
          $loopdata.= $loop->output();
         }
         $leftcontent->fillloop('loop_housetypes', $loopdata);
         
         $loop = new Template($this->viewroot, $leftcontent->returnloop("loop_users"));
         $list = $this->model->getUsersFlt('objects');
         $loopdata = $this->fillList($list, $loop, $userdetails->ID);
         $leftcontent->fillloop('loop_users', $loopdata);
         
        break;
       }
       
       $tmp->fill("%leftcontent%"      , $leftcontent->output());                                      // fill the template with actual data
       $tmp->fill("%maincontent%"      , $maincontent->output());                                      // fill the template with actual data
       
       $tmp->fillloop("loop_menu_toplevel_items"      , $menu_toplevel_items);
       $tmp->fill("%menu_items%"               , $menu_items         );
       $tmp->fill("%fromajax%"                 , 0                   );
       
       $json = getFromCache('settings');
       
       $tmp->fill('%settings_pl_startrow_defvalue%' ,   $json->settings_pl_startrow );
       $tmp->fill('%settings_pl_startcol_defvalue%' ,   $json->settings_pl_startcol );
       $tmp->fill('%settings_pl_namescol_defvalue%' ,   $json->settings_pl_namescol );
       $tmp->fill('%settings_pl_idscol_defvalue%'   ,   $json->settings_pl_idscol   );
       $tmp->fill('%settings_pl_costscol_defvalue%' ,   $json->settings_pl_costscol );
       
       $tmp->fill('%settings_o_startrow_defvalue%'  ,   $json->settings_o_startrow  );
       $tmp->fill('%settings_o_idscol_defvalue%'    ,   $json->settings_o_idscol    );
       $tmp->fill('%settings_o_qtyscol_defvalue%'   ,   $json->settings_o_qtyscol   );
       $tmp->fill('%settings_o_costscol_defvalue%'  ,   $json->settings_o_costscol  );
       $tmp->fill('%settings_o_sumscol_defvalue%'   ,   $json->settings_o_sumscol   );
       
       $tmp->fillloop('block_split_none'       ,'');
       $tmp->fillloop('block_split_vertical'   ,'');
       $tmp->fillloop('block_split_horizontal' ,'');
       
       switch ($go){
        case ('tasks'):
         $tmp->fillloop('block_notasks','');
         
         $tmp->fillloop('loop_task0'       ,'');
         $tmp->fillloop('loop_task1'       ,'');
         $tmp->fillloop('loop_task2'       ,'');
         $tmp->fillloop('loop_task3'       ,'');
         $tmp->fillloop('block_comment'    ,'');
        break;
       }
       
       $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%"         , $userdetails->JustLogged          );        // fill template
       $tmp->fill("%tableview%"          , $this->imgfolder                  );        // fill the template with actual data
       $tmp->fill("%agentname%"          , $userdetails->FirstName." ".$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);
      }
      
      $this->processstylesheet($hue,'style');
      $tmp->fill("%theme%"              , $userdetails->Theme                 );
      $tmp->fill('%objecttype%'         , $objecttype                         );
      $tmp->fill('%SmoothAnimation%'    , $SmoothAnimation                    );
      $tmp->fill('%auxmode%'            , $auxmode                            );
      
      if ((int)$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->fill(  '%imgfolder%' , $this->imgfolder                    );
      $tmp->fill(   '%viewroot%' , $this->viewroot                     );
      
      
      echo localize($tmp->output());                                              // show it
     }
    }
   }
  }
Example #21
0
 /**
  * 更新浏览主题的会员编号集合缓存
  */
 public function updateTopicLooksCache($tid, $uid)
 {
     global $_FANWE;
     if ($_FANWE['uid'] == 0 || $_FANWE['uid'] == $uid) {
         return;
     }
     $uids = TopicService::getTopicLooksCache($tid);
     if (!isset($uids[$_FANWE['uid']])) {
         if (count($uids) > 100) {
             array_shift($uids);
         }
         $uids[$_FANWE['uid']] = 1;
         setCache('topic/thread/' . getDirsById($tid) . '/looks', $uids);
     }
 }
 public function setShareIds($uid, $share_id)
 {
     $share_ids = UserService::getShareIds($uid);
     array_push($share_ids, $share_id);
     setCache('user/' . getDirsById($uid) . '/shares', $share_ids);
 }
Example #23
0
 function get_server_load($windows = 0)
 {
     $serverload = "n/a";
     if (!($serverload = getCache("pool_load"))) {
         $numberOfCores = 8;
         $avgLoad = 0;
         $os = strtolower(PHP_OS);
         if (strpos($os, "win") === false) {
             if (file_exists("http://" . $poolname . "/loadavg.html")) {
                 $load = file_get_contents("http://" . $poolname . "/loadavg.html");
                 $load = explode(' ', $load);
                 $avgLoad = $load[0];
             } elseif (function_exists("shell_exec")) {
                 $load = explode(' ', `uptime`);
                 $avgLoad = $load[count($load) - 1];
             }
             //This may need to be adjusted depending on your system. This is assuming a dual core setup.
             if ($avgLoad > 1.9 * $numberOfCores) {
                 $serverload = "critical";
             } else {
                 if ($avgLoad > 1.5 * $numberOfCores) {
                     $serverload = "high";
                 } else {
                     if ($avgLoad > 0.5 * $numberOfCores) {
                         $serverload = "mid";
                     } else {
                         if ($avgLoad > 0 * $numberOfCores) {
                             $serverload = "low";
                         }
                     }
                 }
             }
         } elseif ($windows) {
             if (class_exists("COM")) {
                 $wmi = new COM("WinMgmts:\\\\.");
                 $cpus = $wmi->InstancesOf("Win32_Processor");
                 $cpuload = 0;
                 $i = 0;
                 while ($cpu = $cpus->Next()) {
                     $cpuload += $cpu->LoadPercentage;
                     $i++;
                 }
                 $cpuload = round($cpuload / $i, 2);
                 $avgLoad = $cpuload;
             }
             if ($avgLoad > 90) {
                 $serverload = "critical";
             } else {
                 if ($avgLoad > 66) {
                     $serverload = "high";
                 } else {
                     if ($avgLoad > 33) {
                         $serverload = "mid";
                     } else {
                         if ($avgLoad > 0) {
                             $serverload = "low";
                         }
                     }
                 }
             }
         }
         if ($serverload != "n/a") {
         }
         setCache("pool_load", $serverload, 60);
     }
     return $serverload;
 }
Example #24
0
include "sources/functions.php";
include "sources/functions_menu.php";
$db = NewADOConnection('mysql');
$db->Connect($db_host, $db_user, $db_pass, $db_name);
$Obsedb = new Obsedb();
$Obsedb->buildConfig();
require_once "sources/authentication.php";
require_once "sources/templates.class.php";
$spconfig = array();
$Obsedb_configuration = $db->Execute("SELECT * FROM `Obsedb_configuration`");
while ($cfgdata = $Obsedb_configuration->FetchNextObject()) {
    $spconfig["{$cfgdata->KEY}"] = stripslashes($cfgdata->VALUE);
}
$title = $spconfig['site_title'];
/* Sets whether or not user's browser actually fetches fresh content */
setCache(clean($Obsedb->config['true_refresh']));
function do_header()
{
    global $right, $top, $bottom, $location, $spconfig;
    global $latest_poll, $userinfo, $template;
    // Title of the web site
    $title = $spconfig["site_title"];
    // Meta tag description text
    $meta_description = $spconfig["meta_description"];
    // Meta tag keyword text
    $meta_keywords = $spconfig["meta_keywords"];
    // Create a new template object
    $template = new Template();
    // Open the template named "header" from the database
    $template->open_template('header');
    $stylesheet = new Template();
Example #25
0
function checkAnnoucements()
{
    global $response;
    global $userid;
    global $db;
    global $messages;
    global $cookiePrefix;
    global $notificationsFeature;
    global $notificationsClub;
    global $chromeReorderFix;
    $timestamp = 0;
    if ($notificationsFeature) {
        $sql = "select count(id) as count from cometchat_announcements where `to` = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "' and  `recd` = '0'";
        $query = mysqli_query($GLOBALS['dbh'], $sql);
        if (defined('DEV_MODE') && DEV_MODE == '1') {
            echo mysqli_error($GLOBALS['dbh']);
        }
        $count = mysqli_fetch_assoc($query);
        $count = $count['count'];
        if ($count > 0) {
            $sql = "select id,announcement from cometchat_announcements where `to` = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "' and  `recd` = '0' order by id desc limit 1";
            $query = mysqli_query($GLOBALS['dbh'], $sql);
            if (defined('DEV_MODE') && DEV_MODE == '1') {
                echo mysqli_error($GLOBALS['dbh']);
            }
            $announcement = mysqli_fetch_assoc($query);
            if (!empty($announcement[1])) {
                $sql = "update cometchat_announcements set `recd` = '1' where `id` <= '" . mysqli_real_escape_string($GLOBALS['dbh'], $announcement[0]) . "' and `to`  = '" . mysqli_real_escape_string($GLOBALS['dbh'], $userid) . "'";
                $query = mysqli_query($GLOBALS['dbh'], $sql);
                $response['an'] = array('id' => $announcement[0], 'm' => $announcement[1], 'o' => $count);
                return;
            }
        }
    }
    if ($latest_announcement = getCache('latest_announcement', 30)) {
        $announcement = unserialize($latest_announcement);
    } else {
        $sql = "select id,announcement from cometchat_announcements where `to` = '0' or `to` = '-1' order by id desc limit 1";
        $query = mysqli_query($GLOBALS['dbh'], $sql);
        if (defined('DEV_MODE') && DEV_MODE == '1') {
            echo mysqli_error($GLOBALS['dbh']);
        }
        $announcement = mysqli_fetch_assoc($query);
        $latest_announcements = array();
        if (!empty($announcement['id'])) {
            $latest_announcements = array('id' => $announcement['id'], 'announcement' => $announcement['announcement']);
        }
        setCache('latest_announcement', serialize($latest_announcements), 3600);
    }
    if (!empty($announcement['announcement']) && (empty($_COOKIE[$cookiePrefix . 'an']) || !empty($_COOKIE[$cookiePrefix . 'an']) && $_COOKIE[$cookiePrefix . 'an'] < $announcement['id'])) {
        $response['an'] = array('id' => $announcement['id'], 'm' => $announcement['announcement']);
    }
}
Example #26
0
function heartbeat()
{
    global $response;
    global $userid;
    global $db;
    global $chatrooms_language;
    global $chatroomTimeout;
    global $lastMessages;
    global $cookiePrefix;
    global $allowAvatar;
    global $moderatorUserIDs;
    global $guestsMode, $crguestsMode, $guestnamePrefix;
    $usertable = TABLE_PREFIX . DB_USERTABLE;
    $usertable_username = DB_USERTABLE_NAME;
    $usertable_userid = DB_USERTABLE_USERID;
    $time = getTimeStamp();
    $chatroomList = array();
    $cachedChatrooms = array();
    if (isset($_POST['popout']) && $_POST['popout'] == 0) {
        $_SESSION['cometchat']['cometchat_chatroomspopout'] = $time;
    }
    if (!empty($_POST['currentroom']) && $_POST['currentroom'] != 0) {
        $sql = "insert into cometchat_chatrooms_users (userid,chatroomid,lastactivity,isbanned) values ('" . mysql_real_escape_string($userid) . "','" . mysql_real_escape_string($_POST['currentroom']) . "','" . mysql_real_escape_string($time) . "','0') on duplicate key update chatroomid = '" . mysql_real_escape_string($_POST['currentroom']) . "', lastactivity = '" . mysql_real_escape_string($time) . "'";
        $query = mysql_query($sql);
    }
    if (empty($_SESSION['cometchat']['cometchat_chatroomslist']) || !empty($_POST['force']) || !empty($_SESSION['cometchat']['cometchat_chatroomslist']) && $time - $_SESSION['cometchat']['cometchat_chatroomslist'] > REFRESH_BUDDYLIST) {
        if ($cachedChatrooms = getCache($cookiePrefix . 'chatroom_list', 30)) {
            $cachedChatrooms = unserialize($cachedChatrooms);
        } else {
            $sql = "select DISTINCT cometchat_chatrooms.id, cometchat_chatrooms.name, cometchat_chatrooms.type, cometchat_chatrooms.password, cometchat_chatrooms.lastactivity, cometchat_chatrooms.createdby, (SELECT count(userid) online FROM cometchat_chatrooms_users where cometchat_chatrooms_users.chatroomid = cometchat_chatrooms.id and '{$time}'-lastactivity<" . ONLINE_TIMEOUT . " and isbanned<>'1') online from cometchat_chatrooms order by name asc";
            $query = mysql_query($sql);
            while ($chatroom = mysql_fetch_array($query)) {
                $cachedChatrooms[$chatroom['id']] = array('id' => $chatroom['id'], 'name' => $chatroom['name'], 'online' => $chatroom['online'], 'type' => $chatroom['type'], 'password' => $chatroom['password'], 'lastactivity' => $chatroom['lastactivity'], 'createdby' => $chatroom['createdby']);
            }
            setCache($cookiePrefix . 'chatroom_list', serialize($cachedChatrooms), 30);
        }
        foreach ($cachedChatrooms as $key => $chatroom) {
            if ($chatroom['createdby'] == 0 || $chatroom['createdby'] != 0 && $chatroom['type'] != 2 && $time - $chatroom['lastactivity'] < $chatroomTimeout || $chatroom['createdby'] == $userid) {
                $s = 0;
                if ($chatroom['createdby'] != $userid) {
                    if (!in_array($userid, $moderatorUserIDs)) {
                        $chatroom['password'] = '';
                    } else {
                        $s = 2;
                    }
                } else {
                    $s = 1;
                }
                $chatroomList[$chatroom['id']] = array('id' => $chatroom['id'], 'name' => $chatroom['name'], 'online' => $chatroom['online'], 'type' => $chatroom['type'], 'i' => $chatroom['password'], 's' => $s);
            }
        }
        $_SESSION['cometchat']['cometchat_chatroomslist'] = $time;
        $clh = md5(serialize($chatroomList));
        if (empty($_POST['clh']) || !empty($_POST['clh']) && $clh != $_POST['clh']) {
            if (!empty($chatroomList)) {
                $response['chatrooms'] = $chatroomList;
            }
            $response['clh'] = $clh;
        }
    }
    if (!empty($_POST['currentroom']) && $_POST['currentroom'] != 0) {
        $users = array();
        $messages = array();
        if ($cachedUsers = getCache($cookiePrefix . 'chatrooms_users' . $_POST['currentroom'], 30)) {
            $users = unserialize($cachedUsers);
        } else {
            $sql = "select DISTINCT " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " userid, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_NAME . " username, " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_LASTACTIVITY . " lastactivity, " . DB_AVATARFIELD . " avatar, cometchat_chatrooms_users.isbanned from " . TABLE_PREFIX . DB_USERTABLE . " left join cometchat_status on " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " = cometchat_status.userid inner join cometchat_chatrooms_users on  " . TABLE_PREFIX . DB_USERTABLE . "." . DB_USERTABLE_USERID . " =  cometchat_chatrooms_users.userid " . DB_AVATARTABLE . " where chatroomid = '" . mysql_real_escape_string($_POST['currentroom']) . "' and ('" . mysql_real_escape_string($time) . "' - cometchat_chatrooms_users.lastactivity < " . ONLINE_TIMEOUT . ") order by username asc";
            if ($guestsMode && $crguestsMode) {
                $sql = getChatroomGuests($_POST['currentroom'], $time, $sql);
            }
            $query = mysql_query($sql);
            while ($chat = mysql_fetch_array($query)) {
                if (function_exists('processName')) {
                    $chat['username'] = processName($chat['username']);
                }
                $avatar = '';
                if ($allowAvatar) {
                    $avatar = getAvatar($chat['avatar']);
                }
                $users[] = array('id' => $chat['userid'], 'n' => $chat['username'], 'a' => $avatar, 'b' => $chat['isbanned']);
            }
            setCache($cookiePrefix . 'chatrooms_users' . $_POST['currentroom'], serialize($users), 30);
        }
        $ulh = md5(serialize($users));
        if (empty($_POST['ulh']) || !empty($_POST['ulh']) && $ulh != $_POST['ulh']) {
            $response['ulh'] = $ulh;
            if (!empty($users)) {
                $response['users'] = $users;
            }
        }
        if (USE_COMET != 1 || COMET_CHATROOMS != 1) {
            $limit = $lastMessages;
            if ($lastMessages == 0) {
                $limit = 1;
            }
            $guestpart = "";
            $limitClause = " limit " . $limit . " ";
            $timestampCondition = "";
            if ($_POST['timestamp'] != 0) {
                $timestampCondition = " and cometchat_chatroommessages.id > '" . mysql_real_escape_string($_POST['timestamp']) . "' ";
                $limitClause = "";
            }
            if ($guestsMode && $crguestsMode) {
                $guestpart = " UNION select DISTINCT cometchat_chatroommessages.id id, cometchat_chatroommessages.message, cometchat_chatroommessages.sent, CONCAT('" . $guestnamePrefix . "-',m.name) `from`, cometchat_chatroommessages.userid fromid, m.id userid from cometchat_chatroommessages join cometchat_guests m on m.id = cometchat_chatroommessages.userid where cometchat_chatroommessages.chatroomid = '" . mysql_real_escape_string($_POST['currentroom']) . "' and cometchat_chatroommessages.message not like 'banned_%' and cometchat_chatroommessages.message not like 'kicked_%' " . $timestampCondition;
            }
            $sql = "select DISTINCT cometchat_chatroommessages.id id, cometchat_chatroommessages.message, cometchat_chatroommessages.sent, m.{$usertable_username} `from`, cometchat_chatroommessages.userid fromid, m.{$usertable_userid} userid from cometchat_chatroommessages join {$usertable} m on m.{$usertable_userid} = cometchat_chatroommessages.userid  where cometchat_chatroommessages.chatroomid = '" . mysql_real_escape_string($_POST['currentroom']) . "' and cometchat_chatroommessages.message not like 'banned_%' and cometchat_chatroommessages.message not like 'kicked_%' " . $timestampCondition . $guestpart . " order by id desc " . $limitClause;
            $query = mysql_query($sql);
            while ($chat = mysql_fetch_array($query)) {
                if (function_exists('processName')) {
                    $chat['from'] = processName($chat['from']);
                }
                if ($lastMessages == 0 && $_POST['timestamp'] == 0) {
                    $chat['message'] = '';
                }
                if ($userid == $chat['userid']) {
                    $chat['from'] = $chatrooms_language[6];
                } else {
                    if (!empty($_COOKIE[$cookiePrefix . 'lang']) && !(strpos($chat['message'], "CC^CONTROL_") > -1)) {
                        $translated = text_translate($chat['message'], '', $_COOKIE[$cookiePrefix . 'lang']);
                        if ($translated != '') {
                            $chat['message'] = strip_tags($translated) . ' <span class="untranslatedtext">(' . $chat['message'] . ')</span>';
                        }
                    }
                }
                array_unshift($messages, array('id' => $chat['id'], 'from' => $chat['from'], 'fromid' => $chat['fromid'], 'message' => $chat['message'], 'sent' => $chat['sent'] + $_SESSION['cometchat']['timedifference']));
            }
        } else {
            if ($_POST['timestamp'] == 0) {
                $comet = new Comet(KEY_A, KEY_B);
                $history = $comet->history(array('channel' => md5('chatroom_' . $_POST['currentroom'] . KEY_A . KEY_B . KEY_C), 'limit' => $lastMessages + 5));
                $moremessages = array();
                $count_msg = 0;
                $i = 0;
                if (!empty($history)) {
                    foreach ($history as $message) {
                        if (strpos($message['message'], 'CC^CONTROL_') > -1) {
                            continue;
                        }
                        $moremessages[$message['sent']] = array("id" => $message['sent'], "from" => $message['from'], "fromid" => "0", "message" => $message['message'], "old" => 1, 'sent' => round($message['sent'] / 1000) + $_SESSION['cometchat']['timedifference']);
                    }
                    $messages = array_merge($messages, $moremessages);
                    $count_msg = count($messages);
                    usort($messages, 'comparetime');
                    $messages = $lastMessages > $count_msg ? $messages : array_slice($messages, -$lastMessages);
                }
            }
        }
        if (!empty($messages)) {
            $response['messages'] = $messages;
        }
        $sql = "select password from cometchat_chatrooms where id = '" . mysql_real_escape_string($_POST['currentroom']) . "' limit 1";
        $query = mysql_query($sql);
        $room = mysql_fetch_array($query);
        if (!empty($room['password']) && (empty($_POST['currentp']) || $room['password'] != $_POST['currentp'])) {
            $response['users'] = array();
            $response['messages'] = array();
        }
    }
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($response);
}
Example #27
0
 function _build_result()
 {
     $server_cluster = $this->config['server_cluster'];
     if (post("read_json")) {
         if (post("url_read")) {
             $json_path = post("url_read");
             foreach ($server_cluster as $serv) {
                 //echo $json_path.'<br>'.$this->config['www_url'].'<br>';
                 $json_path = str_replace(trim($this->config['www_url']), "", trim($json_path));
                 //echo $serv . 'read-json/' . $json_path;
                 $json = file_get_contents($serv . 'read-json/' . $json_path);
                 $tmp = json_decode($json, true);
                 return '<pre>' . print_r($tmp, true) . '</pre>';
             }
         } elseif (post("id_read")) {
             $id_news = post("id_read");
             $var = $this->news_model->get_news_by_id($id_news);
             $cat = $this->get_cat_parent_jsview($id_news, $var[0]['news_category']);
             foreach ($server_cluster as $serv) {
                 $json = file_get_contents($serv . 'read-json/' . $cat['url'] . '/' . $var[0]['news_url'] . '.html');
                 $tmp = json_decode($json, true);
                 return '<pre>' . print_r($tmp, true) . '</pre>';
             }
         }
     } else {
         if (post("read_cache")) {
             $CC =& load_object('Cache');
             $CC->memcache_active = true;
             $CC->filecache_active = true;
             setCache("key-key-key", "data cache key", 1800);
             if (post("url_read")) {
                 $json_path = post("url_read");
                 //$cache = checkCache($url,true);
             } elseif (post("id_read")) {
                 $id_news = post("id_read");
                 $var = $this->news_model->get_news_by_id($id_news);
                 $cat = $this->get_cat_parent_jsview($id_news, $var[0]['news_category']);
                 $url = $this->config['www_url'] . $cat['url'] . '/' . $var[0]['news_url'] . '.html';
                 //$cache = checkCache($url,true);
             }
             $cache = checkCache("key-key-key", true, 1800);
             var_dump($cache);
             $CC->memcache_active = false;
             $CC->filecache_active = false;
             return $cache;
         } else {
             if (post("update_json")) {
                 if (post("url_gen")) {
                     $json_path = post("url_gen");
                     foreach ($server_cluster as $serv) {
                         //echo $json_path.'<br>'.$this->config['www_url'].'<br>';
                         $json_path = str_replace(trim($this->config['www_url']), "", trim($json_path));
                         $json = file_get_contents($serv . 'update-json/' . $json_path);
                         if ($json) {
                             return 'Json Update';
                         }
                     }
                 } elseif (post("id_gen")) {
                     $id_news = post("id_gen");
                     $var = $this->news_model->get_news_by_id($id_news);
                     $cat = $this->get_cat_parent_jsview($id_news, $var[0]['news_category']);
                     foreach ($server_cluster as $serv) {
                         $json = file_get_contents($serv . 'update-json/' . $cat['url'] . '/' . $var[0]['news_url'] . '.html');
                         if ($json) {
                             return 'Json Update';
                         }
                     }
                 } else {
                     $ret = '';
                     $cat = post('categori');
                     $arrCat = array();
                     if ($cat != '0') {
                         $arrCat[] = $cat;
                         $tmp_name = $this->arr_Categori['id_to_url'][$cat];
                         $cat_sub = $this->get_sub_cat($tmp_name);
                         if (is_array($cat_sub) && count($cat_sub) > 0) {
                             $arrCat = array_merge($arrCat, $cat_sub);
                         }
                     }
                     $dateFrom = trim(post('startPeriod'));
                     $dateTo = trim(post('endPeriod'));
                     $type_news = post('type_news');
                     $type_news = $type_news != '' ? $type_news : 'all';
                     $row = $this->news_model->get_news_by_category($arrCat, $type_news, $dateFrom, $dateTo);
                     if (is_array($row) && count($row) > 0) {
                         foreach ($row as $rs) {
                             $cat = $this->get_cat_parent_jsview($rs['news_id'], $rs['news_category']);
                             foreach ($server_cluster as $serv) {
                                 $json = file_get_contents($serv . 'update-json/' . $cat['url'] . '/' . $rs['news_url'] . '.html');
                                 $ret .= $this->config['www_url'] . $cat['url'] . '/' . $rs['news_url'] . '.html<br>';
                             }
                         }
                     }
                     return $ret;
                 }
             }
         }
     }
 }
function express(&$content)
{
    global $_FANWE;
    $express = getCache('emotion_express_cache');
    //缓存过的表情hash
    if (!$express) {
        $express_rs = FDB::fetchAll("select `emotion`,concat('./public/expression/',`type`,'/',`filename`) as fname from " . FDB::table('expression'));
        foreach ($express_rs as $k => $row) {
            $express[0][] = $row['emotion'];
            $express[1][] = "<img src='" . $row['fname'] . "' title='" . preg_replace("/[\\[\\]]/", '', $row['emotion']) . "' />";
        }
        setCache('emotion_express_cache', $express);
    }
    preg_match("/(<html.*?>.*?<\\/head>)/s", $content, $data);
    $head_html = $data[1];
    $content = str_replace($head_html, '<!--TAG_HEADER-->', $content);
    preg_match_all("/(<textarea.*?>.*?<\\/textarea>)/s", $content, $data);
    $textareas = $data[1];
    if (count($textareas) > 0) {
        foreach ($textareas as $key => $textarea) {
            $content = str_replace($textarea, '<!--TAG_TEXTAREA_' . $key . '-->', $content);
        }
    }
    preg_match_all("/@([^\f\n\r\t\v@<> ]{2,20}?)(?:\\:| )/", $content, $users);
    if (!empty($users[1])) {
        $patterns = array();
        $replace = array();
        $users = array_unique($users[1]);
        $arr = array();
        foreach ($users as $user) {
            if (!empty($user)) {
                $arr[] = addslashes($user);
            }
        }
        $res = FDB::query('SELECT uid,user_name
			FROM ' . FDB::table('user') . '
			WHERE user_name ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            $patterns[] = '/@' . preg_quote($data['user_name']) . '(\\:| )/';
            $replace[] = '<a class="u_name GUID" uid="' . $data['uid'] . '" href="' . FU('u/index', array('uid' => $data['uid'])) . '">@' . $data['user_name'] . "</a>\$1";
        }
        $content = preg_replace($patterns, $replace, $content);
    }
    preg_match_all("/#([^\f\n\r\t\v]{1,80}?)#/", $content, $events);
    if (!empty($events[1])) {
        $patterns = array();
        $replace = array();
        $events = array_unique($events[1]);
        $arr = array();
        foreach ($events as $event) {
            if (!empty($event)) {
                $arr[] = addslashes($event);
            }
        }
        $res = FDB::query('SELECT id,title
			FROM ' . FDB::table('event') . '
			WHERE title ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            $patterns[] = '#' . $data['title'] . '#';
            $replace[] = '<a href="' . FU("event/detail", array("id" => $data['id'])) . '" target="_blank">#' . $data['title'] . '#</a>';
        }
        $content = str_replace($patterns, $replace, $content);
    }
    if (count($_FANWE['tpl_user_formats']) > 0) {
        $patterns = array();
        $replace = array();
        $user_ids = array_keys($_FANWE['tpl_user_formats']);
        $user_ids = implode(',', $user_ids);
        $user_ids = str_replace(',,', ',', $user_ids);
        if (!empty($user_ids)) {
            $res = FDB::query("SELECT uid,user_name,server_code,reg_time,credits,is_daren,is_buyer,follows,fans,collects,\r\n\t\t\t\tfavs,threads,photos,goods,ask,ask_posts,ask_best_posts,shares,forums,forum_posts,\r\n\t\t\t\tseconds,albums,referrals FROM " . FDB::table('user') . ' 
				INNER JOIN ' . FDB::table('user_count') . ' AS uc USING(uid) 
				WHERE uid IN (' . $user_ids . ')');
            while ($user = FDB::fetch($res)) {
                $uid = $user['uid'];
                $user['url'] = FU('u/index', array('uid' => $uid));
                foreach ($_FANWE['tpl_user_formats'][$uid] as $tuf_key => $tuf_val) {
                    $patterns[] = "<!--USER_" . $uid . "_" . $tuf_key . "-->";
                    $replace[] = getUserFormatHtml($user, $tuf_val);
                }
                unset($_FANWE['tpl_user_formats'][$uid]);
            }
            $content = str_replace($patterns, $replace, $content);
        }
    }
    $content = str_replace($express[0], $express[1], $content);
    $content = str_replace('<!--TAG_HEADER-->', $head_html, $content);
    if (count($textareas) > 0) {
        foreach ($textareas as $key => $textarea) {
            $content = str_replace('<!--TAG_TEXTAREA_' . $key . '-->', $textarea, $content);
        }
    }
    return $content;
}
Example #29
0
function invite()
{
    global $userid;
    global $avchat_language;
    global $language;
    global $embed;
    global $embedcss;
    global $lightboxWindows;
    global $guestsMode;
    global $cookiePrefix;
    global $chromeReorderFix;
    if ($lightboxWindows == '1') {
        $embed = 'web';
        $embedcss = 'embed';
    }
    $status['available'] = $language[30];
    $status['busy'] = $language[31];
    $status['offline'] = $language[32];
    $status['invisible'] = $language[33];
    $status['away'] = $language[34];
    $id = $_GET['roomid'];
    if (empty($id)) {
        exit;
    }
    $time = getTimeStamp();
    $buddyList = array();
    $onlineCacheKey = 'all_online';
    if ($userid > 10000000) {
        $onlineCacheKey .= 'guest';
    }
    if ($onlineUsers = getCache($cookiePrefix . $onlineCacheKey, 30)) {
        $buddyList = unserialize($onlineUsers);
    } else {
        $sql = getFriendsList($userid, $time);
        if ($guestsMode) {
            $sql = getGuestsList($userid, $time, $sql);
        }
        $query = mysqli_query($GLOBALS['dbh'], $sql);
        if (defined('DEV_MODE') && DEV_MODE == '1') {
            echo mysqli_error($GLOBALS['dbh']);
        }
        while ($chat = mysqli_fetch_assoc($query)) {
            if ($time - processTime($chat['lastactivity']) < ONLINE_TIMEOUT && $chat['status'] != 'invisible' && $chat['status'] != 'offline' || $chat['isdevice'] == 1) {
                if ($chat['status'] != 'busy' && $chat['status'] != 'away') {
                    $chat['status'] = 'available';
                }
            } else {
                $chat['status'] = 'offline';
            }
            $avatar = getAvatar($chat['avatar']);
            if (!empty($chat['username'])) {
                if (function_exists('processName')) {
                    $chat['username'] = processName($chat['username']);
                }
                if ($chat['userid'] != $userid) {
                    $buddyList[$chromeReorderFix . $chat['userid']] = array('id' => $chat['userid'], 'n' => $chat['username'], 'a' => $avatar, 's' => $chat['status']);
                }
            }
        }
    }
    if (DISPLAY_ALL_USERS == 0 && MEMCACHE != 0) {
        $tempBuddyList = array();
        if ($onlineFrnds = getCache($cookiePrefix . 'friend_ids_of_' . $userid, 30)) {
            $friendIds = unserialize($onlineFrnds);
        } else {
            $sql = getFriendsIds($userid);
            $res = mysqli_query($GLOBALS['dbh'], $sql);
            $result = mysqli_fetch_assoc($res);
            if (!empty($result['friends'])) {
                $friendIds = explode(',', $result['friends']);
            }
            setCache($cookiePrefix . 'friend_ids_of_' . $userid, serialize($friendIds), 30);
        }
        foreach ($friendIds as $friendId) {
            $friendId = $chromeReorderFix . $friendId;
            if (isset($buddyList[$friendId])) {
                $tempBuddyList[$friendId] = $buddyList[$friendId];
            }
        }
        $buddyList = $tempBuddyList;
    }
    if (function_exists('hooks_forcefriends') && is_array(hooks_forcefriends())) {
        $buddyList = array_merge(hooks_forcefriends(), $buddyList);
    }
    $s['available'] = '';
    $s['away'] = '';
    $s['busy'] = '';
    $s['offline'] = '';
    foreach ($buddyList as $buddy) {
        $s[$buddy['s']] .= '<div class="invite_1"><div class="invite_2" onclick="javascript:document.getElementById(\'check_' . $buddy['id'] . '\').checked = document.getElementById(\'check_' . $buddy['id'] . '\').checked?false:true;"><img height=30 width=30 src="' . $buddy['a'] . '"></div><div class="invite_3" onclick="javascript:document.getElementById(\'check_' . $buddy['id'] . '\').checked = document.getElementById(\'check_' . $buddy['id'] . '\').checked?false:true;"><span class="invite_name">' . $buddy['n'] . '</span><br/><span class="invite_5">' . $status[$buddy['s']] . '</span></div><input type="checkbox" name="invite[]" value="' . $buddy['id'] . '" id="check_' . $buddy['id'] . '" class="invite_4"></div>';
    }
    $inviteContent = '';
    $invitehide = '';
    $inviteContent = $s['available'] . "" . $s['away'] . "" . $s['offline'];
    if (empty($inviteContent)) {
        $inviteContent = $avchat_language[25];
        $invitehide = 'style="display:none;"';
    }
    echo <<<EOD
<!DOCTYPE html>
<html>
<head>
<title>{$avchat_language[18]}</title> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
<link type="text/css" rel="stylesheet" media="all" href="../../css.php?type=plugin&name=avchat" /> 
</head>
<body>
<form method="post" action="invite.php?action=inviteusers&embed={$embed}">
<div class="container">
\t<div class="container_title {$embedcss}">{$avchat_language[16]}</div>
\t<div class="container_body {$embedcss}">
\t\t{$inviteContent}
\t\t<div style="clear:both"></div>
\t</div>
\t<div class="container_sub" {$invitehide}>
\t\t<input type=submit value="{$avchat_language[17]}" class="invitebutton">
\t</div>
</div>\t
<input type="hidden" name="roomid" value="{$id}">
</form>
</body>
</html>
EOD;
}
function m_express($obj, $content)
{
    global $_FANWE;
    $obj['parse_expres'] = array();
    $express = getCache('m_emotion_express_cache');
    //缓存过的表情hash
    if ($express === NULL) {
        $express = array();
        $res = FDB::query("select `emotion`,concat('" . $_FANWE['site_url'] . "public/expression/',`type`,'/',`filename`) as fname from " . FDB::table('expression'));
        while ($data = FDB::fetch($res)) {
            $express[$data['emotion']] = $data['fname'];
        }
        setCache('m_emotion_express_cache', $express);
    }
    preg_match_all("/(\\[[^\f\n\r\t\v\\[\\] ]{2,20}?\\])/", $content, $exps);
    if (!empty($exps[1])) {
        $exps = array_unique($exps[1]);
        foreach ($exps as $exp) {
            if (!empty($exp) && isset($express[$exp])) {
                //$obj['parse_expres'][$exp] = $express[$exp];
                $obj['parse_expres'][] = array('key' => $exp, 'value' => $express[$exp], 'width' => 24, 'height' => 24);
            }
        }
    }
    $obj['parse_user'] = array();
    preg_match_all("/@([^\f\n\r\t\v@<> ]{2,20}?)(?:\\:| )/", $content, $users);
    if (!empty($users[1])) {
        $patterns = array();
        $replace = array();
        $users = array_unique($users[1]);
        $arr = array();
        foreach ($users as $user) {
            if (!empty($user)) {
                $arr[] = addslashes($user);
            }
        }
        $res = FDB::query('SELECT uid,user_name
			FROM ' . FDB::table('user') . '
			WHERE user_name ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            //$obj['parse_user'][$data['user_name']] = $data['uid'];
            $obj['parse_user'][] = array('key' => $data['user_name'], 'value' => $data['uid']);
        }
    }
    $obj['parse_events'] = array();
    preg_match_all("/#([^\f\n\r\t\v]{1,80}?)#/", $content, $events);
    if (!empty($events[1])) {
        $patterns = array();
        $replace = array();
        $events = array_unique($events[1]);
        $arr = array();
        foreach ($events as $event) {
            if (!empty($event)) {
                $arr[] = addslashes($event);
            }
        }
        $res = FDB::query('SELECT id,title
			FROM ' . FDB::table('event') . '
			WHERE title ' . FDB::createIN($arr));
        while ($data = FDB::fetch($res)) {
            //$obj['parse_events'][$data['title']] = $data['id'];
            $obj['parse_events'][] = array('key' => $data['title'], 'value' => $data['id']);
        }
    }
}