Changeset 1759 for branches/multiuser
- Timestamp:
- 09/26/07 08:57:31 (13 months ago)
- Location:
- branches/multiuser
- Files:
-
- 15 modified
-
admin/index.php (modified) (4 diffs)
-
admin/users.php (modified) (1 diff)
-
cls/channels.php (modified) (3 diffs)
-
cls/items.php (modified) (9 diffs)
-
cls/update.php (modified) (1 diff)
-
cls/user.php (modified) (2 diffs)
-
cls/wrappers/user.php (modified) (1 diff)
-
constants.php (modified) (1 diff)
-
feed.php (modified) (5 diffs)
-
index.php (modified) (4 diffs)
-
opml.php (modified) (1 diff)
-
plugins.php (modified) (1 diff)
-
schema.php (modified) (7 diffs)
-
search.php (modified) (1 diff)
-
themes/default/web/css/look.css (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/multiuser/admin/index.php
r1627 r1759 77 77 78 78 79 $auth=rss_user_check_user_level(RSS_USER_LEVEL_ ADMIN);79 $auth=rss_user_check_user_level(RSS_USER_LEVEL_BASIC); 80 80 if (! $auth) { 81 // we should either be setting the admin password during installation 82 // or setting it automatically and sending it to the person installing thr. email 81 83 // check whether the admin password has been set. 82 84 $sql = "select uname,password from " . getTable('users') . " where ulevel=99"; … … 90 92 } 91 93 set_admin_pass($admin_uname,$admin_pass); 92 } else if(!rss_user_check_user_level(RSS_USER_LEVEL_BASIC)){93 rss_login_form();94 exit();94 } else { 95 rss_login_form(); 96 exit(); 95 97 } 96 98 } … … 114 116 switch($_REQUEST[CST_ADMIN_DOMAIN]) { 115 117 case CST_ADMIN_DOMAIN_FOLDER: 116 $show = folder_admin();118 $show = folder_admin(); 117 119 break; 118 120 case CST_ADMIN_DOMAIN_CHANNEL: … … 120 122 break; 121 123 case CST_ADMIN_DOMAIN_CONFIG: 122 $show = config_admin();124 if ($authorised >= RSS_USER_LEVEL_ADMIN) $show = config_admin(); 123 125 break; 124 126 case CST_ADMIN_DOMAIN_ITEM: 125 $show = item_admin();127 if ($authorised >= RSS_USER_LEVEL_ADMIN) $show = item_admin(); 126 128 break; 127 129 case CST_ADMIN_DOMAIN_PLUGINS: 128 $show = plugins_admin(); 130 // TODO: add plugin management for individual users 131 if ($authorised >= RSS_USER_LEVEL_ADMIN) $show = plugins_admin(); 129 132 break; 130 133 case CST_ADMIN_DOMAIN_THEMES: -
branches/multiuser/admin/users.php
r1604 r1759 97 97 ."<legend>" . __('Please log in') . "</legend>\n" 98 98 ."<p><label style=\"display:block\" for=\"username\">".__('Username').":</label>\n" 99 ."<input type=\"text\" id=\"username\" name=\"username\" value=\"$uname\"/></p>\n"99 ."<input type=\"text\" id=\"username\" name=\"username\" /></p>\n" 100 100 ."<p><label style=\"display:block\" for=\"password\">".__('Password').":</label>\n" 101 ."<input type=\"password\" id=\"password\" name=\"password\" value=\"$pass\"/></p>\n"102 ."<p id=\"admin_login_submit\"><input type=\"submit\" value=\"". LBL_LOG_IN."\" /></p>\n"101 ."<input type=\"password\" id=\"password\" name=\"password\" /></p>\n" 102 ."<p id=\"admin_login_submit\"><input type=\"submit\" value=\"".__('Login')."\" /></p>\n" 103 103 ."<span style=\"display:inline;\" id=\"admin_login_result\"></span>\n" 104 104 ."</fieldset>\n" -
branches/multiuser/cls/channels.php
r1640 r1759 224 224 ." from " . getTable('item2user') ." i2u " 225 225 . " inner join " . getTable('channels2user') . " c2u on c2u.fkuid=" . rss_user_id() 226 . " inner join " . getTable('folders') ." f on c2u.parent=f.id" 226 . " inner join " . getTable('channels') . " c on c.id = c2u.fkcid" 227 . " inner join " . getTable('folders') ." f on c.parent=f.id" 227 228 ." where i2u.flgunread =1 " 228 229 ." and i2u.flgdeleted=0 "; … … 252 253 _pf('FeedList->populate() ...'); 253 254 $sql = "select " 254 ." c.id, c.title, c.url, c.siteurl, f.name, c 2u.parent, c2u.icon, c.descr, c2u.flgdeleted,c2u.flgprivate "255 ." c.id, c.title, c.url, c.siteurl, f.name, c.parent, c2u.icon, c.descr, c2u.flgdeleted,c2u.flgprivate " 255 256 ." from ".getTable("channels")." c " 256 257 . " inner join " . getTable("channels2user")." c2u on c2u.fkcid=c.id " … … 265 266 266 267 if (getConfig('rss.config.absoluteordering')) { 267 $sql .= " order by f.position asc, c 2u.position asc";268 $sql .= " order by f.position asc, c.position asc"; 268 269 } else { 269 270 $sql .= " order by f.name, c.title asc"; -
branches/multiuser/cls/items.php
r1639 r1759 60 60 * ctor 61 61 */ 62 function Item($id, $title, $url, $enclosure, $parent, $author, $description, $date, $isPubDate, $unread, $ rating) {62 function Item($id, $title, $url, $enclosure, $parent, $author, $description, $date, $isPubDate, $unread, $private, $sticky, $flagged) { 63 63 $this->rss = &$GLOBALS['rss']; 64 64 $this->id = $id; 65 $this->flags = $unread;66 65 if ($title) { 67 66 $this->title = $title; … … 86 85 $this->isPubDate = $isPubDate; 87 86 $this -> tags=array(); 88 $this -> rating = $rating;89 $this ->isUnread = $unread & RSS_MODE_UNREAD_STATE;90 $this ->isPrivate = $ unread & RSS_MODE_PRIVATE_STATE;91 $this ->isDeleted = $unread & RSS_MODE_DELETED_STATE;92 $this ->isSticky = $ unread & RSS_MODE_STICKY_STATE;93 $this ->isFlag = $ unread & RSS_MODE_FLAG_STATE;87 //$this -> rating = $rating; 88 $this ->isUnread = $unread; 89 $this ->isPrivate = $private; 90 //$this ->isDeleted = $deleted; 91 $this ->isSticky = $sticky; 92 $this ->isFlag = $flagged; 94 93 //$this -> key = md5(rand(0,10000)); 95 94 … … 193 192 $this->items[] = $item; 194 193 195 if ((!$this -> hasUnreadItems) && $item-> flags & RSS_MODE_UNREAD_STATE) {194 if ((!$this -> hasUnreadItems) && $item->isUnread) { 196 195 $this -> hasUnreadItems = true; 197 196 } … … 260 259 261 260 // Predefined alternate ordering 262 $this -> ORDER_BY_UNREAD_FIRST = " order by i2u.flgunread & " . RSS_MODE_UNREAD_STATE . "desc, ";261 $this -> ORDER_BY_UNREAD_FIRST = " order by i2u.flgunread desc, "; 263 262 if (getConfig('rss.config.absoluteordering')) { 264 $this -> ORDER_BY_UNREAD_FIRST .= " f.position asc, c 2u.position asc";263 $this -> ORDER_BY_UNREAD_FIRST .= " f.position asc, c.position asc"; 265 264 } else { 266 $this -> ORDER_BY_UNREAD_FIRST .= " f.name asc, c 2u.title asc";265 $this -> ORDER_BY_UNREAD_FIRST .= " f.name asc, c.title asc"; 267 266 } 268 267 $this -> ORDER_BY_UNREAD_FIRST .= ", i.added desc, i.id asc"; … … 283 282 284 283 _pf('ItemList::populate()'); 285 $this -> _sqlActualWhat = " i.title, c.title, c.id, i2u.flgunread, " 286 ."i.url, i.enclosure, i.author, i.description, c2u.icon, " 284 $this -> _sqlActualWhat = " i.title, c.title, c.id," 285 . " i2u.flgunread, i2u.flgprivate, i2u.flgsticky, i2u.flgdeleted, i2u.flgflagged," 286 ." i.url, i.enclosure, i.author, i.description, c.icon, " 287 287 ." unix_timestamp(ifnull(i.pubdate,i.added)) as ts, " 288 288 ." i.pubdate is not null as ispubdate, i.id " … … 298 298 . " inner join " . getTable('channels2user') ." c2u on (i.cid=c2u.fkcid)" 299 299 . " inner join " . getTable("channels")." c on (c2u.fkcid=c.id)" 300 . " inner join " . getTable("folders") ." f on (c 2u.parent=f.id) ";300 . " inner join " . getTable("folders") ." f on (c.parent=f.id) "; 301 301 302 302 … … 336 336 if (!getConfig('rss.config.feedgrouping')) { 337 337 if(getConfig("rss.config.datedesc.$skey")){ 338 $this -> _sqlActualOrder = " ts desc, f.position asc, c 2u.position asc ";338 $this -> _sqlActualOrder = " ts desc, f.position asc, c.position asc "; 339 339 }else{ 340 $this -> _sqlActualOrder = " ts asc, f.position asc, c 2u.position asc ";340 $this -> _sqlActualOrder = " ts asc, f.position asc, c.position asc "; 341 341 } 342 342 } elseif (getConfig('rss.config.absoluteordering')) { 343 $this -> _sqlActualOrder = " f.position asc, c 2u.position asc";343 $this -> _sqlActualOrder = " f.position asc, c.position asc"; 344 344 } else { 345 345 $this -> _sqlActualOrder = " f.name asc, c.title asc"; … … 376 376 $curIdx = 0; 377 377 $f=null; 378 while (list ($ititle_, $ctitle_, $cid_, $iunread_, $i url_, $ienclosure_, $iauthor_, $idescr_, $cicon_, $its_, $iispubdate_, $iid_) = $GLOBALS['rss_db']->rss_fetch_row($res)) {378 while (list ($ititle_, $ctitle_, $cid_, $iunread_, $iprivate_, $isticky_, $ideleted_, $iflagged_, $iurl_, $ienclosure_, $iauthor_, $idescr_, $cicon_, $its_, $iispubdate_, $iid_) = $GLOBALS['rss_db']->rss_fetch_row($res)) { 379 379 380 380 // Built a new Item 381 $i = new Item($iid_, $ititle_, $iurl_, $ienclosure_, $cid_, $iauthor_, $idescr_, $its_, $iispubdate_, $iunread_ );381 $i = new Item($iid_, $ititle_, $iurl_, $ienclosure_, $cid_, $iauthor_, $idescr_, $its_, $iispubdate_, $iunread_, $iprivate_, $isticky_, $iflagged_); 382 382 383 383 // no dupes, please … … 411 411 // Some stats... 412 412 $this -> itemCount++; 413 if ($iunread_ & RSS_MODE_UNREAD_STATE) {413 if ($iunread_) { 414 414 $this -> unreadCount++; 415 415 $this -> unreadIids[] = $iid_; -
branches/multiuser/cls/update.php
r1639 r1759 99 99 if (!hidePrivate() || $ignorePrivate) { 100 100 if (count($newIds) > 0 && getConfig('rss.config.markreadonupdate')) { 101 rss_query("update ".getTable("item2user")." i2u set i2u.flgunread = unread &"102 .SET_MODE_READ_STATE." where unread & ".RSS_MODE_UNREAD_STATE103 ." and i2u.fkiid not in (".implode(",", $newIds).")");101 rss_query("update ".getTable("item2user")." i2u set i2u.flgunread = 0" 102 . " where i2u.flgunread=1" 103 ." and i2u.fkiid not in (".implode(",", $newIds).")"); 104 104 } 105 105 } -
branches/multiuser/cls/user.php
r1524 r1759 27 27 ############################################################################### 28 28 rss_require('cls/wrappers/user.php'); 29 rss_require('themes.php'); 30 rss_require('plugins.php'); 29 31 30 32 define ('RSS_USER_ACTION_LOGIN',0x01); … … 81 83 rss_redirect(''); 82 84 } 85 83 86 84 87 $cuname = $chash = null; -
branches/multiuser/cls/wrappers/user.php
r1524 r1759 38 38 } 39 39 40 function rss_user_show_private() { 41 return $GLOBALS['rssuser'] -> getShowPrivate(); 42 } 43 40 44 function rss_user_logout() { 41 45 $GLOBALS['rssuser'] -> logout(); -
branches/multiuser/constants.php
r1639 r1759 27 27 28 28 // Application title 29 define ('_TITLE_', "Gregarius ");29 define ('_TITLE_', "GregariusMU"); 30 30 31 31 -
branches/multiuser/feed.php
r1604 r1759 60 60 && !is_numeric($_REQUEST['channel']) 61 61 ) { 62 $sqlid = sanitize($_REQUEST['channel'], RSS_SANITIZER_SIMPLE_SQL | RSS_SANITIZER_NO_SPACES); 63 $sql = "select c.id from " 64 . getTable("channels") 65 ." c left join " .getTable('channels2user') ." c2u on (c.id=c2u.fkcid) " 66 ." where c.title like '$sqlid'"; 62 $sqlid = preg_replace('#'.RSS_URI_SEPARATOR.'#','_', 63 sanitize($_REQUEST['channel'] , RSS_SANITIZER_SIMPLE_SQL ) 64 ); 65 66 $sql = "select c.id from " . getTable("channels") 67 . " c left join " .getTable('channels2user') 68 ." c2u on (c.id=c2u.fkcid) where title like '$sqlid'"; 67 69 if (hidePrivate()) { 68 70 $sql .=" and c2u.flgprivate=0 "; 69 71 } 70 72 // don't hide deprecated items becuase we want items of deprecated feeds to be accessible 71 // $sql .= " and not(mode & " . RSS_MODE_DELETED_STATE . ")";73 // $sql .= " and c2u.flgdeleted=0 "; 72 74 73 75 $res = rss_query( $sql ); … … 80 82 // is this a folder? 81 83 $sql = "select c.id, c.parent from ". getTable('channels')." c left join " 82 . getTable('channels2user') .m" c2u on (c.id=c2u.fkcid) "83 . "inner join " . getTable('folders') . " f on c.parent=f.id"84 . "where f.name like '$sqlid' and f.id > 0";84 . getTable('channels2user') . " c2u on (c.id=c2u.fkcid) " 85 ." inner join " . getTable('folders') . " f on f.id = c.parent " 86 ." where f.name like '$sqlid' and f.id > 0"; 85 87 86 88 if (hidePrivate()) { … … 308 310 309 311 /** mark channel as read **/ 310 $sql = "update " .getTable("i tem")311 ." set unread = unread & ".SET_MODE_READ_STATE." wherecid=$cid";312 $sql = "update " .getTable("i2u") 313 ." set flgunread = 0 where i2u.fkcid=$cid"; 312 314 if (hidePrivate()) { 313 $sql .= " and not(unread & " . RSS_MODE_PRIVATE_STATE . ")";315 $sql .= " and i2u.flgprivate =0"; 314 316 } 315 317 if (count($IdsToMarkAsRead)) { … … 323 325 324 326 $sql = "select count(*) from " .getTable("item2user") . " i2u " 325 ." where i2u.flgunread=1 " 326 ." and i2u.fkcid=$cid" 327 ." and i2u.flgdeleted=0 " 328 ; 327 ." where i2u.flgunread=1 " 328 ." and i2u.fkcid=$cid" 329 ." and i2u.flgdeleted=0 "; 329 330 if (hidePrivate()) { 330 331 $sql .=" and i2u.flgprivate =0"; … … 1181 1182 1182 1183 $sql = "select c.id, c.title from " . getTable("channels") ." c " 1183 . "inner join " . getTable("folders") ." d on d.id = c.parent " ;1184 . "inner join " . getTable("folders") ." d on d.id = c.parent " 1184 1185 . " where not(c.mode & " . RSS_MODE_DELETED_STATE .") "; 1185 1186 -
branches/multiuser/index.php
r1639 r1759 92 92 93 93 rss_plugin_hook('rss.plugins.frontpage.afterread', null); 94 95 94 $GLOBALS['rss'] -> header = new Header("",LOCATION_HOME,array('cid'=>null,'fid'=>null)); 96 95 $GLOBALS['rss'] -> feedList = new FeedList(false); … … 132 131 $sqlWhereHidden = ""; 133 132 134 $unreadItems -> populate("i2u.flgunread=1 & " . RSS_MODE_UNREAD_STATE. $sqlWhereHidden, "", 0, $numItems,ITEM_SORT_HINT_UNREAD);133 $unreadItems -> populate("i2u.flgunread=1 " . $sqlWhereHidden, "", 0, $numItems,ITEM_SORT_HINT_UNREAD); 135 134 //var_dump($unreadItems); 136 135 _pf('end populate unread items'); … … 166 165 167 166 if (getConfig('rss.config.feedgrouping')) { 168 if ($limit <= 0) {167 if ($limit <= 0) { 169 168 return; 170 169 } 171 $sql = "select c2u.fkcid from " . getTable("channels2user") . " c2u " 172 . "inner join " . getTable("folders") ." f on c2u.parent = f.id "; 170 $sql = "select c2u.fkcid from " . getTable("channels2user") . " c2u " 171 . "inner join " . getTable("channels") . " c " 172 . "inner join " . getTable("folders") ." f on c.parent = f.id "; 173 173 174 174 // $sql .= $sqlWhereHidden; … … 177 177 178 178 if (getConfig('rss.config.absoluteordering')) { 179 $sql .= " order by f.position asc, c 2u.position asc";179 $sql .= " order by f.position asc, c.position asc"; 180 180 } else { 181 $sql .=" order by f.name asc, c 2u.title asc";181 $sql .=" order by f.name asc, c.title asc"; 182 182 } 183 183 $res1=rss_query($sql); 184 184 while ($readItems->itemCount < $limit && (list($cid) = rss_fetch_row($res1))) { 185 $sqlWhere = " i2u.flgunread=0 and i.cid= $cid";185 $sqlWhere = " i2u.flgunread=0 and i.cid= $cid"; 186 186 $sqlWhere .= " and i.pubdate <= now() "; 187 187 -
branches/multiuser/opml.php
r1604 r1759 136 136 $sql = "select c.id, c.title, c.url, c.siteurl, d.name, c.parent, c.descr " 137 137 ." from ". getTable("channels") . " c " 138 ."inner join " . getTable("folders") ." d on d.id = c.parent" 138 ."inner join " . getTable("folders") ." d on d.id = c.parent"; 139 139 140 140 if (hidePrivate()) { -
branches/multiuser/plugins.php
r1486 r1759 27 27 28 28 require_once('init.php'); 29 require_once('cls/config.php'); 29 30 30 31 /** -
branches/multiuser/schema.php
r1627 r1759 30 30 require_once('util.php'); 31 31 require_once('cls/user.php'); 32 require_once('cls/l10n.php'); 32 33 33 34 /** … … 90 91 "rating" => trim(getTable("rating")), 91 92 "cache" => trim(getTable("cache")), 92 "users" => trim(getTable("users")), 93 "users" => trim(getTable("users")), 93 94 "dashboard" => trim(getTable("dashboard")), 94 95 "properties" => trim(getTable("properties")), 95 " item2user" => trim(getTable("item2user")),96 " channels2user" => trim(getTable("channels2user"))96 "channels2user" => trim(getTable("channels2user")), 97 "item2user" => trim(getTable("item2user")) 97 98 ); 98 99 return $expected_tables; … … 273 274 . rss_sql_error_message(), RSS_ERROR_ERROR); 274 275 } 275 276 case 'm.fkuid': 277 // userid on metatags - added in 0.5.5 278 rss_query('alter table ' . getTable('metatag') . ' add column fkuid bigint(15) not null'); 279 rss_query('alter table ' . getTable('metatag') . " add index 'fkuid' ('fkuid')"); 280 if (rss_is_sql_error(RSS_SQL_ERROR_NO_ERROR)) { 281 $updated++; 282 rss_error('updated schema for table ' . getTable('metatag'), RSS_ERROR_NOTICE); 283 } else { 284 rss_error('Failed updating schema for table ' . getTable('metatag') . ': ' 285 . rss_sql_error_message(), RSS_ERROR_ERROR); 286 } 287 break; 276 288 break; 277 289 case 'm.fkuid': … … 531 543 enclosure varchar(255) default NULL, 532 544 description text, 533 unread tinyint(4) default '1',534 545 pubdate datetime default NULL, 535 546 author varchar(255) default NULL, … … 585 596 $sql_create = str_replace('__table__',$table, <<< _SQL_ 586 597 CREATE TABLE __table__ ( 587 fid bigint(16) NOT NULL default '0', 588 tid bigint(16) NOT NULL default '0', 598 fid bigint(16) NOT NULL default '0', 599 tid bigint(16) NOT NULL default '0', 589 600 fkuid bigint(16) NOT NULL default '1', 590 ttype enum('item','folder','channel') NOT NULL default 'item', 591 KEY fid (fid), 601 ttype enum('item','folder','channel') NOT NULL default 'item', 602 KEY fid (fid), 592 603 KEY tid (tid), 593 604 KEY fkuid (fkuid), 594 605 KEY ttype (ttype) 595 ) TYPE=MyISAM; 606 ) TYPE=MyISAM; 596 607 _SQL_ 597 608 ); … … 672 683 CREATE TABLE __table__ ( 673 684 uid bigint(16) NOT NULL auto_increment, 674 uname varchar(255) NOT NULL, 675 password varchar(255) NOT NULL, 676 ulevel bigint(11) NOT NULL default '1', 677 realname varchar(255) default NULL, 678 lastip varchar(255) default NULL, 679 userips TEXT default '', 685 uname varchar(255) NOT NULL, 686 password varchar(255) NOT NULL, 687 ulevel bigint(11) NOT NULL default '1', 688 realname varchar(255) default NULL, 689 lastip varchar(255) default NULL, 690 userips TEXT default '', 680 691 lastlogin datetime NULL default '0000-00-00 00:00:00', 681 692 PRIMARY KEY (uid), … … 704 715 } 705 716 706 /////////////////////////////////////////////////////////////////////////////// 717 function _init_channels2user() { 718 $table = getTable('channels2user'); 719 rss_query_wrapper ('DROP TABLE IF EXISTS ' . $table, true, true); 720 $sql_create = str_replace('__table__',$table, <<< _SQL_ 721 CREATE TABLE __table__ ( 722 id bigint(16) not null auto_increment, 723 fkcid bigint(16) NOT NULL, 724 fkuid bigint(16) NOT NULL, 725 flgprivate tinyint(1) NOT NULL default '0', 726 flgdeleted tinyint(1) not null default '0', 727 primary key (id), 728 KEY flgprivate (flgprivate), 729 KEY flgdeleted (flgdeleted), 730 KEY fkuid (fkuid), 731 KEY iids (fkcid) 732 ) ENGINE=MyISAM; 733 _SQL_ 734 ); 735 736 737 rss_query_wrapper($sql_create, false, true); 738 739 if (!rss_is_sql_error(RSS_SQL_ERROR_NO_ERROR)) { 740 rss_error('The ' . $table . 'table doesn\'t exist and I couldn\'t create it! Please create it manually.', RSS_ERROR_ERROR); 741 return 0; 742 } else { 743 $fillSql = "insert into $table " 744 ." (fkcid,fkuid,icon,position,parent,flgprivate,flgdeleted) " 745 ."select id, " . rss_user_id() . ", icon, position, parent, " 746 ." mode & ".RSS_MODE_PRIVATE_STATE." = ".RSS_MODE_PRIVATE_STATE.", " 747 ." mode & ".RSS_MODE_DELETED_STATE." = ".RSS_MODE_DELETED_STATE." " 748 ." from " .getTable('channels') 749 ." where url != ''"; 750 //die($fillSql); 751 rss_query_wrapper($fillSql, false, true); 752 753 rss_query( 754 'update ' .getTable('metatag') .' m ' 755 .'set m.fkuid=' .rss_user_id()); 756 /* 757 $rs = rss_query( "select id, fkcid from " .getTable('channels2user')); 758 $cids=array(); 759 while(list($c2uid,$cid) = rss_fetch_row($rs)) { 760 $cids[$cid]=$c2uid; 761 } 762 */ 763 return rss_is_sql_error(RSS_SQL_ERROR_NO_ERROR); 764 } 765 } 766 707 767 function _init_item2user() { 708 $table = getTable('item2user'); 709 rss_query_wrapper ('DROP TABLE IF EXISTS ' . $table, true, true); 710 $sql_create = str_replace('__table__',$table, <<< _SQL_ 711 CREATE TABLE __table__ ( 712 fkiid bigint(16) NOT NULL, 713 fkuid bigint(16) NOT NULL, 714 fkcid bigint(11) NOT NULL, 715 flgunread tinyint(1) NOT NULL default '1', 716 flgsticky tinyint(1) NOT NULL default '0', 717 flgprivate tinyint(1) NOT NULL default '0', 718 flgdeleted tinyint(1) NOT NULL default '0', 719 flgflagged tinyint(1) NOT NULL default '0', 720 KEY flgunread (flgunread), 721 KEY flgsticky (flgsticky), 722 KEY flgprivate (flgprivate), 723 KEY flgdeleted (flgdeleted), 724 KEY flgflagged (flgflagged), 725 KEY fkuid (fkuid), 726 KEY iids (fkiid) 727 ) ENGINE=MyISAM; 728 _SQL_
