Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.92 by tani, Wed Jun 8 04:27:08 2005 UTC revision 1.93 by aga4096, Tue Jun 14 01:02:20 2005 UTC
# Line 22  Line 22 
22   *   *
23   * $Revision$   * $Revision$
24   * $Log$   * $Log$
25     * Revision 1.93  2005/06/14 01:02:20  aga4096
26     * ・個人Binder向け修正. xnp_extract_public_item_id, xnp_extract_nonbinder_item_id の追加.
27     *
28   * Revision 1.92  2005/06/08 04:27:08  tani   * Revision 1.92  2005/06/08 04:27:08  tani
29   * defaultグループの存在を秘匿した.   * defaultグループの存在を秘匿した.
30   *   *
# Line 3584  result_t insertItem( sessionid_t sid, co Line 3587  result_t insertItem( sessionid_t sid, co
3587                          sql = "SELECT LAST_INSERT_ROWID()";                          sql = "SELECT LAST_INSERT_ROWID()";
3588                      }                      }
3589                      if( ( ret = queryGetUnsignedInt( "insertItem", sql, (unsigned int*)itemid ) ) == RES_OK ){                      if( ( ret = queryGetUnsignedInt( "insertItem", sql, (unsigned int*)itemid ) ) == RES_OK ){
3590                          if( item -> getItemTypeID( ) == item::ITID_BINDER ){                          if( item -> getItemTypeID( ) == item::ITID_INDEX ){
                             //insert into binder index  
                             if( ( ret = registerItem( sid, item::IID_BINDERS, *itemid ) ) == RES_OK ){  
                                 ret = setCertifyState( sid, item::IID_BINDERS, *itemid, index::CERTIFIED );  
                             }  
                         }else if( item -> getItemTypeID( ) == item::ITID_INDEX ){  
3591                              ;// 何もしない                              ;// 何もしない
3592                          }else{                          }else{
3593                              //insert into private index                              //insert into private index
# Line 4064  result_t updateItem( sessionid_t sid, co Line 4062  result_t updateItem( sessionid_t sid, co
4062                              sql += " LEFT JOIN " + dbprefix + "_xoonips_item_basic as ti ON tlink.item_id=ti.item_id ";                              sql += " LEFT JOIN " + dbprefix + "_xoonips_item_basic as ti ON tlink.item_id=ti.item_id ";
4063                              sql += " WHERE (tx.open_level=" + unsignedIntToString( index::OL_PUBLIC );                              sql += " WHERE (tx.open_level=" + unsignedIntToString( index::OL_PUBLIC );
4064                              sql += " OR tx.open_level=" + unsignedIntToString( index::OL_GROUP_ONLY );                              sql += " OR tx.open_level=" + unsignedIntToString( index::OL_GROUP_ONLY );
4065                              sql += ") AND ti.item_type_id!=" + unsignedIntToString( item::ITID_BINDER );                              sql += ") AND tlink.item_id=" + unsignedIntToString( item_id );
                             sql += " AND tlink.item_id=" + unsignedIntToString( item_id );  
4066                              syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );                              syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
4067                              if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){                              if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
4068                                  SQLLEN len = 0;                                  SQLLEN len = 0;
# Line 4211  result_t deleteItem( sessionid_t sid, it Line 4208  result_t deleteItem( sessionid_t sid, it
4208      }      }
4209            
4210      //2. delete item from binders      //2. delete item from binders
4211        // ここでunregisterBinderItemを使うことはできない.なぜならunregisterBinderItemはBinderのlast_update_dateを書き換えてしまうから.
4212      sql = "DELETE FROM " + dbprefix + "_xoonips_binder_item_link ";      sql = "DELETE FROM " + dbprefix + "_xoonips_binder_item_link ";
4213      sql += "WHERE item_id = " + string( unsignedIntToString( itemid ) );      sql += "WHERE item_id = " + string( unsignedIntToString( itemid ) );
4214      if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {      if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
# Line 4318  result_t getPrivateItemID( sessionid_t s Line 4316  result_t getPrivateItemID( sessionid_t s
4316      sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );      sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );
4317      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED );      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED );
4318      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
     sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );  
4319      sql += " AND ( ti.uid=" + unsignedIntToString( sess_uid );      sql += " AND ( ti.uid=" + unsignedIntToString( sess_uid );
4320      sql +=       " OR is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );      sql +=       " OR is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
4321      sql += ")";      sql += ")";
# Line 4333  result_t getPrivateItemID( sessionid_t s Line 4330  result_t getPrivateItemID( sessionid_t s
4330              string notin;              string notin;
4331              sql = "SELECT item_id FROM " + dbprefix + "_xoonips_item_basic";              sql = "SELECT item_id FROM " + dbprefix + "_xoonips_item_basic";
4332              sql += " WHERE item_type_id !=" + unsignedIntToString( item::ITID_INDEX );              sql += " WHERE item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
             sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );  
4333              sql += " AND uid=" + unsignedIntToString( sess_uid );              sql += " AND uid=" + unsignedIntToString( sess_uid );
4334              for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){              for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){
4335                  if( i > 0 ) notin += ", ";                  if( i > 0 ) notin += ", ";
# Line 4485  result_t getGroupItemID( sessionid_t sid Line 4481  result_t getGroupItemID( sessionid_t sid
4481   * 未承認で読めないものも結果に含みません.   * 未承認で読めないものも結果に含みません.
4482   *   *
4483   * @param sid セッションID   * @param sid セッションID
4484   * @param binderid 対象インデックスのID   * @param xid 対象インデックスのID
4485   * @param cri 結果の範囲指定,ソート条件指定   * @param cri 結果の範囲指定,ソート条件指定
4486   * @param iids 登録されたアイテムIDを受け取る引数   * @param iids 登録されたアイテムIDを受け取る引数
4487   * @param iidsLen iidsに格納された個数を受け取る引数   * @param iidsLen iidsに格納された個数を受け取る引数
# Line 4735  bool getCertifyPermission( sessionid_t s Line 4731  bool getCertifyPermission( sessionid_t s
4731          sql += " AND ti.item_id=" + unsignedIntToString( iid );          sql += " AND ti.item_id=" + unsignedIntToString( iid );
4732          sql += " AND tx.index_id=" + unsignedIntToString( xid );          sql += " AND tx.index_id=" + unsignedIntToString( xid );
4733          sql += " AND ( is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );          sql += " AND ( is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
     sql += " OR item_type_id=" + unsignedIntToString( item::ITID_BINDER ); //すべてのバインダーを承認  
4734      if( state == index_t::NOT_CERTIFIED )      if( state == index_t::NOT_CERTIFIED )
4735          sql += " OR ti.uid=" + unsignedIntToString( sess_uid );          sql += " OR ti.uid=" + unsignedIntToString( sess_uid );
4736      sql += string( isModerator( sid, sess_uid ) ? " OR 1)" : " OR 0)" ); //モデレータならOR 1,それ以外は OR 0      sql += string( isModerator( sid, sess_uid ) ? " OR 1)" : " OR 0)" ); //モデレータならOR 1,それ以外は OR 0
# Line 4829  result_t unregisterItem( sessionid_t sid Line 4824  result_t unregisterItem( sessionid_t sid
4824      return ret;      return ret;
4825  }  }
4826    
4827    /** Binderのlast_update_dateを更新する.Binderが公開されていたら、承認待ちにする.
4828     */
4829    result_t touchBinder( const char *functionName, itemid_t binderid ){
4830        // update binder's last update date
4831        string sql = "UPDATE " + dbprefix + "_xoonips_item_basic SET last_update_date="
4832            + unsignedIntToString( time( NULL ) ) + " WHERE item_id="
4833            + unsignedIntToString( binderid );
4834        syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
4835        result_t ret = querySimple( functionName, sql );
4836        
4837        if ( ret == RES_OK ){
4838            // Binderが既に承認済みでかつ自動承認がOFFなら、Binderを承認待ち状態にする
4839            certify_t certify_state = getInitialCertifyStateFromConfig();
4840            if ( certify_state == index::CERTIFY_REQUIRED ){
4841                string sql = "update " + dbprefix + "_xoonips_index_item_link "
4842                 " set certify_state=" + unsignedIntToString(certify_state) +
4843                 " where index_id=" + unsignedIntToString(item::IID_BINDERS) +
4844                 "  and item_id=" + unsignedIntToString(binderid) +
4845                 "  and certify_state=" + unsignedIntToString(index::CERTIFIED);
4846                ret = querySimple( functionName, sql );
4847            }
4848        }
4849        return ret;
4850    }
4851    
4852    
4853    
4854  /**  /**
4855   *   *
4856   * バインダーにアイテムを追加する   * バインダーにアイテムを追加する
# Line 4859  result_t registerBinderItem( sessionid_t Line 4881  result_t registerBinderItem( sessionid_t
4881      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
4882      ret = querySimple( "registerBinderItem", sql );      ret = querySimple( "registerBinderItem", sql );
4883      if( ret == RES_OK ){      if( ret == RES_OK ){
4884          // update binder's last update date          ret = touchBinder("registerBinderItem", binderid);
         sql = "UPDATE " + dbprefix + "_xoonips_item_basic SET last_update_date="  
             + unsignedIntToString( time( NULL ) ) + " WHERE item_id="  
             + unsignedIntToString( binderid );  
         syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );  
         ret = querySimple( "registerBinderItem", sql );  
4885      }      }
4886      return ret;      return ret;
4887  }  }
# Line 4899  result_t unregisterBinderItem( sessionid Line 4916  result_t unregisterBinderItem( sessionid
4916      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
4917      ret = querySimple( "unregisterBinderItem", sql );      ret = querySimple( "unregisterBinderItem", sql );
4918      if( ret == RES_OK ){      if( ret == RES_OK ){
4919          // update binder's last update date          ret = touchBinder("unregisterBinderItem", binderid);
         sql = "UPDATE " + dbprefix + "_xoonips_item_basic SET last_update_date="  
             + unsignedIntToString( time( NULL ) ) + " WHERE item_id="  
             + unsignedIntToString( binderid );  
         syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );  
         ret = querySimple( "unregisterBinderItem", sql );  
4920      }      }
4921      return ret;      return ret;
4922  }  }
# Line 5565  result_t insertIndex( sessionid_t sid, i Line 5577  result_t insertIndex( sessionid_t sid, i
5577          }          }
5578          else {          else {
5579              // 同名の子インデックスがあれば、蹴る              // 同名の子インデックスがあれば、蹴る
             bool conflict = false;  
5580              /* titleの衝突を許可するよう修正。20050516メールより。警告はPHP側で出す。              /* titleの衝突を許可するよう修正。20050516メールより。警告はPHP側で出す。
5581                bool conflict = false;
5582              result = checkTitleConflict( sid, index->getParentIndexID(), index->getTitle(), &conflict );              result = checkTitleConflict( sid, index->getParentIndexID(), index->getTitle(), &conflict );
5583              if ( result != RES_OK ){              if ( result != RES_OK ){
5584                  ;                  ;
# Line 5819  result_t updateIndexInternal( sessionid_ Line 5831  result_t updateIndexInternal( sessionid_
5831          }          }
5832          else if ( newIndex->getParentIndexID() == item::IID_BINDERS ){          else if ( newIndex->getParentIndexID() == item::IID_BINDERS ){
5833              setLastErrorString( "in updateIndex: parent_index_id must not be BINDERS" );              setLastErrorString( "in updateIndex: parent_index_id must not be BINDERS" );
5834              return RES_ERROR; // 親をBinderにすることはできない。              return RES_ERROR; // 親をBindersにすることはできない。
5835          }          }
5836          else if ( newIndex->getParentIndexID() == item::IID_ROOT ){          else if ( newIndex->getParentIndexID() == item::IID_ROOT ){
5837              setLastErrorString( "in updateIndex: cannot change parent_index_id to ROOT" );              setLastErrorString( "in updateIndex: cannot change parent_index_id to ROOT" );
# Line 6942  result_t amazonComplete( const char *url Line 6954  result_t amazonComplete( const char *url
6954      return ret;      return ret;
6955  }  }
6956    
6957    /** Binderが非公開アイテムを含むならtrueを返す. 注意: binder_idがバインダでない場合の動作は保証しない
6958     *
6959     */
6960    bool isBinderContainsNonpublicItem( sessionid_t sid, itemid_t binder_id ){
6961        SQLRETURN sqlcode;
6962        SQLHANDLE hstmt = NULL;
6963        SQLLEN len = 0;
6964        
6965        bool ret = false;
6966        string sql =
6967          " select tbil.item_id, count(tx.index_id) "
6968          "  from "      + dbprefix + "_xoonips_binder_item_link as tbil "
6969          "  left join " + dbprefix + "_xoonips_index_item_link as txil on tbil.item_id=txil.item_id and txil.certify_state = "     + unsignedIntToString(index::CERTIFIED ) +
6970          "  left join " + dbprefix + "_xoonips_index           as tx   on txil.index_id=tx.index_id and tx.open_level = "  + unsignedIntToString(index::OL_PUBLIC) +
6971          "  where "
6972          "    tbil.binder_id = " + unsignedIntToString(binder_id) +
6973          "  group by tbil.item_id ";
6974        setLastErrorString( sql.c_str( ) );
6975        if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
6976            if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
6977                SQLUINTEGER item_id = 0;
6978                SQLUINTEGER ct = 0;
6979                SQLBindCol( hstmt, 1, SQL_C_ULONG, &item_id, 0, &len );
6980                SQLBindCol( hstmt, 2, SQL_C_ULONG, &ct, 0, &len );
6981                while( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){
6982                    syslog_printf( "\nitem_id=%d, ct=%d", item_id, ct );
6983                    if ( ct == 0 ){
6984                        ret = true;
6985                        break;
6986                    }
6987                }
6988            }else{
6989                string s( "SQLExecDirect in isBinderContainsNonpublicItem ");
6990                s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
6991                s += string( ", sql=" ) + string( sql );
6992                setLastErrorString( s.c_str( ) );
6993            }
6994            SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
6995        }else {
6996            string s( "SQLAllocHandle in isBinderContainsNonpublicItem ");
6997            s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
6998            setLastErrorString( s.c_str( ) );
6999        }
7000        return ret;
7001    }
7002    
7003    /**
7004     * iidsの中から公開アイテムのIDを抽出する.
7005     *
7006     * @see freeItemID
7007     * @param sid セッションID
7008     * @param iids item_idの配列
7009     * @param iidssLen iidsの要素数
7010     * @param publicIids 取得結果の配列のポインタを書き込む引数
7011     * @param publicIidsLen 検索結果の数
7012     * @return RES_OK
7013     * @return RES_DB_NOT_INITIALIZED
7014     * @return RES_NO_SUCH_SESSION
7015     * @return RES_DB_QUERY_ERROR
7016     *
7017     */
7018    // 逆に公開アイテム以外のIDを抽出することは難しい.存在しないitem_idを検出することは難しいので.
7019    result_t extractPublicItemId(sessionid_t sid, const itemid_t* iids, int iidsLen, itemid_t **publicIids, int* publicIidsLen )
7020    {
7021        if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
7022        if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
7023        
7024        result_t ret = RES_ERROR;
7025        SQLRETURN sqlcode;
7026        SQLHANDLE hstmt = NULL;
7027        userid_t uid;
7028        
7029        ret = sessionID2UID( sid, &uid );
7030        if( ret != RES_OK ) return ret;
7031        
7032        // 文字列 ',' . implode( ',', iids ) を作成
7033        char *buf = new char[(sizeof(int)*3+1)*iidsLen+1];
7034        buf[0] = '\0';
7035        char *p = buf;
7036        for ( int i = 0; i < iidsLen; i++ ){
7037            int len = sprintf( p, ",%u", iids[i] );
7038            p += len;
7039        }
7040        string iids_str(buf);
7041        delete[] buf;
7042        
7043        
7044        string sql =
7045          " select ti.item_id, count(tx.index_id) "
7046          "  from      " + dbprefix + "_xoonips_item_basic      as ti   "
7047          "  left join " + dbprefix + "_xoonips_index_item_link as txil on ti.item_id=txil.item_id and txil.certify_state = " + unsignedIntToString(index::CERTIFIED ) +
7048          "  left join " + dbprefix + "_xoonips_index           as tx   on txil.index_id=tx.index_id and tx.open_level = "  + unsignedIntToString(index::OL_PUBLIC) +
7049          "  where "
7050          "    ti.item_id in ( 0 " + iids_str + ")"
7051          "  group by ti.item_id ";
7052        if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
7053            if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
7054                SQLLEN len = 0;
7055                SQLUINTEGER itemid = 0;
7056                SQLUINTEGER ct = 0;
7057                SQLBindCol( hstmt, 1, SQL_C_ULONG, &itemid, 0, &len );
7058                SQLBindCol( hstmt, 2, SQL_C_ULONG, &ct, 0, &len );
7059                
7060                *publicIids = new itemid_t[ iidsLen ];
7061                *publicIidsLen = 0;
7062                for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS; i++ ){
7063                    if ( ct != 0 )
7064                        (*publicIids)[ (*publicIidsLen)++ ] = itemid;
7065                }
7066                ret = RES_OK;
7067            }else{
7068                string s( "SQLExecDirect in extractPublicItemId" );
7069                s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
7070                s += string( ", sql=" ) + string( sql );
7071                setLastErrorString( s.c_str( ) );
7072                ret = RES_DB_QUERY_ERROR;
7073            }
7074            SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
7075        }else{
7076            string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in extractPublicItemId" );
7077            s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
7078            setLastErrorString( s.c_str( ) );
7079            ret = RES_ERROR;
7080        }
7081        return ret;
7082    }
7083    
7084    /**
7085     * iidsの中からBinder以外のIDを抽出する.
7086     *
7087     * @see freeItemID
7088     * @param sid セッションID
7089     * @param iids item_idの配列
7090     * @param iidssLen iidsの要素数
7091     * @param nonbinderIids 取得結果の配列のポインタを書き込む引数
7092     * @param nonbinderIidssLen 検索結果の数
7093     * @return RES_OK
7094     * @return RES_DB_NOT_INITIALIZED
7095     * @return RES_NO_SUCH_SESSION
7096     * @return RES_DB_QUERY_ERROR
7097     *
7098     */
7099    result_t extractNonbinderItemId(sessionid_t sid, const itemid_t* iids, int iidsLen, itemid_t **nonbinderIids, int* nonbinderIidsLen )
7100    {
7101        if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
7102        if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
7103        
7104        result_t ret = RES_ERROR;
7105        SQLRETURN sqlcode;
7106        SQLHANDLE hstmt = NULL;
7107        userid_t uid;
7108        
7109        ret = sessionID2UID( sid, &uid );
7110        if( ret != RES_OK ) return ret;
7111        
7112        // 文字列 ',' . implode( ',', iids ) を作成
7113        char *buf = new char[(sizeof(int)*3+1)*iidsLen+1];
7114        buf[0] = '\0';
7115        char *p = buf;
7116        for ( int i = 0; i < iidsLen; i++ ){
7117            int len = sprintf( p, ",%u", iids[i] );
7118            p += len;
7119        }
7120        string iids_str(buf);
7121        delete[] buf;
7122        
7123        
7124        string sql =
7125          " select ti.item_id "
7126          "  from      " + dbprefix + "_xoonips_item_basic      as ti   "
7127          "  where "
7128          "    ti.item_id in ( 0 " + iids_str + ") and ti.item_type_id <> " + unsignedIntToString(item::ITID_BINDER);
7129        if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
7130            if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
7131                SQLLEN len = 0;
7132                SQLUINTEGER itemid = 0;
7133                SQLBindCol( hstmt, 1, SQL_C_ULONG, &itemid, 0, &len );
7134                
7135                *nonbinderIids = new itemid_t[ iidsLen ];
7136                *nonbinderIidsLen = 0;
7137                for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS; i++ ){
7138                    (*nonbinderIids)[ (*nonbinderIidsLen)++ ] = itemid;
7139                }
7140                ret = RES_OK;
7141            }else{
7142                string s( "SQLExecDirect in extractNonbinderItemId" );
7143                s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
7144                s += string( ", sql=" ) + string( sql );
7145                setLastErrorString( s.c_str( ) );
7146                ret = RES_DB_QUERY_ERROR;
7147            }
7148            SQLFreeHandle( SQL_HANDLE_STMT, hstmt );
7149        }else{
7150            string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in extractNonbinderItemId" );
7151            s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
7152            setLastErrorString( s.c_str( ) );
7153            ret = RES_ERROR;
7154        }
7155        return ret;
7156    }
7157    
7158    
7159    
7160    
7161  /**  /**
7162   *   *
7163   * 承認待ち状態のアイテムのうち,承認権限のあるアイテムのIDと登録先インデックスのIDをペアで取得します.   * 承認待ち状態のアイテムのうち,承認権限のあるアイテムのIDと登録先インデックスのIDをペアで取得します.
# Line 6983  result_t getUncertifiedLink( sessionid_t Line 7199  result_t getUncertifiedLink( sessionid_t
7199          sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );          sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );
7200      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFY_REQUIRED );      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFY_REQUIRED );
7201      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
     sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );  
7202          sql += " AND ( is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );          sql += " AND ( is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
7203      sql += string( isModerator( sid, sess_uid ) ? " OR 1)" : " OR 0)" ); //モデレータならOR 1,それ以外は OR 0      sql += string( isModerator( sid, sess_uid ) ? " OR 1)" : " OR 0)" ); //モデレータならOR 1,それ以外は OR 0
7204      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
# Line 7008  result_t getUncertifiedLink( sessionid_t Line 7223  result_t getUncertifiedLink( sessionid_t
7223              SQLBindCol( hstmt, 2, SQL_C_ULONG, &iid, 0, &cbIid );              SQLBindCol( hstmt, 2, SQL_C_ULONG, &iid, 0, &cbIid );
7224              for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){              for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){
7225                  syslog_printf( "\nxid=%d, iid=%d", xid, iid );                  syslog_printf( "\nxid=%d, iid=%d", xid, iid );
7226                  dst_xids[ i ] = xid;                  if ( xid == item::IID_BINDERS ){
7227                  dst_iids[ i ] = iid;                      // ここでBinderが非公開アイテムを含むなら,スキップする.
7228                        if ( isBinderContainsNonpublicItem( sid, iid ) )
7229                            continue;
7230                    }
7231                    
7232                    dst_xids[ *len ] = xid;
7233                    dst_iids[ *len ] = iid;
7234                  ( *len )++;                  ( *len )++;
7235              }              }
7236              ret = RES_OK;              ret = RES_OK;
# Line 7179  result_t getOwnPublicItemID( sessionid_t Line 7400  result_t getOwnPublicItemID( sessionid_t
7400      sql += " WHERE open_level=" + unsignedIntToString( index::OL_PUBLIC );      sql += " WHERE open_level=" + unsignedIntToString( index::OL_PUBLIC );
7401      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED );      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED );
7402      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
     sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );  
7403      sql += " AND ( ti.uid=" + unsignedIntToString( sess_uid );      sql += " AND ( ti.uid=" + unsignedIntToString( sess_uid );
7404      sql +=       " OR is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );      sql +=       " OR is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
7405      sql += ")";      sql += ")";
# Line 7320  result_t getItemCountGroupByIndex( sessi Line 7540  result_t getItemCountGroupByIndex( sessi
7540      return ret;      return ret;
7541  }  }
7542    
   
7543  extern "C" {int zip_main(int, char**);}  extern "C" {int zip_main(int, char**);}
7544  /**  /**
7545   *   *

Legend:
Removed from v.1.92  
changed lines
  Added in v.1.93

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26