/** * REST API: WP_REST_Taxonomies_Controller class * * @package WordPress * @subpackage REST_API * @since 4.7.0 */ /** * Core class used to manage taxonomies via the REST API. * * @since 4.7.0 * * @see WP_REST_Controller */ class WP_REST_Taxonomies_Controller extends WP_REST_Controller { /** * Constructor. * * @since 4.7.0 */ public function __construct() { $this->namespace = 'wp/v2'; $this->rest_base = 'taxonomies'; } /** * Registers the routes for taxonomies. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'taxonomy' => array( 'description' => __( 'An alphanumeric identifier for the taxonomy.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read taxonomies. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { if ( ! empty( $request['type'] ) ) { $taxonomies = get_object_taxonomies( $request['type'], 'objects' ); } else { $taxonomies = get_taxonomies( '', 'objects' ); } foreach ( $taxonomies as $taxonomy ) { if ( ! empty( $taxonomy->show_in_rest ) && current_user_can( $taxonomy->cap->assign_terms ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all public taxonomies. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { // Retrieve the list of registered collection query parameters. $registered = $this->get_collection_params(); if ( isset( $registered['type'] ) && ! empty( $request['type'] ) ) { $taxonomies = get_object_taxonomies( $request['type'], 'objects' ); } else { $taxonomies = get_taxonomies( '', 'objects' ); } $data = array(); foreach ( $taxonomies as $tax_type => $value ) { if ( empty( $value->show_in_rest ) || ( 'edit' === $request['context'] && ! current_user_can( $value->cap->assign_terms ) ) ) { continue; } $tax = $this->prepare_item_for_response( $value, $request ); $tax = $this->prepare_response_for_collection( $tax ); $data[ $tax_type ] = $tax; } if ( empty( $data ) ) { // Response should still be returned as a JSON object when it is empty. $data = (object) $data; } return rest_ensure_response( $data ); } /** * Checks if a given request has access to a taxonomy. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, otherwise false or WP_Error object. */ public function get_item_permissions_check( $request ) { $tax_obj = get_taxonomy( $request['taxonomy'] ); if ( $tax_obj ) { if ( empty( $tax_obj->show_in_rest ) ) { return false; } if ( 'edit' === $request['context'] && ! current_user_can( $tax_obj->cap->assign_terms ) ) { return new WP_Error( 'rest_forbidden_context', __( 'Sorry, you are not allowed to manage terms in this taxonomy.' ), array( 'status' => rest_authorization_required_code() ) ); } } return true; } /** * Retrieves a specific taxonomy. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $tax_obj = get_taxonomy( $request['taxonomy'] ); if ( empty( $tax_obj ) ) { return new WP_Error( 'rest_taxonomy_invalid', __( 'Invalid taxonomy.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $tax_obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a taxonomy object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$taxonomy` to `$item` to match parent class for PHP 8 named parameter support. * * @param WP_Taxonomy $item Taxonomy data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $taxonomy = $item; $base = ! empty( $taxonomy->rest_base ) ? $taxonomy->rest_base : $taxonomy->name; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $taxonomy->label; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $taxonomy->name; } if ( in_array( 'capabilities', $fields, true ) ) { $data['capabilities'] = $taxonomy->cap; } if ( in_array( 'description', $fields, true ) ) { $data['description'] = $taxonomy->description; } if ( in_array( 'labels', $fields, true ) ) { $data['labels'] = $taxonomy->labels; } if ( in_array( 'types', $fields, true ) ) { $data['types'] = array_values( $taxonomy->object_type ); } if ( in_array( 'show_cloud', $fields, true ) ) { $data['show_cloud'] = $taxonomy->show_tagcloud; } if ( in_array( 'hierarchical', $fields, true ) ) { $data['hierarchical'] = $taxonomy->hierarchical; } if ( in_array( 'rest_base', $fields, true ) ) { $data['rest_base'] = $base; } if ( in_array( 'rest_namespace', $fields, true ) ) { $data['rest_namespace'] = $taxonomy->rest_namespace; } if ( in_array( 'visibility', $fields, true ) ) { $data['visibility'] = array( 'public' => (bool) $taxonomy->public, 'publicly_queryable' => (bool) $taxonomy->publicly_queryable, 'show_admin_column' => (bool) $taxonomy->show_admin_column, 'show_in_nav_menus' => (bool) $taxonomy->show_in_nav_menus, 'show_in_quick_edit' => (bool) $taxonomy->show_in_quick_edit, 'show_ui' => (bool) $taxonomy->show_ui, ); } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = rest_ensure_response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $response->add_links( $this->prepare_links( $taxonomy ) ); } /** * Filters a taxonomy returned from the REST API. * * Allows modification of the taxonomy data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param WP_Taxonomy $item The original taxonomy object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_taxonomy', $response, $taxonomy, $request ); } /** * Prepares links for the request. * * @since 6.1.0 * * @param WP_Taxonomy $taxonomy The taxonomy. * @return array Links for the given taxonomy. */ protected function prepare_links( $taxonomy ) { return array( 'collection' => array( 'href' => rest_url( sprintf( '%s/%s', $this->namespace, $this->rest_base ) ), ), 'https://api.w.org/items' => array( 'href' => rest_url( rest_get_route_for_taxonomy_items( $taxonomy->name ) ), ), ); } /** * Retrieves the taxonomy's schema, conforming to JSON Schema. * * @since 4.7.0 * @since 5.0.0 The `visibility` property was added. * @since 5.9.0 The `rest_namespace` property was added. * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'taxonomy', 'type' => 'object', 'properties' => array( 'capabilities' => array( 'description' => __( 'All capabilities used by the taxonomy.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'description' => array( 'description' => __( 'A human-readable description of the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'hierarchical' => array( 'description' => __( 'Whether or not the taxonomy should have children.' ), 'type' => 'boolean', 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'labels' => array( 'description' => __( 'Human-readable labels for the taxonomy for various contexts.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, ), 'name' => array( 'description' => __( 'The title for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'slug' => array( 'description' => __( 'An alphanumeric identifier for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'show_cloud' => array( 'description' => __( 'Whether or not the term cloud should be displayed.' ), 'type' => 'boolean', 'context' => array( 'edit' ), 'readonly' => true, ), 'types' => array( 'description' => __( 'Types associated with the taxonomy.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit' ), 'readonly' => true, ), 'rest_base' => array( 'description' => __( 'REST base route for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'rest_namespace' => array( 'description' => __( 'REST namespace route for the taxonomy.' ), 'type' => 'string', 'context' => array( 'view', 'edit', 'embed' ), 'readonly' => true, ), 'visibility' => array( 'description' => __( 'The visibility settings for the taxonomy.' ), 'type' => 'object', 'context' => array( 'edit' ), 'readonly' => true, 'properties' => array( 'public' => array( 'description' => __( 'Whether a taxonomy is intended for use publicly either via the admin interface or by front-end users.' ), 'type' => 'boolean', ), 'publicly_queryable' => array( 'description' => __( 'Whether the taxonomy is publicly queryable.' ), 'type' => 'boolean', ), 'show_ui' => array( 'description' => __( 'Whether to generate a default UI for managing this taxonomy.' ), 'type' => 'boolean', ), 'show_admin_column' => array( 'description' => __( 'Whether to allow automatic creation of taxonomy columns on associated post-types table.' ), 'type' => 'boolean', ), 'show_in_nav_menus' => array( 'description' => __( 'Whether to make the taxonomy available for selection in navigation menus.' ), 'type' => 'boolean', ), 'show_in_quick_edit' => array( 'description' => __( 'Whether to show the taxonomy in the quick/bulk edit panel.' ), 'type' => 'boolean', ), ), ), ), ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } /** * Retrieves the query params for collections. * * @since 4.7.0 * * @return array Collection parameters. */ public function get_collection_params() { $new_params = array(); $new_params['context'] = $this->get_context_param( array( 'default' => 'view' ) ); $new_params['type'] = array( 'description' => __( 'Limit results to taxonomies associated with a specific post type.' ), 'type' => 'string', ); return $new_params; } } SOG Afghánistán 2007 – První setkání s nepřítelem část 4. – THOR Tac
Rubriky

SOG Afghánistán 2007 – První setkání s nepřítelem část 4.

„Máte zelenou”, opakuji “Máte zelenou, jděte na to.“ ozvalo se z vysílačky která měla spojení s velením britských sil pro danou oblast. Poslední kontrola připravenosti, kulomet přichystán, nálože přiloženy. Každý člen týmu ukazuje rukou, že je připraven k zahájení akce. Začíná odpočítávání 5, 4, 3, …..

Když stojíte před objektem, na který máte zaútočit a kde očekáváte odhodlaného nepřítele, který se rozhodně nechce vzdát, honí se vám hlavou různé myšlenky. „Co mě čeká za tou zdí, kolik jich tam bude, budeme mít štěstí a přežiju to?“ Celé tělo máte napnuté jako strunu,

jste napumpováni adrenalinem, mísí se ve vás strach s očekáváním z nadcházejících událostí. Plně se soustředíte a očekáváte explozi, která oznámí začátek útoku.

Speciální vojenské i policejní jednotky používají různé mechanizmy k vytvoření vstupu do zájmového objektu, od mechanických jako jsou beranidla, nebo palice, přes brokovnice, hydrauliku, až po výbušniny nebo speciální vodní děla (nejedná se o vodní dělo, které se používá proti demonstrantům). Jejich výběr záleží jednak na druhu materiálu, proti kterému mají být použity (dveře, bezpečnostní dveře, okno, zeď, atd.) a také se zohledňuje ohrožení lidí uvnitř objektu. Například použití plastické trhaviny na místnost, kde se nachází rukojmí, by mohlo být kontraproduktivní a velmi lehce by se mohlo stát, že už nebude koho zachraňovat. V Afghánistánu se používá pouze výbušnina. Důvody jsou dva; za prvé se musí počítat s umístěním IED na vstupních dveřích a použití výbušniny odpálí i IED a za druhé výbuch působí jako „odpoutávací“ manévr, vnese zmatek do řad nepřátel a útočící tým získá moment překvapení, několik vteřin, které mohou rozhodnout o úspěchu celé akce, nebo o životě a smrti.

Při přípravě jsme měli k dispozici satelitní snímek, takže známe rozložení budov uvnitř Compoundu, ale přesné umístění vstupů do jednotlivých objektů neznáme. Plán je jednoduchý. Jsme rozděleni do dvou týmů Alfa a Bravo, po vniknutí do Compoundu tým Alfa „čistí“ levou část budov a tým Bravo pravou část. …2, 1, prásk, ozve se ohlušující exploze. Vojáci SOG vnikají do objektu Safehousu. Snažíme se dělat svou práci co nejrychleji a nedat nepříteli čas na zaujetí obranného postavení a započetí palby.

Při vstupu do objektu se k odpoutání pozornosti běžně používá „flashbang“, jedná se o zábleskový granát, který způsobuje silný světelný záblesk a hluk, aby odpoutal pozornost od vstupujících vojáků. V Afghánistánu je však použití těchto granátů značně problematické. Nezpůsobí jenom záblesk a hluk, ale také zvednou obrovské množství prachu, které zaplní celou místnost a v podstatě ji učiní neprůhlednou. Vidíte sotva na metr a postupujete takřka poslepu a čekáte, jestli na nepřítele náhodou šlápnete. Samozřejmě dá se použít ruční granát, ale pak už do místnosti nemusíte chodit. A vzhledem k tomu, že jsme neměli žádné informace, jestli se v objektu nenachází i ženy nebo děti, museli jsme být velmi opatrní.

Propátráváme místnost po místnosti, nikde není žádný pohyb. Při této činnosti se neběhá, ale rychle chodí. Důvod je prostý. Pokud místnost pouze proběhnete, máte velkou šanci že něco přehlédnete nebo si vyšlápnete IED. IED je v Afghánistánu plno. Talibánští bojovníci jsou úžasně kreativní ve výrobě těchto „strojů na zabíjení“. Používají vše co je k dispozici od ručních granátů, přes výbušniny až po minometné miny nebo dělostřelecké granáty. Takové IED můžete očekávat všude, ve vstupních dveřích, na podlaze nebo pod krabicí na stole. Dalším velkým rizikem jsou úložné prostory. Většina domů v této oblasti je postavena z bláta a rákosu a zdi jsou velmi silné, místy i jeden metr a více. Afghánici většinou nepoužívají klasický nábytek, jak jej známe my, skříně nebo police, ale vytváří si v obydlích úložné prostory přímo ve zdech. Tyto prostory jsou metr, ale i tři metry hluboké, někdy jsou přímo ve zdi obytné místnosti, někdy tvoří meziprostor, jakousi půdu mezi střechou a obytnou částí. Jsou tak velké, že bez problému umožní úkryt ozbrojenému chlapovi, který vám pak ustřelí hlavu z blízkosti. Často jsou zakryty kobercem nebo záclonou a přehlédnout je můžete velmi snadno. Takže opatrnosti není nikdy dost a být příliš rychlý se opravdu nemusí vyplatit.

Po pár minutách se ozývá do vysílačky „Alfa prostor čistý, Bravo prostor čistý.“ „Máte něco?“ „Jo, ohniště ze kterého se kouří, několik misek s čajem a nějaký papíry, jinak nic. Někdo jim asi dal echo, že se blížíme, tady mají i stromy uši a oči. Měli jsme použít vrtulník, tak jak jsme chtěli, nemuseli jsme se tak plahočit a jim bychom nedali čas zdrhnout.“ „Udělejte kompletní prohlídku objektů, zajistěte veškeré materiály, které nás mohou zajímat, zavolejte na HQ, oznamte situaci a zjistěte další úkoly.“ Jestli máme hlídat prázdný barák nebo se vrátit zpět“. Vzduchem letí rozkazy. „Pojďte sem, něco jsem našel, mají tady perfektní únikovou cestu.“ V zadní části compoundu byla pod zdí, vyhrabaná díra, která vedla do vyschlého zavlažovacího kanálu, ze shora byla zakryta hustými křovisky, takže nebylo vidět, kdo se tam pohybuje. „Jestli zdrhli touhle dírou tak by je možná viděla jenom thermo kamera, jinak jsme byli bez šancí“, konstatoval jeden z vojáků. Tentokrát měli kliku, tak příště. „Provádíme prohlídku celého objektu, najednou vidím jak na druhé straně dvora pyrotechnik táhne zápalnou šňůru od nálože na dveřích, které jsou uzamčeny a schovává se za roh. „Počkej vole, já jsem tady!“, chci vykřiknout, ale už to nestihnu. Rána, záblesk a tlakovka mi dá facku, že druhou chytnu o zeď. „Ty č….., kolik jsi tam toho dal!?“, řvu na něj poté, co se zvednu ze země. „Tři pruhy, sorry nevšimnul jsem si tě“, dostávám odpověď doprovázenou hlasitým smíchem.

Teď už máme konečně hotovo, jsme naplněni euforií, že jsme vše zvládli, na druhou stranu cítíme zklamání, že nám zdrhli před nosem. Vojáci posedávají a odpočívají, vychutnávají chvíle oddechu. „Sedíte tady jako banda idiotů, jste zralí na jeden granát! Zaujměte obranné postavení, nejsme tady na výletě!“ Zařve jeden z velitelů. Čekáme na rozkazy, co dál.

Po krátké chvíli přichází rozkaz z HQ. Britská četa se u Rahim Kalay dostala do kontaktu s nepřítelem. „Nechte Safehouse Britům a okamžitě se přemístěte na PB North, kde dostanete další rozkazy.“ Zvedáme se, tělu se nechce, jsme unaveni po celonočním pochodu a také začíná být horko. Ale nejsme tady na školním výletě. Vydáváme se směrem k Rahim Kalay v očekávání, co nám přinese další den v Afghánistánu.