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.49 by youi, Sat Jan 22 09:30:58 2005 UTC revision 1.50 by youi, Mon Jan 24 01:54:38 2005 UTC
# Line 2  Line 2 
2   *   *
3   * $Revision$   * $Revision$
4   * $Log$   * $Log$
5     * Revision 1.50  2005/01/24 01:54:38  youi
6     * 引数の型修飾を変更.
7     *  dumpItemID, getItemIDByBinderID, getItemIDByIndexID
8     * 関数追加
9     *  getPrivateItemID, getUncertifiedLink
10     *
11   * Revision 1.49  2005/01/22 09:30:58  youi   * Revision 1.49  2005/01/22 09:30:58  youi
12   * setLastErrorStringの宣言を追加した.   * setLastErrorStringの宣言を追加した.
13   *   *
# Line 3356  result_t getItems( sessionid_t sid, cons Line 3362  result_t getItems( sessionid_t sid, cons
3362   * @return RES_DB_QUERY_ERROR   * @return RES_DB_QUERY_ERROR
3363   *   *
3364   */   */
3365  result_t dumpItemID(sessionid_t sid, criteria_t* c, itemid_t** iids, int* iidsLen )  result_t dumpItemID(sessionid_t sid, criteria_t* c, const itemid_t** iids, int* iidsLen )
3366  {  {
3367      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
3368      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
# Line 3663  result_t deleteItem( sessionid_t sid, it Line 3669  result_t deleteItem( sessionid_t sid, it
3669   * @return RES_ERROR   * @return RES_ERROR
3670   *   *
3671   */   */
3672  /*  result_t getPrivateItemID( sessionid_t sid, userid_t uid, const itemid_t** iids, int* iidsLen )
 result_t getPrivateItemID( sessionid_t sid, userid_t uid, itemid_t** iids, int* iidsLen )  
3673  {  {
3674      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
3675      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
3676            
3677        int i = 0;
3678        SQLHANDLE hstmt = NULL, hstmt2 = NULL;
3679      result_t ret = RES_ERROR;      result_t ret = RES_ERROR;
3680      itemid_t* dst = 0;      itemid_t* dst = 0;
3681      string sql;      string sql;
# Line 3677  result_t getPrivateItemID( sessionid_t s Line 3684  result_t getPrivateItemID( sessionid_t s
3684      userid_t sess_uid;      userid_t sess_uid;
3685            
3686      if( ( ret = sessionID2UID( sid, &sess_uid ) ) != RES_OK ) return ret;      if( ( ret = sessionID2UID( sid, &sess_uid ) ) != RES_OK ) return ret;
     if( !isModeratorBySession( sid ) && uid != sess_uid ) return RES_NO_READ_ACCESS_RIGHT;  
3687            
3688      sql  = "SELECT DISTINCT ti.item_id";      //SELECT 自アイテム NOT IN ( 公開承認されたアイテム )
3689        sql = "SELECT DISTINCT tlink.item_id";
3690      sql += " FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink";      sql += " FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink";
3691      sql += " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id = tx.index_id";      sql += " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id=tx.index_id";
3692      sql += " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id = ti.item_id";      sql += " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id=ti.item_id";
3693      sql += " WHERE ( open_level <= " + unsignedIntToString( index::OL_GROUP_ONLY );      sql += " LEFT JOIN " + dbprefix + "_xnpaccount_groups_users_link AS tgulink ON tgulink.gid = tx.gid AND tx.open_level=" + unsignedIntToString( index::OL_GROUP_ONLY );
3694      sql += " AND certify_state < " + unsignedIntToString( index::CERTIFIED );      sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );
3695      sql += " OR open_level=" + unsignedIntToString( index::OL_PRIVATE ) + " ) ";      sql += " AND certify_state=" + unsignedIntToString( index::CERTIFIED );
3696      sql += " AND ti.uid=" + unsignedIntToString( uid );      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
3697      fprintf( stderr, "\nsql at %d=%s", __LINE__, sql.c_str() );      sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );
3698      if( countResultRows( sql.c_str(), &count ) == RES_OK ){      sql += " AND ( ti.uid=" + unsignedIntToString( sess_uid );
3699          dst = new itemid_t[ count ];      sql +=       " OR is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
3700          *iids = dst;      sql += ")";
3701      }else{      //fprintf( stderr, "\nsql at %d=%s", __LINE__, sql.c_str() );
         return RES_ERROR;  
     }  
       
3702      if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {      if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
3703          if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){          if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
3704              itemid_t iid;              itemid_t iid = 0;
3705              SQLINTEGER len = 0;              SQLINTEGER cbIid = 0;
3706              SQLBindCol( hstmt, 1, SQL_C_ULONG, &iid, 0, &len );              SQLBindCol( hstmt, 1, SQL_C_ULONG, &iid, 0, &cbIid );
3707              *iidsLen = 0;              
3708              for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < count ; i++ ){              string notin;
3709                  dst[ i ] = iid;              sql = "SELECT item_id FROM " + dbprefix + "_xnpaccount_item_basic";
3710                  (*iidsLen)++;              sql += " WHERE item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
3711                sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );
3712                sql += " AND uid=" + unsignedIntToString( sess_uid );
3713                for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){
3714                    if( i > 0 ) notin += ", ";
3715                    notin += unsignedIntToString( iid );
3716              }              }
3717              ret = RES_OK;              if( i > 0 ) sql += " AND item_id NOT IN ( " + notin + " )";
3718          }else{  /*
3719              string s( "SQLExecDirect in getPrivateItemID " );              else{
3720                    dst = new itemid_t[ 0 ];
3721                    *iids = dst;
3722                    *iidsLen = 0;
3723                    return RES_OK;
3724                }
3725    */
3726                //fprintf( stderr, "\nsql at %d=%s", __LINE__, sql.c_str() );
3727                
3728                if( countResultRows( sql.c_str(), &count ) == RES_OK ){
3729                    dst = new itemid_t[ count ];
3730                    *iids = dst;
3731                }else{
3732                    return RES_ERROR;
3733                }
3734                
3735                if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) {
3736                    if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
3737                        itemid_t iid;
3738                        SQLINTEGER len = 0;
3739                        SQLBindCol( hstmt2, 1, SQL_C_ULONG, &iid, 0, &len );
3740                        *iidsLen = 0;
3741                        for( int i = 0; ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS && i < count ; i++ ){
3742                            dst[ i ] = iid;
3743                            (*iidsLen)++;
3744                        }
3745                        ret = RES_OK;
3746                    }else{
3747                        string s( "SQLExecDirect in getUncertifiedItemID " );
3748                        s += odbcDiagString( SQL_HANDLE_STMT, hstmt2, sqlcode );
3749                        s += "sql=";
3750                        s += string( sql );
3751                        setLastErrorString( s.c_str( ) );
3752                        ret = RES_DB_QUERY_ERROR;
3753                    }
3754                    SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 );
3755                }else{
3756                    string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getUncertifiedItemID" );
3757                    s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
3758                    setLastErrorString( s.c_str( ) );
3759                    ret = RES_ERROR;
3760                }
3761            }else {
3762                string s( "SQLExecDirect in getUncertifiedItemID " );
3763              s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );              s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
3764              s += "sql=";              s += ", sql=";
3765              s += string( sql );              s += string( sql );
3766              setLastErrorString( s.c_str( ) );              setLastErrorString( s.c_str( ) );
3767              ret = RES_DB_QUERY_ERROR;              ret = RES_DB_QUERY_ERROR;
3768          }          }
         SQLFreeHandle( SQL_HANDLE_STMT, hstmt );  
3769      }else{      }else{
3770          string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getPrivateItemID" );          string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getUncertifiedItemID" );
3771          s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );          s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
3772          setLastErrorString( s.c_str( ) );          setLastErrorString( s.c_str( ) );
3773          ret = RES_ERROR;          ret = RES_ERROR;
3774      }      }
3775    
3776      return ret;      return ret;
3777  }  }
 */  
3778    
3779  /**  /**
3780   *   *
# Line 3743  result_t getPrivateItemID( sessionid_t s Line 3794  result_t getPrivateItemID( sessionid_t s
3794   * @return RES_ERROR   * @return RES_ERROR
3795   *   *
3796   */   */
3797  result_t getItemIDByIndexID( sessionid_t sid, indexid_t xid, criteria_t* cri, itemid_t** iids, int* iidsLen )  result_t getItemIDByIndexID( sessionid_t sid, indexid_t xid, criteria_t* cri, const itemid_t** iids, int* iidsLen )
3798  {  {
3799      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
3800      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
# Line 3829  result_t getItemIDByIndexID( sessionid_t Line 3880  result_t getItemIDByIndexID( sessionid_t
3880   * @return RES_ERROR   * @return RES_ERROR
3881   *   *
3882   */   */
3883  result_t getItemIDByBinderID( sessionid_t sid, itemid_t binderid, criteria_t* cri, itemid_t** iids, int* iidsLen )  result_t getItemIDByBinderID( sessionid_t sid, itemid_t binderid, criteria_t* cri, const itemid_t** iids, int* iidsLen )
3884  {  {
3885      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
3886      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
# Line 6082  result_t amazonComplete( const char *url Line 6133  result_t amazonComplete( const char *url
6133    
6134  /**  /**
6135   *   *
6136   * 承認待ち状態のアイテムのうち,承認権限のあるアイテムのIDを取得します   * 承認待ち状態のアイテムのうち,承認権限のあるアイテムのIDと登録先インデックスのIDをペアで取得します.
6137     * アイテムiids[i]が現在xids[i]への登録の承認待ち状態にあることを返します.
6138   *   *
6139   * @param sid セッションID   * @param sid セッションID
6140   * @param uid 対象ユーザのID   * @param xids 承認待ちアイテムを登録するインデックスIDを受け取る引数
6141   * @param iids 登録されたアイテムIDを受け取る引数   * @param iids 承認待ちアイテムIDを受け取る引数
6142   * @param iidsLen iidsに格納された個数を受け取る引数   * @param len iids,xidsに格納された個数を受け取る引数
6143   * @return RES_OK   * @return RES_OK
6144   * @return RES_DB_NOT_INITIALIZED   * @return RES_DB_NOT_INITIALIZED
6145   * @return RES_NO_SUCH_SESSION   * @return RES_NO_SUCH_SESSION
# Line 6095  result_t amazonComplete( const char *url Line 6147  result_t amazonComplete( const char *url
6147   * @return RES_ERROR   * @return RES_ERROR
6148   *   *
6149   */   */
6150  /*  result_t getUncertifiedLink( sessionid_t sid, const itemid_t** xids, const itemid_t** iids, int* len )
6151  result_t getPrivateItemID( sessionid_t sid, userid_t uid, itemid_t** iids, int* iidsLen )  {
6152          SELECT *      if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED;
6153          FROM xtest_xnpaccount_index_item_link AS tlink      if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
6154          LEFT JOIN xtest_xnpaccount_index AS tx ON tlink.index_id = tx.index_id AND tx.open_level<=2 AND tlink.certify_state=1      
6155          LEFT JOIN xtest_xnpaccount_groups_users_link as tgulink ON tx.gid=tgulink.gid AND ( tx.open_level=2 AND tgulink.is_admin=1 AND tgulink.uid=190 OR 0 )      int i = 0;
6156          WHERE tx.index_id IS NOT NULL AND ( is_admin=1 AND tlink.certify_state=1 OR tlink.certify_state=1 AND 0 )      SQLHANDLE hstmt = NULL, hstmt2 = NULL;
6157  */      result_t ret = RES_ERROR;
6158        itemid_t* dst_iids = 0;
6159        indexid_t* dst_xids = 0;
6160        string sql;
6161        SQLRETURN sqlcode;
6162        SQLINTEGER count = 0;
6163        userid_t sess_uid;
6164        
6165        if( ( ret = sessionID2UID( sid, &sess_uid ) ) != RES_OK ) return ret;
6166        
6167            sql = "SELECT DISTINCT tlink.index_id, tlink.item_id";
6168            sql += " FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink";
6169            sql += " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id = tx.index_id";
6170            sql += " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id = ti.item_id";
6171            sql += " LEFT JOIN " + dbprefix + "_xnpaccount_groups_users_link AS tgulink ON tgulink.gid = tx.gid AND tx.open_level =" + unsignedIntToString( index::OL_GROUP_ONLY );;
6172            sql += " WHERE open_level<=" + unsignedIntToString( index::OL_GROUP_ONLY );
6173        sql += " AND certify_state=" + unsignedIntToString( index::CERTIFY_REQUIRED );
6174        sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_INDEX );
6175        sql += " AND item_type_id !=" + unsignedIntToString( item::ITID_BINDER );
6176            sql += " AND ( is_admin=1 AND tgulink.uid=" + unsignedIntToString( sess_uid );
6177        sql += string( isModerator( sid, sess_uid ) ? " OR 1)" : " OR 0)" ); //モデレータならOR 1,それ以外は OR 0
6178        //fprintf( stderr, "\nsql at %d=%s", __LINE__, sql.c_str() );
6179    
6180        if( countResultRows( sql.c_str(), &count ) == RES_OK ){
6181            dst_xids = new indexid_t[ count ];
6182            *xids = dst_xids;
6183            dst_iids = new itemid_t[ count ];
6184            *iids = dst_iids;
6185        }else{
6186            return RES_ERROR;
6187        }
6188        
6189        *len = 0;
6190        if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) {
6191            if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){
6192                indexid_t xid = 0;
6193                SQLINTEGER cbXid = 0;
6194                itemid_t iid = 0;
6195                SQLINTEGER cbIid = 0;
6196                SQLBindCol( hstmt, 1, SQL_C_ULONG, &xid, 0, &cbXid );
6197                SQLBindCol( hstmt, 2, SQL_C_ULONG, &iid, 0, &cbIid );
6198                for( i = 0 ; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ; i++ ){
6199                    //fprintf( stderr, "\nxid=%d, iid=%d", xid, iid );
6200                    dst_xids[ i ] = xid;
6201                    dst_iids[ i ] = iid;
6202                    ( *len )++;
6203                }
6204                ret = RES_OK;
6205            }else {
6206                string s( "SQLExecDirect in getUncertifiedItemID " );
6207                s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode );
6208                s += ", sql=";
6209                s += string( sql );
6210                setLastErrorString( s.c_str( ) );
6211                ret = RES_DB_QUERY_ERROR;
6212            }
6213        }else{
6214            string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getUncertifiedItemID" );
6215            s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode );
6216            setLastErrorString( s.c_str( ) );
6217            ret = RES_ERROR;
6218        }
6219        return ret;
6220    }
6221    

Legend:
Removed from v.1.49  
changed lines
  Added in v.1.50

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