diff --git a/application/controllers/mockup/usergroup/Usergroupv4.php b/application/controllers/mockup/usergroup/Usergroupv4.php index 77c6e364..5bdddf38 100644 --- a/application/controllers/mockup/usergroup/Usergroupv4.php +++ b/application/controllers/mockup/usergroup/Usergroupv4.php @@ -139,16 +139,21 @@ class Usergroupv4 extends MY_Controller } $prm = $this->sys_input; - $group_id = $prm['group_id']; - $search = $prm['search']; - - $sql = "select menu.S_MenuID as id, CONCAT(menu.S_MenuName,' [ ',menuparent.S_MenuName,' ]') as name, CONCAT('one-ui-lab/',menu.S_MenuUrl) as url, menuparent.S_MenuName as group_name - FROM s_menu menu - LEFT JOIN s_menu menuparent ON menu.S_MenuParentS_MenuID = menuparent.S_MenuID - WHERE - menu.S_MenuUrl <> '#' AND menu.S_MenuIsActive = 'Y' AND menu.S_MenuName LIKE CONCAT('%','{$search}','%')"; - $sql_param = array($search); - $query = $this->db_onedev->query($sql, $sql_param); + $group_id = $prm['group_id']; + $search = isset($prm['search']) ? trim($prm['search']) : ''; + + $sql = "select menu.S_MenuID as id, CONCAT(menu.S_MenuName,' [ ',menuparent.S_MenuName,' ]') as name, CONCAT('one-ui-lab/',menu.S_MenuUrl) as url, menuparent.S_MenuName as group_name + FROM s_menu menu + LEFT JOIN s_menu menuparent ON menu.S_MenuParentS_MenuID = menuparent.S_MenuID + WHERE + menu.S_MenuUrl <> '#' AND menu.S_MenuIsActive = 'Y' + AND ( + menu.S_MenuName LIKE CONCAT('%', ?, '%') + OR CONCAT('one-ui-lab/', menu.S_MenuUrl) LIKE CONCAT('%', ?, '%') + OR menu.S_MenuUrl LIKE CONCAT('%', ?, '%') + )"; + $sql_param = array($search, $search, $search); + $query = $this->db_onedev->query($sql, $sql_param); // echo $this->db_onedev->last_query(); if ($query) { $rows = $query->result_array(); @@ -157,8 +162,8 @@ class Usergroupv4 extends MY_Controller exit; } - - $result = array("total" => $total, "total_filter" => count($rows), "records" => $rows); + $total = count($rows); + $result = array("total" => $total, "total_filter" => $total, "records" => $rows); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); diff --git a/scripts/upload_ibl_committed_files.sh b/scripts/upload_ibl_committed_files.sh new file mode 100755 index 00000000..86632706 --- /dev/null +++ b/scripts/upload_ibl_committed_files.sh @@ -0,0 +1,133 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +TARGET="${UPLOAD_TARGET:-ibl_tentarapelajar}" +REMOTE_HOST="${UPLOAD_REMOTE_HOST:-10.9.20.31}" +REMOTE_USER="${UPLOAD_REMOTE_USER:-one}" +REMOTE_PATH="${UPLOAD_REMOTE_PATH:-/home/one/project/one/one-api-lab/}" +PRIVATE_KEY_PATH="${UPLOAD_PRIVATE_KEY_PATH:-/Users/fajrihardhitamurti/id_rsa}" +MODE="commit" +REF="HEAD" +DRY_RUN=0 + +usage() { + cat <<'EOF' +Usage: upload_ibl_committed_files.sh [commit|range] [REF] [--dry-run] + +Modes: + commit [REF] Upload added/copied/modified files from one commit (default: HEAD) + range [A..B] Upload added/copied/modified files from a git revision range + +Examples: + ./upload-ibl + ./upload-ibl commit HEAD + ./upload-ibl range HEAD~3..HEAD + ./upload-ibl --dry-run +EOF +} + +log() { + printf '[upload-ibl] %s\n' "$*" +} + +fail() { + printf '[upload-ibl] %s\n' "$*" >&2 + exit 1 +} + +while [[ $# -gt 0 ]]; do + case "$1" in + commit|range) + MODE="$1" + shift + if [[ $# -gt 0 ]] && [[ "$1" != --* ]]; then + REF="$1" + shift + fi + ;; + --dry-run) + DRY_RUN=1 + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + fail "Unknown argument: $1" + ;; + esac +done + +git -C "$ROOT_DIR" rev-parse --is-inside-work-tree >/dev/null 2>&1 || fail "Not inside a git worktree" +[[ -f "$PRIVATE_KEY_PATH" ]] || fail "Private key not found: $PRIVATE_KEY_PATH" + +tmpdir="$(mktemp -d)" +trap 'rm -rf "$tmpdir"' EXIT +changed_list="$tmpdir/changed-files.txt" +skipped_list="$tmpdir/skipped-files.txt" + +case "$MODE" in + commit) + git -C "$ROOT_DIR" rev-parse --verify "$REF^{commit}" >/dev/null 2>&1 || fail "Invalid commit ref: $REF" + git -C "$ROOT_DIR" diff-tree --no-commit-id --root --diff-filter=ACM --name-only -r "$REF" > "$changed_list" + git -C "$ROOT_DIR" diff-tree --no-commit-id --root --diff-filter=DR --summary -r "$REF" > "$skipped_list" || true + ;; + range) + git -C "$ROOT_DIR" rev-parse --verify "${REF##*..}^{commit}" >/dev/null 2>&1 || fail "Invalid range end: $REF" + git -C "$ROOT_DIR" diff --diff-filter=ACM --name-only "$REF" > "$changed_list" + git -C "$ROOT_DIR" diff --diff-filter=DR --summary "$REF" > "$skipped_list" || true + ;; + *) + fail "Unknown mode: $MODE" + ;; +esac + +if [[ ! -s "$changed_list" ]]; then + log "No added/copied/modified files found for $MODE $REF" + if [[ -s "$skipped_list" ]]; then + log "Skipped delete/rename changes:" + sed 's/^/[upload-ibl] /' "$skipped_list" + fi + exit 0 +fi + +changed_paths=() +while IFS= read -r path; do + [[ -n "$path" ]] || continue + case "$path" in + graphify-out/*) + continue + ;; + esac + changed_paths+=("$path") +done < "$changed_list" + +if [[ "${#changed_paths[@]}" -eq 0 ]]; then + log "No deployable files found for $MODE $REF" + exit 0 +fi + +log "Uploading ${#changed_paths[@]} path(s) from $MODE $REF to $TARGET" +rsync_opts=(-az --progress --human-readable --relative --exclude='.git/' --exclude='.DS_Store') +if [[ "$DRY_RUN" -eq 1 ]]; then + rsync_opts+=(--dry-run) +fi + +SSH_CMD="ssh -i $PRIVATE_KEY_PATH -o BatchMode=yes -o StrictHostKeyChecking=accept-new" +destination="${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH%/}/" + +pushd "$ROOT_DIR" >/dev/null +if rsync "${rsync_opts[@]}" -e "$SSH_CMD" "${changed_paths[@]}" "$destination"; then + log "Done: $TARGET" +else + fail "Upload failed: $TARGET" +fi +popd >/dev/null + +if [[ -s "$skipped_list" ]]; then + log "Skipped delete/rename changes:" + sed 's/^/[upload-ibl] /' "$skipped_list" +fi diff --git a/upload-ibl b/upload-ibl new file mode 100755 index 00000000..6b821223 --- /dev/null +++ b/upload-ibl @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +exec "$SCRIPT_DIR/scripts/upload_ibl_committed_files.sh" "$@"