ation', rest_url( $this->namespace . '/' . $this->rest_base . '/' . $term->term_id ) ); return $response; } /** * Updates a single term from a taxonomy. * * @since 5.9.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 update_item( $request ) { $term = $this->get_term( $request['id'] ); if ( is_wp_error( $term ) ) { return $term; } if ( isset( $request['parent'] ) ) { if ( ! is_taxonomy_hierarchical( $this->taxonomy ) ) { return new WP_Error( 'rest_taxonomy_not_hierarchical', __( 'Cannot set parent term, taxonomy is not hierarchical.' ), array( 'status' => 400 ) ); } $parent = get_term( (int) $request['parent'], $this->taxonomy ); if ( ! $parent ) { return new WP_Error( 'rest_term_invalid', __( 'Parent term does not exist.' ), array( 'status' => 400 ) ); } } $prepared_term = $this->prepare_item_for_database( $request ); // Only update the term if we have something to update. if ( ! empty( $prepared_term ) ) { if ( ! isset( $prepared_term->{'menu-name'} ) ) { // wp_update_nav_menu_object() requires that the menu-name is always passed. $prepared_term->{'menu-name'} = $term->name; } $update = wp_update_nav_menu_object( $term->term_id, wp_slash( (array) $prepared_term ) ); if ( is_wp_error( $update ) ) { return $update; } } $term = get_term( $term->term_id, $this->taxonomy ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */ do_action( "rest_insert_{$this->taxonomy}", $term, $request, false ); $schema = $this->get_item_schema(); if ( ! empty( $schema['properties']['meta'] ) && isset( $request['meta'] ) ) { $meta_update = $this->meta->update_value( $request['meta'], $term->term_id ); if ( is_wp_error( $meta_update ) ) { return $meta_update; } } $locations_update = $this->handle_locations( $term->term_id, $request ); if ( is_wp_error( $locations_update ) ) { return $locations_update; } $this->handle_auto_add( $term->term_id, $request ); $fields_update = $this->update_additional_fields_for_object( $term, $request ); if ( is_wp_error( $fields_update ) ) { return $fields_update; } $request->set_param( 'context', 'view' ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */ do_action( "rest_after_insert_{$this->taxonomy}", $term, $request, false ); $response = $this->prepare_item_for_response( $term, $request ); return rest_ensure_response( $response ); } /** * Deletes a single term from a taxonomy. * * @since 5.9.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 delete_item( $request ) { $term = $this->get_term( $request['id'] ); if ( is_wp_error( $term ) ) { return $term; } // We don't support trashing for terms. if ( ! $request['force'] ) { /* translators: %s: force=true */ return new WP_Error( 'rest_trash_not_supported', sprintf( __( "Menus do not support trashing. Set '%s' to delete." ), 'force=true' ), array( 'status' => 501 ) ); } $request->set_param( 'context', 'view' ); $previous = $this->prepare_item_for_response( $term, $request ); $result = wp_delete_nav_menu( $term ); if ( ! $result || is_wp_error( $result ) ) { return new WP_Error( 'rest_cannot_delete', __( 'The menu cannot be deleted.' ), array( 'status' => 500 ) ); } $response = new WP_REST_Response(); $response->set_data( array( 'deleted' => true, 'previous' => $previous->get_data(), ) ); /** This action is documented in wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php */ do_action( "rest_delete_{$this->taxonomy}", $term, $response, $request ); return $response; } /** * Returns the value of a menu's auto_add setting. * * @since 5.9.0 * * @param int $menu_id The menu id to query. * @return bool The value of auto_add. */ protected function get_menu_auto_add( $menu_id ) { $nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) ); return in_array( $menu_id, $nav_menu_option['auto_add'], true ); } /** * Updates the menu's auto add from a REST request. * * @since 5.9.0 * * @param int $menu_id The menu id to update. * @param WP_REST_Request $request Full details about the request. * @return bool True if the auto add setting was successfully updated. */ protected function handle_auto_add( $menu_id, $request ) { if ( ! isset( $request['auto_add'] ) ) { return true; } $nav_menu_option = (array) get_option( 'nav_menu_options', array( 'auto_add' => array() ) ); if ( ! isset( $nav_menu_option['auto_add'] ) ) { $nav_menu_option['auto_add'] = array(); } $auto_add = $request['auto_add']; $i = array_search( $menu_id, $nav_menu_option['auto_add'], true ); if ( $auto_add && false === $i ) { $nav_menu_option['auto_add'][] = $menu_id; } elseif ( ! $auto_add && false !== $i ) { array_splice( $nav_menu_option['auto_add'], $i, 1 ); } $update = update_option( 'nav_menu_options', $nav_menu_option ); /** This action is documented in wp-includes/nav-menu.php */ do_action( 'wp_update_nav_menu', $menu_id ); return $update; } /** * Returns the names of the locations assigned to the menu. * * @since 5.9.0 * * @param int $menu_id The menu id. * @return string[] The locations assigned to the menu. */ protected function get_menu_locations( $menu_id ) { $locations = get_nav_menu_locations(); $menu_locations = array(); foreach ( $locations as $location => $assigned_menu_id ) { if ( $menu_id === $assigned_menu_id ) { $menu_locations[] = $location; } } return $menu_locations; } /** * Updates the menu's locations from a REST request. * * @since 5.9.0 * * @param int $menu_id The menu id to update. * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True on success, a WP_Error on an error updating any of the locations. */ protected function handle_locations( $menu_id, $request ) { if ( ! isset( $request['locations'] ) ) { return true; } $menu_locations = get_registered_nav_menus(); $menu_locations = array_keys( $menu_locations ); $new_locations = array(); foreach ( $request['locations'] as $location ) { if ( ! in_array( $location, $menu_locations, true ) ) { return new WP_Error( 'rest_invalid_menu_location', __( 'Invalid menu location.' ), array( 'status' => 400, 'location' => $location, ) ); } $new_locations[ $location ] = $menu_id; } $assigned_menu = get_nav_menu_locations(); foreach ( $assigned_menu as $location => $term_id ) { if ( $term_id === $menu_id ) { unset( $assigned_menu[ $location ] ); } } $new_assignments = array_merge( $assigned_menu, $new_locations ); set_theme_mod( 'nav_menu_locations', $new_assignments ); return true; } /** * Retrieves the term's schema, conforming to JSON Schema. * * @since 5.9.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = parent::get_item_schema(); unset( $schema['properties']['count'], $schema['properties']['link'], $schema['properties']['taxonomy'] ); $schema['properties']['locations'] = array( 'description' => __( 'The locations assigned to the menu.' ), 'type' => 'array', 'items' => array( 'type' => 'string', ), 'context' => array( 'view', 'edit' ), 'arg_options' => array( 'validate_callback' => static function ( $locations, $request, $param ) { $valid = rest_validate_request_arg( $locations, $request, $param ); if ( true !== $valid ) { return $valid; } $locations = rest_sanitize_request_arg( $locations, $request, $param ); foreach ( $locations as $location ) { if ( ! array_key_exists( $location, get_registered_nav_menus() ) ) { return new WP_Error( 'rest_invalid_menu_location', __( 'Invalid menu location.' ), array( 'location' => $location, ) ); } } return true; }, ), ); $schema['properties']['auto_add'] = array( 'description' => __( 'Whether to automatically add top level pages to this menu.' ), 'context' => array( 'view', 'edit' ), 'type' => 'boolean', ); $this->schema = $schema; return $this->add_additional_fields_schema( $this->schema ); } } Avoid Anarchism, Uphold the Judicial Review System to the Constitutional Court Regarding the TNI Law | CIDISS
Ultimate magazine theme for WordPress.

Avoid Anarchism, Uphold the Judicial Review System to the Constitutional Court Regarding the TNI Law

42

By: Citra Indriani Putri

The revision of the Indonesian National Armed Forces Law (UU TNI) has been ratified by the Indonesian House of Representatives in a Plenary Meeting on March 20, 2025. This decision has drawn various reactions, including protests from some elements of society who are concerned about the changes to the regulation.

However, in a state of law, any form of dissatisfaction with the law must be channeled through constitutional mechanisms, not anarchic actions that can damage the democratic order. Judicial review to the Constitutional Court (MK) is the best path that upholds the principles of the state of law and democracy.

Deputy Speaker of the West Java DPRD, MQ Iswara, highlighted the main cause of the protests against the revision of the TNI Law. According to him, the lack of complete information is the main factor that triggers public unrest.

Iswara explained that this revision actually clarifies the role and function of the TNI, without any hidden content that leads to the return of ABRI’s dual function as feared by some people.

The increase in the number of civilian positions that can be filled by TNI personnel from 10 to 14 does not indicate widespread military interference in the civilian sphere. In fact, this regulation provides clearer boundaries.

TNI personnel who hold positions outside the provisions set out in this revision are required to resign. The affirmation of these limitations ensures that the TNI remains focused on their primary task of maintaining national defense.

Iswara also responded to the demonstration carried out by the community as a form of aspiration for the ratification of the TNI Law. Freedom of speech is guaranteed by the constitution, but must be conveyed within the applicable legal corridor.

Demonstrations that are carried out in an orderly manner and according to the rules must be respected, while anarchic actions can actually harm the struggle itself. Constructive dialogue between the community and the government is the best solution in resolving differences of opinion.

On the other hand, Member of Commission III of the House of Representatives, Hinca Panjaitan, emphasized that the judicial review mechanism to the Constitutional Court is a constitutional path that can be taken by people who object to the revision of the TNI Law. The legal process at the Constitutional Court allows for objective testing of laws based on the constitution, so that it can provide a valid and binding decision for all parties.

Hinca appealed to the public to read and understand the latest draft of the TNI Law before submitting objections. Criticism based on a complete understanding will be more constructive and have the opportunity to find a fair solution.

Demonstrations as a form of expression of opinion are allowed, but must remain within the limits of applicable law. There should be no actions that damage public facilities or harm the ongoing democratic process.

A similar statement was also delivered by the Minister of Law, Supratman Andi Agtas. He emphasized that the public has full rights to file a judicial review if they object to the revision of the TNI Law.

The Constitutional Court is a legitimate forum for testing the constitutionality of a law. Every decision resulting from a judicial review is final and binding, so there is no reason to respond to it with extrajudicial action.

Supratman reminded that every regulation that is passed must be implemented first before its effectiveness is assessed. If later aspects are found that are detrimental or contrary to the principles of democracy, a judicial review is the most appropriate step. In this context, there is no room for anarchy, because the state has provided a legitimate channel for the public to voice their objections.

In addition, he dismissed the notion that the revision of the TNI Law was drafted without transparency. The discussion of this regulation has been carried out for a long time and involved various stakeholders.

The opportunity to provide input has been open from the start, and now, after it has been ratified, the judicial review mechanism has become an option that can be taken by parties who still have objections.

As a democratic country based on law, Indonesia has clear procedures in handling any form of dissatisfaction with regulations that have been passed. The judicial review process is a legitimate, fair, and constitutional mechanism in re-evaluating the legal policies in question. Therefore, every element of society should respect the system that has been built in the state system.

Protests against the revision of the TNI Law are certainly a right protected by law, but must be channeled through the right channels. Anarchic actions not only harm the interests of the community itself, but also injure the principles of democracy that uphold freedom of expression responsibly. Judicial review to the Constitutional Court is the most rational and dignified solution in resolving differences of opinion regarding the revision of the TNI Law.

Public involvement in a legitimate legal process reflects the maturity of democracy. Therefore, maintaining order and respecting applicable legal procedures is a shared responsibility.

Rejecting the revision of the TNI Law is legitimate, but it must be done through the channels provided in the state system. Thus, any differences can be resolved without damaging social harmony and national stability. (*)

*) Public Policy and Political Researcher – Center for People’s Political Studies (PSPR)

Leave A Reply

Your email address will not be published.