| 1 |
/* |
/* |
| 2 |
|
* -------------------------------------------------------------------------- |
| 3 |
|
* XooNiPs Xoops modules for Neuroinformatics Platforms |
| 4 |
|
* Copyright (C) 2005 RIKEN, Japan. All rights reserved. |
| 5 |
|
* http://sourceforge.jp/projects/xoonips/ |
| 6 |
|
* -------------------------------------------------------------------------- |
| 7 |
|
* This program is free software; you can redistribute it and/or |
| 8 |
|
* modify it under the terms of the GNU General Public License |
| 9 |
|
* as published by the Free Software Foundation; either version 2 |
| 10 |
|
* of the License, or (at your option) any later version. |
| 11 |
|
* |
| 12 |
|
* This program is distributed in the hope that it will be useful, |
| 13 |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 |
|
* GNU General Public License for more details. |
| 16 |
|
* |
| 17 |
|
* You should have received a copy of the GNU General Public License |
| 18 |
|
* along with this program; if not, write to the Free Software |
| 19 |
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 20 |
|
* -------------------------------------------------------------------------- |
| 21 |
|
* |
| 22 |
* |
* |
| 23 |
* $Revision$ |
* $Revision$ |
| 24 |
* $Log$ |
* $Log$ |
| 25 |
|
* Revision 1.86 2005/03/15 04:49:40 tani |
| 26 |
|
* ライセンス文を追加. |
| 27 |
|
* |
| 28 |
* Revision 1.85 2005/03/14 09:30:50 aga4096 |
* Revision 1.85 2005/03/14 09:30:50 aga4096 |
| 29 |
* ・getItemCountByIndexで、作成者・グループ管理者は未承認アイテムをカウントするよう修正. |
* ・getItemCountByIndexで、作成者・グループ管理者は未承認アイテムをカウントするよう修正. |
| 30 |
* |
* |
| 414 |
static void setLastErrorString( const char* str ); |
static void setLastErrorString( const char* str ); |
| 415 |
static result_t checkTitleConflict( sessionid_t sid, indexid_t parentIndexID, const char *title, bool *conflict ); |
static result_t checkTitleConflict( sessionid_t sid, indexid_t parentIndexID, const char *title, bool *conflict ); |
| 416 |
|
|
| 417 |
void syslog_printf( char* format, ... ) |
static void syslog_printf( char* format, ... ) |
| 418 |
{ |
{ |
| 419 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 420 |
va_list ap; |
va_list ap; |
| 939 |
|
|
| 940 |
/** |
/** |
| 941 |
* |
* |
| 942 |
* データベースの初期化 |
* データベースと接続する |
| 943 |
* |
* |
| 944 |
* @param dsn DSN |
* @param dsn ODBCのDSN |
| 945 |
* @param user データベースにアクセスするユーザ名 |
* @param user データベースにアクセスするユーザ名 |
| 946 |
* @param password 上記ユーザのパスワード |
* @param password 上記ユーザのパスワード |
| 947 |
* @param dbname ダミー |
* @param reserve 未使用(NULL) |
| 948 |
* @param prefix XOOPSデータベーステーブルのPREFIX |
* @param prefix XOOPSデータベーステーブルのPREFIX |
| 949 |
* @param dbtype DBTYPE_MYSQL or DBTYPE_SQLITE |
* @param type DBTYPE_MYSQL or DBTYPE_SQLITE |
| 950 |
* @return RES_OK |
* @return RES_OK |
| 951 |
* @return RES_DB_INITIALIZE_ERROR |
* @return RES_DB_INITIALIZE_ERROR |
| 952 |
* @return RES_DB_CONNECT_ERROR |
* @return RES_DB_CONNECT_ERROR |
| 953 |
* @refer result_t |
* @see result_t |
| 954 |
*/ |
*/ |
| 955 |
result_t initializeDB( const char* dsn, const char* user, const char* password, const char* dbname, const char* prefix, dbtype_t type ) |
result_t initializeDB( const char* dsn, const char* user, const char* password, const char* reserve, const char* prefix, dbtype_t type ) |
| 956 |
{ |
{ |
| 957 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 958 |
|
|
| 983 |
return RES_DB_INITIALIZE_ERROR; |
return RES_DB_INITIALIZE_ERROR; |
| 984 |
} |
} |
| 985 |
//ログインに5秒以上要したらタイムアウトする設定 |
//ログインに5秒以上要したらタイムアウトする設定 |
| 986 |
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); |
//SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); |
| 987 |
|
|
| 988 |
if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){ |
if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){ |
| 989 |
string s( "SQLConnect in initializeDB " ); |
string s( "SQLConnect in initializeDB " ); |
| 998 |
|
|
| 999 |
/** |
/** |
| 1000 |
* |
* |
| 1001 |
* DB接続があれば、それを開放する。 |
* 現在DBと接続中であれば、それを解放する。 |
| 1002 |
* |
* |
| 1003 |
* @param なし |
* @param なし |
| 1004 |
* @return RES_OK |
* @return RES_OK |
| 1070 |
* @param uid 変更したいユーザのUID |
* @param uid 変更したいユーザのUID |
| 1071 |
* @param activate 承認(true) / 未承認(false)の指定 |
* @param activate 承認(true) / 未承認(false)の指定 |
| 1072 |
* @return RES_OK |
* @return RES_OK |
| 1073 |
|
* @return RES_ERROR |
| 1074 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 1075 |
* @return RES_NO_SUCH_USER |
* @return RES_NO_SUCH_USER |
| 1076 |
|
* @return RES_NO_SUCH_SESSION |
| 1077 |
|
* @return RES_DB_NOT_INITIALIZED; |
| 1078 |
*/ |
*/ |
| 1079 |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
| 1080 |
{ |
{ |
| 1123 |
* アカウント数を取得する. |
* アカウント数を取得する. |
| 1124 |
* |
* |
| 1125 |
* @param sid セッションID |
* @param sid セッションID |
| 1126 |
* @return アカウント数 |
* @return アカウント数(失敗時は0) |
| 1127 |
* |
* |
| 1128 |
*/ |
*/ |
| 1129 |
int getAccountCount( sessionid_t sid ) |
int getAccountCount( sessionid_t sid ) |
| 1283 |
* @return RES_NO_SUCH_USER |
* @return RES_NO_SUCH_USER |
| 1284 |
* @return RES_NO_SUCH_SESSION |
* @return RES_NO_SUCH_SESSION |
| 1285 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 1286 |
|
* @see freeAccount |
| 1287 |
* |
* |
| 1288 |
*/ |
*/ |
| 1289 |
result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc ) |
result_t getAccount( sessionid_t sid, userid_t uid, const account_t** acc ) |
| 1309 |
* @return RES_DB_NOT_INITIALIZED |
* @return RES_DB_NOT_INITIALIZED |
| 1310 |
* @return RES_NO_SUCH_SESSION |
* @return RES_NO_SUCH_SESSION |
| 1311 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 1312 |
|
* @see freeAccount |
| 1313 |
* |
* |
| 1314 |
*/ |
*/ |
| 1315 |
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, criteria_t* cri, const account_t** accounts, int* accountsLen ) |
| 1429 |
|
|
| 1430 |
/** |
/** |
| 1431 |
* |
* |
| 1432 |
* アカウント登録. |
* アカウント登録 |
| 1433 |
* |
* |
| 1434 |
* ユーザ情報をデータベースに登録します. |
* ユーザ情報をデータベースに登録します. |
| 1435 |
* 登録したユーザ情報に対応するユーザIDをuidに格納します. |
* 登録したユーザ情報に対応するユーザIDをuidに格納します. |
| 1715 |
/** |
/** |
| 1716 |
* |
* |
| 1717 |
* アカウント情報を変更する. |
* アカウント情報を変更する. |
| 1718 |
* |
* accountのuidに,変更対象ユーザのIDをセットしてください. |
| 1719 |
* |
* |
| 1720 |
* @param sid セッションID |
* @param sid セッションID |
| 1721 |
* @param account 変更したいアカウント情報 |
* @param account 変更したいアカウント情報 |
| 1983 |
* @return RES_DB_NOT_INITIALIZED |
* @return RES_DB_NOT_INITIALIZED |
| 1984 |
* @return RES_NO_SUCH_SESSION |
* @return RES_NO_SUCH_SESSION |
| 1985 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 1986 |
* |
* @see freeUID |
| 1987 |
*/ |
*/ |
| 1988 |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1989 |
{ |
{ |
| 2101 |
* @return RES_NO_SUCH_USER |
* @return RES_NO_SUCH_USER |
| 2102 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 2103 |
* @return RES_OK |
* @return RES_OK |
| 2104 |
* |
* @see freeGID |
| 2105 |
*/ |
*/ |
| 2106 |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 2107 |
{ |
{ |
| 2187 |
* @param uid ユーザのUID |
* @param uid ユーザのUID |
| 2188 |
* @return true 管理権限あり |
* @return true 管理権限あり |
| 2189 |
* @return false 管理権限なし,または不明 |
* @return false 管理権限なし,または不明 |
| 2190 |
* |
* @see |
| 2191 |
*/ |
*/ |
| 2192 |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 2193 |
{ |
{ |
| 3034 |
* @param uid IDを代入したい変数のポインタ |
* @param uid IDを代入したい変数のポインタ |
| 3035 |
* @return RES_ERROR |
* @return RES_ERROR |
| 3036 |
* @return RES_OK |
* @return RES_OK |
| 3037 |
* @refer result_t |
* @see result_t |
| 3038 |
* |
* |
| 3039 |
*/ |
*/ |
| 3040 |
result_t getUid( const char* uname, userid_t* uid ) |
result_t getUid( const char* uname, userid_t* uid ) |
| 3237 |
|
|
| 3238 |
/** |
/** |
| 3239 |
* |
* |
| 3240 |
* セッションの作成.<br> |
* セッションの作成. |
| 3241 |
* XOOPSのsessionテーブルに記録されたsess_idと引数sess_idが等しく、 |
* XOOPSのsessionテーブルに記録されたsess_idと引数sess_idが等しく、 |
| 3242 |
* uidがPlatformユーザとしてactivateされていればsessionid_tを作成する。 |
* uidがPlatformユーザとしてactivateされていればsessionid_tを作成する。 |
| 3243 |
* データベースにセッションと引数の情報を記録する |
* データベースにセッションと引数の情報を記録する |
| 3294 |
|
|
| 3295 |
/** |
/** |
| 3296 |
* |
* |
| 3297 |
* セッションの詳細をsession_tで取得する.<br> |
* セッションの詳細をsession_tで取得する. |
| 3298 |
* |
* |
| 3299 |
* @param sid セッションID |
* @param sid セッションID |
| 3300 |
* @param ppsession sessionid_t*を受け取るためのポインタ。 |
* @param ppsession sessionid_t*を受け取るためのポインタ。 |
| 3519 |
* アイテム情報取得. |
* アイテム情報取得. |
| 3520 |
* 取得したアイテムは,使用後freeItemで解放する. |
* 取得したアイテムは,使用後freeItemで解放する. |
| 3521 |
* |
* |
| 3522 |
* @refer freeItem |
* @see freeItem |
| 3523 |
* @param sid セッションID |
* @param sid セッションID |
| 3524 |
* @param iid 取得したいアイテムのID |
* @param iid 取得したいアイテムのID |
| 3525 |
* @param item 結果のアイテム情報を受け取る引数 |
* @param item 結果のアイテム情報を受け取る引数 |
| 3548 |
* アイテム情報取得. |
* アイテム情報取得. |
| 3549 |
* 取得したアイテムは,使用後freeItemで解放する. |
* 取得したアイテムは,使用後freeItemで解放する. |
| 3550 |
* |
* |
| 3551 |
* @refer freeItem |
* @see freeItem |
| 3552 |
* @param sid セッションID |
* @param sid セッションID |
| 3553 |
* @param iids 取得したいアイテムのIDの配列 |
* @param iids 取得したいアイテムのIDの配列 |
| 3554 |
* @param iidsLen iids配列の要素数 |
* @param iidsLen iids配列の要素数 |
| 3681 |
|
|
| 3682 |
/** |
/** |
| 3683 |
* |
* |
| 3684 |
* Readアクセス可能なアイテムの数をかえす |
* Readアクセス可能なアイテムの数をかえす. |
| 3685 |
* 失敗したときは0をかえします. |
* 失敗したときは0をかえします. |
| 3686 |
* |
* |
| 3687 |
* @param sid セッションID |
* @param sid セッションID |
| 3738 |
* アイテムIDの一覧取得. |
* アイテムIDの一覧取得. |
| 3739 |
* アクセス可能なアイテムのIDを返す. |
* アクセス可能なアイテムのIDを返す. |
| 3740 |
* |
* |
| 3741 |
* @refer freeItemID |
* @see freeItemID |
| 3742 |
* @param sid セッションID |
* @param sid セッションID |
| 3743 |
* @param cri 結果の範囲指定,ソート条件指定 |
* @param cri 結果の範囲指定,ソート条件指定 |
| 3744 |
* @param iids 取得結果の配列のポインタを書き込む引数 |
* @param iids 取得結果の配列のポインタを書き込む引数 |
| 4150 |
|
|
| 4151 |
/** |
/** |
| 4152 |
* |
* |
| 4153 |
* 個人の非公開アイテムのIDを取得します. |
* 個人の非公開アイテムのIDを取得します. |
| 4154 |
* 公開インデックスに登録承認されたものは結果に含みません |
* 公開インデックスに登録承認されたものは結果に含みません |
| 4155 |
* |
* |
| 4156 |
* @param sid セッションID |
* @param sid セッションID |
| 4352 |
|
|
| 4353 |
/** |
/** |
| 4354 |
* |
* |
| 4355 |
* インデックスに登録されたアイテムのIDを取得します. |
* インデックスに登録されたアイテムのIDを取得します. |
| 4356 |
* 権限が無くて読めないものは結果に含みません. |
* 権限が無くて読めないものは結果に含みません. |
| 4357 |
* 未承認で読めないものも結果に含みません. |
* 未承認で読めないものも結果に含みません. |
| 4358 |
* |
* |
| 4523 |
/** |
/** |
| 4524 |
* |
* |
| 4525 |
* アイテムの承認状態を取得します. |
* アイテムの承認状態を取得します. |
| 4526 |
* @refer certify_t |
* @see certify_t |
| 4527 |
* @param sid セッションID |
* @param sid セッションID |
| 4528 |
* @param xid 対象アイテムが登録されているインデックスのID |
* @param xid 対象アイテムが登録されているインデックスのID |
| 4529 |
* @param iid 対象アイテムのID |
* @param iid 対象アイテムのID |
| 4549 |
/** |
/** |
| 4550 |
* |
* |
| 4551 |
* アイテムの承認状態を変更します. |
* アイテムの承認状態を変更します. |
| 4552 |
* @refer certify_t |
* @see certify_t |
| 4553 |
* @param sid セッションID |
* @param sid セッションID |
| 4554 |
* @param xid 変更対象アイテムが登録されているインデックスのID |
* @param xid 変更対象アイテムが登録されているインデックスのID |
| 4555 |
* @param iid 変更対象アイテムのID |
* @param iid 変更対象アイテムのID |
| 4573 |
/** |
/** |
| 4574 |
* |
* |
| 4575 |
* アイテムの承認状態を変更する権限の有無を調べます. |
* アイテムの承認状態を変更する権限の有無を調べます. |
| 4576 |
* @refer certify_t |
* @see certify_t |
| 4577 |
* @param sid セッションID |
* @param sid セッションID |
| 4578 |
* @param xid 変更対象アイテムが登録されているインデックスのID |
* @param xid 変更対象アイテムが登録されているインデックスのID |
| 4579 |
* @param iid 変更対象アイテムのID |
* @param iid 変更対象アイテムのID |
| 4616 |
return count > 0; |
return count > 0; |
| 4617 |
} |
} |
| 4618 |
|
|
|
result_t getOverlappedItems( sessionid_t sid, indexid_t xid, item_t* item, itemid_t** iids, int* iidsLen ){ return RES_ERROR; } |
|
|
|
|
| 4619 |
/** |
/** |
| 4620 |
* |
* |
| 4621 |
* インデックスにアイテムを追加する. |
* インデックスにアイテムを追加する. |
| 4782 |
* |
* |
| 4783 |
* アイテムへのアクセス権限をチェックする |
* アイテムへのアクセス権限をチェックする |
| 4784 |
* |
* |
| 4785 |
* @refer itemop_t |
* @see itemop_t |
| 4786 |
* @param sid セッションID |
* @param sid セッションID |
| 4787 |
* @param iid チェック対象となるアイテムのID |
* @param iid チェック対象となるアイテムのID |
| 4788 |
* @param op アクセスの種類 |
* @param op アクセスの種類 |
| 4845 |
* |
* |
| 4846 |
* インデックスへのアクセス権限をチェックする |
* インデックスへのアクセス権限をチェックする |
| 4847 |
* |
* |
| 4848 |
* @refer indexop_t |
* @see indexop_t |
| 4849 |
* @param sid セッションID |
* @param sid セッションID |
| 4850 |
* @param xid チェック対象となるインデックスのID |
* @param xid チェック対象となるインデックスのID |
| 4851 |
* @param op アクセスの種類 |
* @param op アクセスの種類 |
| 5259 |
|
|
| 5260 |
|
|
| 5261 |
|
|
| 5262 |
/** parentXIDの直下のインデックスのsort_numberの最大値+1 を求める。parentXIDの値が有効かどうかは判断しない。 |
/** parentXIDの直下のインデックスのsort_numberの最大値+1 を求める. parentXIDの値が有効かどうかは判断しない。 |
| 5263 |
* ROOT直下はsort_numberの埋め方が異なるので、この関数では処理できない。 |
* ROOT直下はsort_numberの埋め方が異なるので、この関数では処理できない。 |
| 5264 |
* @param parentXID 親index_id |
* @param parentXID 親index_id |
| 5265 |
* @param sortNumber max(sort_number)+1 |
* @param sortNumber max(sort_number)+1 |
| 5471 |
return result; |
return result; |
| 5472 |
} |
} |
| 5473 |
|
|
| 5474 |
/** 内部で使用。xidの子孫(xidを含む)のインデックスのIDを全て取得する。delete[] *descndexIDが必要。 |
/** 内部で使用。xidの子孫(xidを含む)のインデックスのIDを全て取得する. |
| 5475 |
* @param xid 対象 |
* delete[] *descndexIDが必要。 |
| 5476 |
* @param descXID 子孫を受け取る配列 |
* @param xid 対象 |
| 5477 |
* @param descXIDLen descXIDの配列長 |
* @param descXID 子孫を受け取る配列 |
| 5478 |
*/ |
* @param descXIDLen descXIDの配列長 |
| 5479 |
|
*/ |
| 5480 |
result_t getDescendantIndexID( int xid, indexid_t **descXID, int *descXIDLen ){ |
result_t getDescendantIndexID( int xid, indexid_t **descXID, int *descXIDLen ){ |
| 5481 |
// todo |
// todo |
| 5482 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 6199 |
|
|
| 6200 |
/** |
/** |
| 6201 |
* |
* |
| 6202 |
* 設定名keyに対応する値をvauleに取得する. |
* 設定名keyに対応する値をvauleに取得する. |
| 6203 |
* valueの使用後はfreeStringで解放する. |
* valueの使用後はfreeStringで解放する. |
| 6204 |
* @param key 設定キー名 |
* @param key 設定キー名 |
| 6205 |
* @param value 設定値を受け取るポインタ |
* @param value 設定値を受け取るポインタ |
| 6998 |
|
|
| 6999 |
/** |
/** |
| 7000 |
* |
* |
| 7001 |
* 指定ユーザの作成アイテムで,一般公開されているアイテムのIDを取得します. |
* 指定ユーザの作成アイテムで,一般公開されているアイテムのIDを取得します. |
| 7002 |
* 一般ユーザは自分以外のアイテムを取得できない. |
* 一般ユーザは自分以外のアイテムを取得できない. |
| 7003 |
* |
* |
| 7004 |
* @param sid セッションID |
* @param sid セッションID |
| 7180 |
} |
} |
| 7181 |
|
|
| 7182 |
|
|
| 7183 |
|
extern "C" {int zip_main(int, char**);} |
| 7184 |
/** |
/** |
| 7185 |
* |
* |
| 7186 |
|
* zipファイルを作成します. |
| 7187 |
* |
* |
| 7188 |
|
* @param zippath 作成するzipファイルのパス |
| 7189 |
|
* @param files zipファイルに入れたいファイル名の配列 |
| 7190 |
|
* @param filesLen filesに指定したファイルの数 |
| 7191 |
|
* @return 0 成功 |
| 7192 |
|
* @return 0以外 失敗 |
| 7193 |
* |
* |
| 7194 |
*/ |
*/ |
|
extern "C" {int zip_main(int, char**);} |
|
| 7195 |
result_t zipCreate( char* zippath, char** files, int filesLen ) |
result_t zipCreate( char* zippath, char** files, int filesLen ) |
| 7196 |
{ |
{ |
| 7197 |
char** argv = new char*[filesLen+3]; |
char** argv = new char*[filesLen+3]; |