« Back to History
karigar_login_edit.php
|
20260721_154032.php
Initial Bulk Import
Copy Code
<?php /* ============================================================================= File: /erp/karigar_login_edit.php Purpose: Edit (update/delete) existing karigar logins (not users table). Table : loom_karigar_login Scope : Page-local only; company-scoped. Notes: - Inline CSS removed. - Uses existing header/footer (which load main.css). - Original auth/login lines kept exactly as-is. ============================================================================ */ error_reporting(E_ALL); ini_set('display_errors',1); /* ----- ORIGINAL AUTH (kept as-is) ----- */ require __DIR__ . '/modules/auth/auth.php'; require_login(); $u = auth_user(); $company_id = (int)$u['company_id']; $user_id = (int)$u['id']; /* PDO bootstrap (local) */ $pdo = $GLOBALS['pdo'] ?? null; if(!$pdo){ require __DIR__ . '/core/db.php'; } /* helpers */ function h($s){ return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); } function pv($k,$d=null){ return isset($_POST[$k])?trim((string)$_POST[$k]):$d; } function gv($k,$d=null){ return isset($_GET[$k])?trim((string)$_GET[$k]):$d; } /* Ensure table exists (safe no-op if present) */ $pdo->exec("CREATE TABLE IF NOT EXISTS loom_karigar_login ( id BIGINT PRIMARY KEY AUTO_INCREMENT, company_id BIGINT NOT NULL, karigar_id BIGINT NOT NULL, username VARCHAR(80) NOT NULL, pass_hash VARCHAR(255) NOT NULL, active TINYINT(1) DEFAULT 1, last_login DATETIME NULL, last_ip VARCHAR(45) NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uniq_user (company_id, username), UNIQUE KEY uniq_kid (company_id, karigar_id), INDEX(company_id, active) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); /* Karigar master map (for labels) */ $KAR = []; $st = $pdo->prepare("SELECT id, karigar_name, entry_name FROM loom_karigar_master WHERE company_id=? AND is_active=1 ORDER BY karigar_name"); $st->execute([$company_id]); foreach($st as $r){ $KAR[(int)$r['id']] = $r['karigar_name'] . ($r['entry_name'] ? ' ('.$r['entry_name'].')' : ''); } /* Load record if id provided */ $id = (int)gv('id', 0); $rec = null; if ($id > 0) { $q = $pdo->prepare("SELECT l.*, k.karigar_name, k.entry_name FROM loom_karigar_login l JOIN loom_karigar_master k ON k.id=l.karigar_id AND k.company_id=l.company_id WHERE l.company_id=? AND l.id=?"); $q->execute([$company_id, $id]); $rec = $q->fetch(PDO::FETCH_ASSOC); } /* Handle submit (update/delete) */ $flash = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = pv('action','update'); // update|delete $edit_id = (int)pv('id', 0); // hidden id $username = pv('username',''); $password = pv('password',''); // optional $active = (int)pv('active',1); // Fetch to confirm ownership & existence $q = $pdo->prepare("SELECT company_id, karigar_id FROM loom_karigar_login WHERE id=? AND company_id=?"); $q->execute([$edit_id, $company_id]); $own = $q->fetch(PDO::FETCH_ASSOC); if (!$own) { $flash = 'Record not found or not in your company.'; } else { if ($action === 'delete') { $pdo->prepare("DELETE FROM loom_karigar_login WHERE id=? AND company_id=?")->execute([$edit_id,$company_id]); $flash = 'Login deleted.'; // Clear current record view $rec = null; $id = 0; } else { // Update validations if ($username === '') { $flash = 'Username required.'; } elseif (strlen($password) > 0 && strlen($password) < 4) { $flash = 'Password min 4 chars if provided.'; } else { // Uniqueness of username per company (excluding self) $chk = $pdo->prepare("SELECT id FROM loom_karigar_login WHERE company_id=? AND username=? AND id<>?"); $chk->execute([$company_id, $username, $edit_id]); if ($chk->fetchColumn()) { $flash = 'This username is already taken in your company.'; } else { $args = [$username, $active]; $sql = "UPDATE loom_karigar_login SET username=?, active=?"; if ($password !== '') { $hash = password_hash($password, PASSWORD_BCRYPT); $sql .= ", pass_hash=?"; $args[] = $hash; } $sql .= " WHERE id=? AND company_id=?"; $args[] = $edit_id; $args[] = $company_id; $pdo->prepare($sql)->execute($args); $flash = 'Login updated.'; // Reload record to reflect changes $q2 = $pdo->prepare("SELECT l.*, k.karigar_name, k.entry_name FROM loom_karigar_login l JOIN loom_karigar_master k ON k.id=l.karigar_id AND k.company_id=l.company_id WHERE l.company_id=? AND l.id=?"); $q2->execute([$company_id, $edit_id]); $rec = $q2->fetch(PDO::FETCH_ASSOC); $id = $edit_id; } } } } } /* List all for left pane */ $list = $pdo->prepare("SELECT l.id, l.karigar_id, l.username, l.active, k.karigar_name, k.entry_name FROM loom_karigar_login l JOIN loom_karigar_master k ON k.id=l.karigar_id AND k.company_id=l.company_id WHERE l.company_id=? ORDER BY k.karigar_name"); $list->execute([$company_id]); $rows = $list->fetchAll(PDO::FETCH_ASSOC); /* page meta for header.php (optional but allowed) */ $PAGE_NAME = 'karigar_login_edit'; $PAGE_TITLE = 'Edit Karigar Login'; $PAGE_HEADING = 'Edit Karigar Login'; /* include global header (enforces auth and loads main.css) */ require_once __DIR__ . '/partials/header.php'; ?> <div class="card"> <h2>Edit Karigar Login</h2> <div class="headerlinks" style="margin-bottom:8px"> <a href="karigar_login_create.php">← Create Karigar Login</a> </div> <?php if($flash): ?><div class="flash"><?= h($flash) ?></div><?php endif; ?> <div class="grid"> <!-- LEFT: list --> <div class="card"> <table class="table"> <thead> <tr><th>Karigar</th><th>Username</th><th>Status</th><th></th></tr> </thead> <tbody> <?php foreach($rows as $r): $nm = $r['karigar_name'] . ($r['entry_name'] ? ' ('.$r['entry_name'].')' : ''); ?> <tr> <td><?= h($nm) ?></td> <td><?= h($r['username']) ?></td> <td> <?php if($r['active']): ?> <span class="badge on">Active</span> <?php else: ?> <span class="badge off">Inactive</span> <?php endif; ?> </td> <td><a href="?id=<?= (int)$r['id'] ?>">Edit</a></td> </tr> <?php endforeach; ?> <?php if(empty($rows)): ?> <tr><td colspan="4" class="small">No logins yet.</td></tr> <?php endif; ?> </tbody> </table> </div> <!-- RIGHT: edit form --> <div class="card"> <?php if(!$rec): ?> <div class="small">Left list se <b>Edit</b> क्लिक करें.</div> <?php else: $kar_label = ($rec['karigar_name'] ?? '') . (!empty($rec['entry_name']) ? ' ('.$rec['entry_name'].')' : ''); ?> <form method="post"> <input type="hidden" name="id" value="<?= (int)$rec['id'] ?>"> <div class="row"> <div> <label>Karigar</label> <input value="<?= h($kar_label) ?>" readonly> <div class="small">Karigar mapping बदला नहीं जा सकता (एक karigar पर एक login).</div> </div> <div> <label>Username</label> <input name="username" value="<?= h($rec['username']) ?>" required> </div> <div> <label>New Password (optional)</label> <input name="password" type="password" placeholder="leave blank to keep same"> </div> <div> <label>Status</label> <select name="active"> <option value="1" <?= (int)$rec['active']===1?'selected':'' ?>>Active</option> <option value="0" <?= (int)$rec['active']===0?'selected':'' ?>>Inactive</option> </select> </div> </div> <div class="actions mt-12"> <button class="btn" type="submit" name="action" value="update">Save Changes</button> <button class="btn danger" type="submit" name="action" value="delete" onclick="return confirm('Delete this login? This cannot be undone.');">Delete</button> </div> <div class="small mt-8">Password खाली छोड़ने पर पुराना पासवर्ड वैसा ही रहेगा.</div> </form> <?php endif; ?> </div> </div> </div> <?php /* include footer */ require_once __DIR__ . '/partials/footer.php';