publicity != SQUARE_PUBLIC && $sq->publicity != SQUARE_AUTH && $sq->publicity != SQUARE_PRIVATE) die('Ewrong_publicity'); if(!($sq->start_time)) $sq->start_time = date('Y-m-d H:i:s'); if(!($sq->end_time)) $sq->start_time = null; if(strlen($sq->sqname)==0) die('Esqname_too_short'); if(strlen($sq->sqname)>SQUARE_NAME_LEN_MAX) die('Esqname_too_long'); if(strlen($sq->sqmodname)==0) die('Esqmodname_empty'); $res = square::add($sqlc, $sq); if(!$res) die('Eadd_sq_failed'); $res2 = square::add_user($sqlc, $_COOKIE['uid'], $res->sqid, SQUARE_USER_ADMIN); if(!$res2) die('Eadd_admin_failed'); echo('S'); } if($action == 'delete_sq') { //Delete exist square. level USER_LEVEL_SUPERADMIN or above required. //data : sqid $sq = json_decode($data); if(!sec_is_login()) die('Eno_login'); if(!sec_check_level($sqlc, USER_LEVEL_SUPERADMIN)) die('Epermission_denied'); $sqid = intval($sq->sqid); if(!square::get($sqlc, $sqid)) die('Eno_such_sq'); $res = square::del($sqlc, $sqid); if(!$res) die('Edelete_failed'); echo('S'); } if($action == 'edit_sq') { //edit exist square. level USER_LEVEL_SUPERADMIN / SQUARE_USER_ADMIN or above required. //data: sqid, sqname, publicity, [start_time, end_time], sqmodname $sq = json_decode($data); if(!sec_is_login()) die('Eno_login'); $sqid = intval($sq->sqid); if(!square::get($sqlc, $sqid)) die('Eno_such_sq'); if(!sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) && !(square::get_user_relationship($sqlc, $_COOKIE['uid'], $sqid)>=SQUARE_USER_ADMIN)) die('Epermission_denied'); if($sq->publicity != SQUARE_PUBLIC && $sq->publicity != SQUARE_AUTH && $sq->publicity != SQUARE_PRIVATE) die('Ewrong_publicity'); if(!($sq->start_time) && $sq->end_time) $sq->start_time = date('Y-m-d H:i:s'); if(strlen($sq->sqname)==0) die('Esqname_too_short'); if(strlen($sq->sqname)>SQUARE_NAME_LEN_MAX) die('Esqname_too_long'); if(strlen($sq->sqmodname)==0) die('Esqmodname_empty'); $res = square::edit($sqlc, $sqid, $sq); if(!$res) die('Eedit_failed'); echo('S'); } if($action == 'get_sq') { //get exist square data //data: sqid $sq = json_decode($data); $sqid = intval($sq->sqid); $ret = square::get($sqlc, $sqid); if(!$ret) die('Eno_such_sq'); echo(json_encode($ret)); } if($action == 'add_user') { //add user to exist square //data: uid, sqid $dt = json_decode($data); if(!sec_is_login()) die('Eno_login'); $uid = intval($dt->uid); $sqid = intval($dt->sqid); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $sq = square::get($sqlc, $sqid); if(!$sq) die('Eno_such_sq'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) || (square::get_user_relationship($sqlc, $_COOKIE['uid'], $sqid)>=SQUARE_USER_ADMIN); if($uid != intval($_COOKIE['uid']) && !$adm) die('Epermission_denied'); $rela = SQUARE_USER_ACTIVE; if(!$adm) { if($sq->publicity == SQUARE_AUTH) $rela = SQUARE_USER_PENDING; if($sq->publicity == SQUARE_PRIVATE) die('Eprivate_square'); } if(square::get_user_relationship($sqlc, $uid, $sqid)) die('Ealready_entered'); $ret = square::add_user($sqlc, $uid, $sqid, $rela); if(!$ret) die('Eadd_user_failed'); echo('S'); } if($action == 'delete_user') { //delete user from user-square relation //data : uid, sqid $dt = json_decode($data); if(!sec_is_login()) die('Eno_login'); $uid = intval($dt->uid); $sqid = intval($dt->sqid); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $sq = square::get($sqlc, $sqid); if(!$sq) die('Eno_such_sq'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) || (square::get_user_relationship($sqlc, $_COOKIE['uid'], $sqid)>=SQUARE_USER_ADMIN); if($uid != intval($_COOKIE['uid']) && !$adm) die('Epermission_denied'); if(!square::get_user_relationship($sqlc, $uid, $sqid)) die('Enot_entered'); $ret = square::del_user($sqlc, $uid, $sqid); if(!$ret) die('Edelete_user_failed'); echo('S'); } if($action == 'edit_user_relationship') { //edit user relationship. //data: uid, sqid, relationship $dt = json_decode($data); if(!sec_is_login()) die('Eno_login'); $uid = intval($dt->uid); $sqid = intval($dt->sqid); $rel = intval($dt->relationship); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $sq = square::get($sqlc, $sqid); if(!$sq) die('Eno_such_sq'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) || (square::get_user_relationship($sqlc, $_COOKIE['uid'], $sqid)>=SQUARE_USER_ADMIN); if(!$adm) die('Epermission_denied'); if(!square::get_user_relationship($sqlc, $uid, $sqid)) die('Enot_entered'); if($rel!=SQUARE_USER_PENDING && $rel!=SQUARE_USER_ACTIVE && $rel!=SQUARE_USER_ADMIN) die('Ewrong_relationship'); $ret = square::set_user_relationship($sqlc, $uid, $sqid, $rel); if(!$ret) die('Eedit_user_relationship_failed'); echo('S'); } if($action == 'get_available_sq') { //get all available square data: sqid, start_time, end_time, publicity, sqname for given uid. //only USER_LEVEL_SUPERADMIN can see SQUARE_PRIVATE squares. //data: (no) if(!sec_is_login()) die('Eno_login'); $uid = intval($_COOKIE['uid']); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN); $pub = 2; if($adm) $pub = 1; $list = square::get_available_sq($sqlc, $uid, $pub); $ret = new stdClass; $ret->list = $list; $ret->timestamp = date('Y-m-d H:i:s'); echo(json_encode($ret)); } if($action == 'get_entered_sq') { //get all entered square data: sqid, start_time, end_time, publicity, sqname, relationship for given uid. //data: (no) if(!sec_is_login()) die('Eno_login'); $uid = intval($_COOKIE['uid']); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $list = square::get_entered_sq($sqlc, $uid); $ret = new stdClass; $ret->list = $list; $ret->timestamp = date('Y-m-d H:i:s'); echo(json_encode($ret)); } if($action == 'add_pro_into_sq') { if(!sec_is_login()) die('Eno_login'); $uid = intval($_COOKIE['uid']); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $dt = json_decode($data); if(!problem::is_available($sqlc, $dt->proid)) die('Ewrong_proid'); if(!square::get($sqlc, $dt->sqid)) die('Ewrong_sqid'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) || square::get_user_relationship($sqlc, $uid, $dt->sqid) >= SQUARE_USER_ADMIN; if(!$adm) die('Enot_square_admin'); if(square::is_pro_in_sq($sqlc, $dt->proid, $dt->sqid)) die('Ealready_in_square'); $ret = square::add_pro($sqlc, $dt->proid, $dt->sqid); if(!$ret) die('Eadd_problem_into_square_failed'); echo('S'); } if($action == 'delete_pro_from_sq') { if(!sec_is_login()) die('Eno_login'); $uid = intval($_COOKIE['uid']); $usr = user::get_from_uid($sqlc, $uid); if(!$usr) die('Eno_such_user'); $dt = json_decode($data); if(!square::get($sqlc, $dt->sqid)) die('Ewrong_sqid'); $adm = sec_check_level($sqlc, USER_LEVEL_SUPERADMIN) || square::get_user_relationship($sqlc, $uid, $dt->sqid) >= SQUARE_USER_ADMIN; if(!$adm) die('Enot_square_admin'); if(!square::is_pro_in_sq($sqlc, $dt->proid, $dt->sqid)) die('Enot_in_square'); $ret = square::del_pro($sqlc, $dt->proid, $dt->sqid); if(!$ret) die('Edelete_problem_from_square_failed'); echo('S'); } db_close($sqlc); ?>