public function vxSent()
 {
     if ($this->User->vxIsLogin()) {
         $this->vxHead($msgSiteTitle = '已发送');
         $this->vxBodyStart();
         $this->vxToolbar();
         $p = array();
         $p['base'] = '/message/sent/';
         $p['ext'] = '.vx';
         $sql = "SELECT COUNT(msg_id) FROM babel_message WHERE msg_sid = {$this->User->usr_id} AND msg_draft = 0 AND msg_sdeleted = 0";
         $rs = mysql_query($sql, $this->db);
         $p['items'] = mysql_result($rs, 0, 0);
         mysql_free_result($rs);
         if ($p['items'] > 0) {
             $p['size'] = BABEL_MSG_PAGE;
             $p['span'] = BABEL_PG_SPAN - 2;
             if ($p['items'] % $p['size'] == 0) {
                 $p['total'] = $p['items'] / $p['size'];
             } else {
                 $p['total'] = floor($p['items'] / $p['size']) + 1;
             }
             if (isset($_GET['p'])) {
                 $p['cur'] = intval($_GET['p']);
             } else {
                 $p['cur'] = 1;
             }
             if ($p['cur'] < 1) {
                 $p['cur'] = 1;
             }
             if ($p['cur'] > $p['total']) {
                 $p['cur'] = $p['total'];
             }
             if ($p['cur'] - $p['span'] >= 1) {
                 $p['start'] = $p['cur'] - $p['span'];
             } else {
                 $p['start'] = 1;
             }
             if ($p['cur'] + $p['span'] <= $p['total']) {
                 $p['end'] = $p['cur'] + $p['span'];
             } else {
                 $p['end'] = $p['total'];
             }
             $_SESSION['babel_page_message'] = $p['cur'];
             $p['sql'] = ($p['cur'] - 1) * $p['size'];
             $sql = "SELECT msg_id, msg_body, msg_created, msg_opened, usr_nick FROM babel_message, babel_user WHERE msg_sid = {$this->User->usr_id} AND msg_draft = 0 AND msg_sdeleted = 0 AND msg_rid = usr_id ORDER BY msg_created DESC LIMIT " . $p['sql'] . "," . BABEL_MSG_PAGE;
             $rs = mysql_query($sql, $this->db);
             echo '<div id="main">';
             echo '<div id="tool">';
             if ($p['total'] > 1) {
                 $this->vxDrawPages($p, ' sent');
             } else {
                 echo '<span class="tip">已发送短消息 ' . $p['items'] . ' 条</span>';
             }
             echo '</div>';
             echo '<div id="msg"><span class="text"><table cellpadding="0" cellspacing="0" border="0" class="items">';
             while ($Message = mysql_fetch_object($rs)) {
                 echo '<tr>';
                 echo '<td width="100" height="20" class="recv" align="right">' . make_plaintext($Message->usr_nick) . '&nbsp;</td><td width="190" height="20">&nbsp;<a href="/message/view/' . $Message->msg_id . '.vx">';
                 $msg_excerpt = mb_substr($Message->msg_body, 0, 12, 'UTF-8');
                 if ($Message->msg_opened == 0) {
                     echo '<strong>' . $msg_excerpt . '</strong>';
                 } else {
                     echo $msg_excerpt;
                 }
                 if (mb_strlen($Message->msg_body, 'UTF-8') > mb_strlen($msg_excerpt, 'UTF-8')) {
                     echo '...';
                 }
                 echo '</a></td><td width="90" height="20">';
                 echo '<small>' . make_desc_time($Message->msg_created) . '</small>';
                 if ($Message->msg_opened == 0) {
                     echo ' *';
                 }
                 echo '</td>';
                 echo '</tr>';
             }
             echo '</table></span></div>';
             echo '</div>';
         } else {
             echo '<div id="main"><div id="msg"><span class="text">你还没有向任何人发送过短消息,<a href="/message/compose.vx">现在写一条?</a></span></div></div>';
         }
         $this->vxBottom();
         $this->vxBodyEnd();
     } else {
         $this->vxDenied();
     }
 }
        mysql_query("SET NAMES utf8");
        mysql_query("SET CHARACTER SET utf8");
        mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");
        $user_nick = mysql_real_escape_string($user_nick);
        $sql = "SELECT usr_id FROM babel_user WHERE usr_nick = '{$user_nick}'";
        $rs = mysql_query($sql);
        if (mysql_num_rows($rs) == 1) {
            $user_id = mysql_result($rs, 0, 0);
            mysql_free_result($rs);
            $sql = "SELECT ing_doing, ing_created FROM babel_ing_update WHERE ing_uid = {$user_id} ORDER BY ing_created DESC LIMIT 1";
            $rs = mysql_query($sql);
            if (mysql_num_rows($rs) == 1) {
                $_up = mysql_fetch_array($rs);
                mysql_free_result($rs);
                $doing = format_ubb($_up['ing_doing']);
                $when = make_desc_time($_up['ing_created']) . ' ago';
            } else {
                mysql_free_result($rs);
                $doing = '(void)';
                $when = 'the moment';
            }
            $user_nick_url = urlencode($user_nick);
            $o = "document.writeln(\"<span style='color: \" + babel_ing_color_prefix + \";'>\" + babel_ing_prefix + \"</span> " . $doing . " <small style='font-size: 11px; color: \" + babel_ing_color_time + \";'>at " . $when . " via <a href='http://" . BABEL_DNS_NAME . "/ing/" . $user_nick_url . "' target='_blank'>" . Vocabulary::site_name . "::ING</a></small>\");";
        } else {
            mysql_free_result($rs);
            $o = "document.writeln('<small style=\"font-size: 11px;\"><a href=\"http://" . BABEL_DNS_NAME . "/ing\" target=\"_blank\">" . Vocabulary::site_name . "::ING</a></small> 输出失败 - 指定的会员没有找到');";
        }
    }
} else {
    $o = "document.writeln('<small style=\"font-size: 11px;\"><a href=\"http://" . BABEL_DNS_NAME . "/ing\" target=\"_blank\">" . Vocabulary::site_name . "::ING</a></small> 输出失败 - 没有指定会员昵称');";
}
Exemplo n.º 3
0
 public function vxFriend()
 {
     if (isset($_GET['user_nick'])) {
         $user_nick = make_single_safe($_GET['user_nick']);
         if (get_magic_quotes_gpc()) {
             $user_nick = stripslashes($user_nick);
         }
         $user_id = $this->Validator->vxExistUserNick($user_nick);
         if ($user_id) {
             $_u = $this->User->vxGetUserInfo($user_id);
         } else {
             $_u = false;
         }
     } else {
         $_u = false;
     }
     if ($_u) {
         $this->vxHeader(make_plaintext($_u->usr_nick) . ' 的朋友');
     } else {
         $this->vxHeader('用户不存在');
     }
     $this->vxBodyStart();
     $this->vxH1();
     echo '<div class="content"><small>';
     if ($this->User->vxIsLogin()) {
         echo '<a href="/u/' . urlencode($this->User->usr_nick) . '">' . $this->User->usr_nick . '</a> - ';
         echo '<a href="/babel_mobile.php?m=logout">登出</a>';
     } else {
         echo '<a href="/babel_mobile.php?m=login">登录</a>';
     }
     echo '</small></div>';
     if ($_u) {
         $sql = "SELECT COUNT(frd_id) FROM babel_friend WHERE frd_uid = {$_u->usr_id}";
         $rs = mysql_query($sql);
         $_total = mysql_result($rs, 0, 0);
         mysql_free_result($rs);
         $_per = 10;
         if ($_total % $_per == 0) {
             $_pages = $_total / $_per;
         } else {
             $_pages = floor($_total / $_per) + 1;
         }
         if (isset($_GET['p'])) {
             $_p = intval($_GET['p']);
             if ($_p < 1) {
                 $_p = 1;
             }
             if ($_p > $_pages) {
                 $_p = $_pages;
             }
         } else {
             $_p = 1;
         }
         if ($_p == 1) {
             $_p_first = true;
         } else {
             $_p_first = false;
         }
         if ($_p == $_pages) {
             $_p_last = true;
         } else {
             $_p_last = false;
         }
         $_SESSION['babel_page_user_friend_mobile'] = $_p;
         $_p_start = ($_p - 1) * $_per;
         echo '<div class="content"><small><a href="/">V2EX</a> &gt; <a href="/u/' . urlencode($_u->usr_nick) . '">' . $_u->usr_nick . '</a> &gt; ' . $_total . ' 个朋友</small></div>';
         echo '<div class="content"><small><a href="/u/' . $_u->usr_nick . '" target="_blank">' . $_u->usr_nick . '</a> 共有 ' . $_total . ' 个朋友</small></div>';
         if ($o = $this->cl->get('babel_user_friend_mobile_' . $_u->usr_id . '_' . $_p)) {
             echo $o;
         } else {
             $_o = '';
             $sql = "SELECT usr_id, usr_gender, usr_nick, usr_portrait, usr_hits, frd_created FROM babel_user, babel_friend WHERE usr_id = frd_fid AND frd_uid = {$_u->usr_id} ORDER BY frd_created ASC LIMIT {$_p_start}, {$_per}";
             $rs = mysql_query($sql, $this->db);
             while ($Friend = mysql_fetch_array($rs)) {
                 if ($Friend['usr_portrait'] == '') {
                     $Friend['usr_portrait_img'] = '/img/p_' . $Friend['usr_gender'] . '_n.gif';
                 } else {
                     $Friend['usr_portrait_img'] = '/img/p/' . $Friend['usr_portrait'] . '_n.' . BABEL_PORTRAIT_EXT;
                 }
                 $_o .= '<div class="content"><small>';
                 $sql = "SELECT tpc_id, tpc_title, tpc_lasttouched FROM babel_topic WHERE tpc_uid = {$Friend['usr_id']} ORDER BY tpc_created DESC LIMIT 1";
                 $rs_topic = mysql_query($sql, $this->db);
                 if ($Topic = mysql_fetch_object($rs_topic)) {
                     $_o .= '<img src="' . $Friend['usr_portrait_img'] . '" align="absmiddle" class="p" /> <a href="/u/' . $Friend['usr_nick'] . '">' . $Friend['usr_nick'] . '</a> - <a href="/t/' . $Topic->tpc_id . '">' . make_plaintext($Topic->tpc_title) . '</a> - ' . make_desc_time($Topic->tpc_lasttouched) . ' ago</small>';
                 } else {
                     $_o .= '<img src="' . $Friend['usr_portrait_img'] . '" align="absmiddle" class="p" /> <a href="/u/' . $Friend['usr_nick'] . '">' . $Friend['usr_nick'] . '</a></small>';
                 }
                 unset($Topic);
                 mysql_free_result($rs_topic);
                 $_o .= '</div>';
             }
             mysql_free_result($rs);
             echo $_o;
             $this->cl->save($_o, 'babel_user_friend_mobile_' . $_u->usr_id . '_' . $_p);
         }
         if ($_pages > 1) {
             echo '<div class="content"><small>';
             if (!$_p_last) {
                 echo '&nbsp;&nbsp;<a href="/f/' . urlencode($_u->usr_nick) . '/' . ($_p + 1) . '">下一页</a>';
             }
             if (!$_p_first) {
                 echo '&nbsp;&nbsp;<a href="/f/' . urlencode($_u->usr_nick) . '/' . ($_p - 1) . '">上一页</a>';
             }
             echo '&nbsp;-&nbsp;' . $_p . '/' . $_pages;
             echo '</small></div>';
         }
     } else {
         echo '<div class="content">用户不存在</div>';
     }
     $this->vxBottom();
     $this->vxBodyEnd();
     $this->vxHTMLEnd();
 }
Exemplo n.º 4
0
 public function vxJavaScriptIngPersonal()
 {
     if (isset($_GET['oe'])) {
         $oe = strtolower(fetch_single($_GET['oe']));
         if ($oe != 'gbk') {
             $oe = 'utf-8';
         }
     } else {
         $oe = "utf-8";
     }
     if ($oe != 'utf-8') {
         header('Content-type: text/javascript; charset=gbk');
     } else {
         header('Content-type: text/javascript; charset=utf-8');
     }
     header('Cache-control: no-cache, must-revalidate');
     if (isset($_GET['u'])) {
         $user_nick = fetch_single($_GET['u']);
         $user_nick_md5 = md5($user_nick);
         if ($o = $this->cs->get('babel_js_ing_' . $user_nick_md5)) {
             // nothing to do here
         } else {
             $User = $this->User->vxGetUserInfoByNick($user_nick);
             if ($User) {
                 $sql = "SELECT ing_doing, ing_created FROM babel_ing_update WHERE ing_uid = {$User->usr_id} ORDER BY ing_created DESC LIMIT 1";
                 $rs = mysql_query($sql);
                 if (mysql_num_rows($rs) == 1) {
                     $_up = mysql_fetch_array($rs);
                     $doing = format_ubb($_up['ing_doing']);
                     $when = make_desc_time($_up['ing_created']) . ' ago';
                 } else {
                     $doing = '(void)';
                     $when = 'the moment';
                 }
                 $o = "document.writeln(\"<span style='color: \" + babel_ing_color_prefix + \";'>\" + babel_ing_prefix + \"</span> " . $doing . " <small style='font-size: 11px; color: \" + babel_ing_color_time + \";'>at " . $when . " via <a href='http://" . BABEL_DNS_NAME . "/ing/" . $User->usr_nick_url . "' target='_blank'>" . Vocabulary::site_name . "::ING</a></small>\");";
             } else {
                 $o = "document.writeln('<small style=\"font-size: 11px;\"><a href=\"http://" . BABEL_DNS_NAME . "/ing\" target=\"_blank\">" . Vocabulary::site_name . "::ING</a></small> 输出失败 - 指定的会员没有找到');";
             }
             $this->cs->save($o, 'babel_js_ing_' . $user_nick_md5);
         }
     } else {
         $o = "document.writeln('<small style=\"font-size: 11px;\"><a href=\"http://" . BABEL_DNS_NAME . "/ing\" target=\"_blank\">" . Vocabulary::site_name . "::ING</a></small> 输出失败 - 没有指定会员昵称');";
     }
     if ($oe == 'utf-8') {
         echo $o;
     } else {
         echo mb_convert_encoding($o, 'gbk', 'utf-8');
     }
 }
Exemplo n.º 5
0
 public function vxIngPersonal($User)
 {
     /* start: how many pages */
     $sql = "SELECT COUNT(*) FROM babel_ing_update WHERE ing_uid = {$User->usr_id}";
     $count_total = mysql_result(mysql_query($sql), 0, 0);
     $size = BABEL_ING_PAGE;
     if ($count_total > BABEL_ING_PAGE) {
         if (isset($_GET['p'])) {
             $p = intval($_GET['p']);
             if ($p < 1) {
                 $p = 1;
             }
         } else {
             $p = 1;
         }
         $pages = $count_total % BABEL_ING_PAGE == 0 ? intval($count_total / BABEL_ING_PAGE) : floor($count_total / BABEL_ING_PAGE) + 1;
         if ($p > $pages) {
             $p = $pages;
         }
         $start = ($p - 1) * BABEL_ING_PAGE;
     } else {
         $pages = 1;
         $start = 0;
         $p = 1;
     }
     /* end: how many pages */
     if ($User->usr_id == $this->User->usr_id) {
         $flag_self = true;
     } else {
         $flag_self = false;
     }
     _v_ing_style_personal();
     _v_m_s();
     _v_b_l_s();
     _v_ico_map();
     echo ' <a href="/">' . Vocabulary::site_name . '</a> &gt <a href="/u/' . $User->usr_nick_url . '">' . $User->usr_nick_plain . '</a> &gt ING <span class="tip_i"><small>alpha</small></span>';
     _v_d_e();
     /* S: data here!!! */
     include BABEL_PREFIX . '/res/ing_sources.php';
     $t = time() - 86400;
     $sql = "SELECT ing_id, ing_uid, ing_doing, ing_doing, ing_source, ing_created, usr_id, usr_nick, usr_gender, usr_portrait FROM babel_ing_update, babel_user WHERE usr_id = ing_uid AND ing_uid = {$User->usr_id} ORDER BY ing_created DESC LIMIT {$start}, {$size}";
     $rs_updates = mysql_query($sql);
     $count = mysql_num_rows($rs_updates);
     if ($count == 0) {
         if ($flag_self) {
             $hack_height = 'height: 350px; ';
         } else {
             $hack_height = 'height: 240px; ';
         }
     } else {
         if ($count < 5) {
             $hack_height = 'height: 360px; ';
         } else {
             $hack_height = '';
         }
     }
     /* E: data here!!! */
     echo '<div class="blank" align="left" style="' . $hack_height . '">';
     echo '<div style="float: right; padding: 3px 10px 3px 10px; font-size: 10px; background-color: #F0F0F0; -moz-border-radius: 5px; color: #999;">';
     echo $User->usr_nick_plain . ' | <a href="/ing/' . $User->usr_nick_url . '/friends">With Friends</a> | <a href="/ing">Everyone</a>';
     /*if ($this->User->vxIsLogin()) {
     			echo('&nbsp;&nbsp;<a href="/fav/ing">' . _vo_ico_silk('heart') . '</a>');
     		}*/
     echo '&nbsp;&nbsp;<a href="/feed/ing/' . $User->usr_nick_url . '">' . _vo_ico_silk('feed') . '</a>';
     echo '</div>';
     echo '<span class="text_large">';
     _v_ico_silk('hourglass');
     echo ' ING</span>';
     if ($flag_self) {
         _v_hr();
         echo '<div align="center">';
         echo '<form action="/recv/ing.vx" id="ing_personal" method="POST" onsubmit="return checkIngForm();">';
         echo '<div style="background-image: url(' . "'/img/bg_ing.gif'" . '); padding-top: 3px; width: 320px; height: 35px;"><input onkeyup="checkIngType(' . "'doing', 'ing_status'" . ');" type="text" class="sll" id="doing" name="doing" maxlength="131" /></div> ';
         _v_btn_f($this->lang->update(), 'ing_personal');
         echo '<div id="ing_status" style="padding-top: 10px;"><span class="tip_i"><small>131 characters remaining</small></span></div>';
         echo '<input type="hidden" name="return" value="/ing/' . urlencode($this->User->usr_nick) . '" />';
         echo '</form>';
         echo '</div>';
     } else {
     }
     _v_hr();
     /* S: right user badge */
     echo '<div style="min-width: 170px; max-width: 180px; padding: 5px 0px 5px 0px; background-color: #FFF; float: right;"><img src="' . $User->img_p_s . '" align="left" style="margin-right: 10px;" class="portrait" /> <span class="tip_i">all about</span><h1 class="ititle" style="margin-bottom: 5px; display: block;"><a href="/u/' . $User->usr_nick_url . '">' . $User->usr_nick_plain . '</a></h1>';
     $sql = "SELECT ing_doing, ing_created FROM babel_ing_update WHERE ing_uid = {$User->usr_id} ORDER BY ing_created DESC LIMIT 1";
     $rs = mysql_query($sql);
     if ($_up = mysql_fetch_array($rs)) {
         _v_hr();
         echo '<span class="tip_i"><small>Currently:</small></span>';
         echo '<blockquote style="padding: 5px 5px 5px 20px; margin: 0px; border: none;">' . format_ubb($_up['ing_doing']) . '</blockquote>';
         echo '<div align="right"><small class="fade">Updated ' . make_desc_time($_up['ing_created']) . ' ago</small></div>';
     } else {
         _v_hr();
         echo '<span class="tip_i"><small>Currently:</small></span>';
         echo '<blockquote style="padding: 5px 5px 5px 20px; margin: 0px; border: none;">(void)</blockquote>';
     }
     mysql_free_result($rs);
     if ($User->usr_brief_plain != '') {
         _v_hr();
         echo '<span class="tip_i">' . $User->usr_brief_plain . '</span>';
     }
     _v_hr();
     if ($stats = $this->cl->load('babel_ing_stats_brief_' . $User->usr_id)) {
     } else {
         $stats = '';
         $stats .= '<span class="tip"><small>';
         $stats .= '&#187; <a href="/ing/' . $User->usr_nick_url . '" class="regular">' . $count_total . '</a> updates<br /><br />';
         $sql = 'SELECT COUNT(*) FROM babel_friend WHERE frd_uid = ' . $User->usr_id;
         $count_friends = mysql_result(mysql_query($sql), 0, 0);
         $stats .= '&#187; <a href="/u/' . $User->usr_nick_url . '#friends" class="regular">' . $count_friends . '</a> friends<br /><br />';
         $sql = 'SELECT COUNT(*) FROM babel_friend WHERE frd_fid = ' . $User->usr_id;
         $count_fans = mysql_result(mysql_query($sql), 0, 0);
         $stats .= '&#187; <a href="/who/connect/' . $User->usr_nick_url . '" class="regular">' . $count_fans . '</a> fans';
         $stats .= '</small></span>';
         $this->cl->save($stats, 'babel_ing_stats_brief_' . $User->usr_id);
     }
     echo $stats;
     _v_d_e();
     /* E: right user badge */
     echo '<div>';
     make_pages($pages, $p, '/ing/' . $User->usr_nick_url . '/page/', '');
     $i = 0;
     while ($_up = mysql_fetch_array($rs_updates)) {
         $i++;
         $css_class = $i % 2 == 0 ? 'even' : 'odd';
         $img_p = $_up['usr_portrait'] ? CDN_IMG . 'p/' . $_up['usr_portrait'] . '_s.jpg' : CDN_IMG . 'p_' . $_up['usr_gender'] . '_s.gif';
         echo '<div style="width: 61.8%; min-width: 200px; max-width: 800px;" class="entry_' . $css_class . '">';
         //echo('<img src="' . $img_p . '" align="absmiddle" alt="' . make_single_return($_up['usr_nick']) . '" class="portrait" /> ');
         //echo('<a href="/u/' . urlencode($_up['usr_nick']) . '" class="t">' . make_plaintext($_up['usr_nick']) . '</a> ');
         echo format_ubb(trim($_up['ing_doing'])) . ' <span class="tip_i">' . make_descriptive_time($_up['ing_created']) . '</span> <span class="tip"><small>from ' . $_sources[$_up['ing_source']] . '</small></span> ';
         if ($flag_self) {
             echo '<a href="/erase/ing/' . $_up['ing_id'] . '.vx"><img src="/img/ing_trash.gif" align="absmiddle" alt="del" border="0" /></a>';
         }
         /*
         			if ($this->User->vxIsLogin()) {
         				echo(' <a href="/fav/ing/' . $_up['ing_id'] . '.vx"><img src="/img/ing_fav.gif" align="absmiddle" alt="fav" border="0" /></a>');
         			}*/
         _v_d_e();
     }
     mysql_free_result($rs_updates);
     make_pages($pages, $p, '/ing/' . $User->usr_nick_url . '/page/', '');
     if ($i > 0) {
         _v_hr();
         echo '<span class="tip_i">';
         _v_ico_silk('feed');
         echo ' <a href="/feed/ing/' . $User->usr_nick_url . '">RSS / ' . $User->usr_nick_plain . ' 的最新状态</a>';
         echo ' | ';
         _v_ico_silk('html');
         echo ' <a href="#;" onclick="openOJSIngPersonal(' . "'{$this->User->usr_nick_url}'" . ')">JavaScript 输出到你的网站</a>';
         echo ' | ';
         _v_ico_silk('computer');
         echo ' <a href="http://code.google.com/p/ingc" target="_blank">通过 INGC 来更新 <img src="/img/ext.png" align="absmiddle" border="0" /></a>';
         echo '</span>';
     }
     _v_d_e();
     if ($i == 0) {
         _v_ico_silk('exclamation');
         echo ' <a href="/u/' . $User->usr_nick_url . '">' . $User->usr_nick_plain . '</a> 目前还没有任何更新 ...';
     }
     if ($flag_self) {
         echo '<img src="/img/spacer.gif" onload="getObj(' . "'doing'" . ').focus();" style="display: none;" />';
     }
     _v_d_e();
     Widget::vxIngAbout();
     _v_d_e();
 }
Exemplo n.º 6
0
 public function vxLoadProjectsDone()
 {
     $user_id = 0;
     if (isset($_GET['user_id'])) {
         $user_id = intval($_GET['user_id']);
         if (!$this->Validator->vxExistUser($user_id)) {
             $user_id = 0;
         }
     } else {
         if ($this->User->usr_id != 0) {
             $user_id = $this->User->usr_id;
         }
     }
     if ($user_id == 0) {
         echo $this->r_failed;
     } else {
         $sql = "SELECT zpr_id, zpr_uid, zpr_title, zpr_private, zpr_type, zpr_tasks, zpr_notes, zpr_dbs, zpr_created FROM babel_zen_project WHERE zpr_progress = 1 AND zpr_uid = {$user_id} ORDER BY zpr_completed DESC";
         $rs = mysql_query($sql);
         $i = 0;
         $tasks = 0;
         $notes = 0;
         $dbs = 0;
         $o = '';
         while ($_p = mysql_fetch_array($rs)) {
             $i++;
             $tasks += $_p['zpr_tasks'];
             $notes += $_p['zpr_notes'];
             $dbs += $_p['zpr_dbs'];
             $_p['zpr_type_grid'] = 'zen2_grid_' . $_p['zpr_type'] . '_s';
             $o .= '<div class="zen2_project"><div class="' . $_p['zpr_type_grid'] . '"></div><div class="zen2_project_toolbar"><span class="tip_i"><small>' . Zen::vxIconTask($_p['zpr_tasks']) . ' / ' . Zen::vxIconNote($_p['zpr_notes']) . ' / ' . Zen::vxIconDB($_p['zpr_dbs']) . ' &nbsp;</small></span>';
             if ($_p['zpr_uid'] == $this->User->usr_id) {
                 $o .= Zen::vxUndoneButton($_p['zpr_id']);
                 $o .= Zen::vxDeleteButton($_p['zpr_id'], 'done');
             }
             $o .= '</div><div class="zen2_project_main">&nbsp; <a href="/project/view/' . $_p['zpr_id'] . '.html">' . make_plaintext($_p['zpr_title']) . '</a><span class="tip_i">&nbsp;...&nbsp;<small>created ' . make_desc_time($_p['zpr_created']) . ' ago</small></span></div></div>';
             unset($_p);
         }
         mysql_free_result($rs);
         $o .= '<div class="conclude">' . $i . ' 个完成了的项目 - ' . $tasks . ' 项任务 - ' . $notes . ' 则笔记 - ' . $dbs . ' 个数据库</div>';
         return $o;
     }
 }