= $mpc || $mode&Spell::CURSED) && $rl); if($t_shift){ Q::wire__bump($literal, $tid); Generate::catalist_order(X::$node); } Generate::catalist_entry(X::$node, $tid); if($rl){ Generate::append(X::$node, $tid, $pid); } else { Generate::thread(X::$node, $tid); } Generate::chunk(X::$node, $tid); return $pid; } static function read($literal, $pid){ if(empty($literal) || !isset(X::$tree[$literal], X::$mode)){ deny("[request::read] Invalid prerequisites ({$literal}/{$pid})"); } $tid = self::parent($literal, $pid); Katana::node($literal); if(!isset($tid, X::$cata[$tid])){ deny("Post #{$pid}::{$tid} does not exist"); } $post = Q::post__read($literal, $pid); if($post){ $files = Q::post__files($literal, $tid, $pid); return Generate::prepare($literal, $tid, $post); } deny("(4004) Unable to find the post ({$literal}/{$pid})"); } static function update($id, $mode=0){ fail(501); return false; } static function delete($id, $mode=0){ fail(501); return false; } static function parent($literal, $id){ if(!isset(X::$tree[$literal])){ deny(E::post__literal($literal)); } $search = Q::post__find($literal, $id); if(empty($search)){ deny(E::post__fail($id)); } return ((intval($search[1]) == 0) ? $search[0] : $search[1]); } }