PATH:
var
/
www
/
clients
/
client1
/
web1
/
web
/
wp-content
/
wpml-string-translation
/
classes
/
string-translation-ui
<?php use WPML\Element\API\Languages; use WPML\FP\Fns; use WPML\FP\Obj; use WPML\FP\Wrapper; use function WPML\FP\partialRight; class WPML_String_Translation_Table { private $strings; private $active_languages; private $additional_columns_to_render; private $strings_in_page; /** * WPML_String_Translation_Table constructor. * * @param array<string> $strings */ public function __construct( $strings ) { global $sitepress; $this->strings = $strings; if ( ! empty( $strings ) ) { $this->strings_in_page = icl_get_strings_tracked_in_pages( $strings ); } $this->additional_columns_to_render = wpml_collect(); $this->active_languages = $sitepress->get_active_languages(); } public function render() { ?> <table id="icl_string_translations" class="widefat" cellspacing="0"> <?php Fns::each( [ $this, 'updateColumnsForString' ], $this->strings ); $this->render_table_header_or_footer( 'thead' ); $this->render_table_header_or_footer( 'tfoot' ); ?> <tbody> <?php if ( empty( $this->strings ) ) { ?> <tr> <td colspan="6" align="center"> <?php esc_html_e( 'No strings found', 'wpml-string-translation' ); ?> </td> </tr> <?php } else { foreach ( $this->strings as $string_id => $icl_string ) { $this->render_string_row( $string_id, $icl_string ); } } ?> </tbody> </table> <?php } private function render_table_header_or_footer( $tag ) { $codes = Obj::keys( $this->active_languages ); $getFlagData = function ( $langData ) { return [ 'title' => $langData['display_name'], 'flagUrl' => Languages::getFlagUrl( $langData['code'] ), 'code' => $langData['code'], ]; }; $getFlagImg = function ($langData) { if ($langData['flagUrl'] !== '') { return '<img src="'.esc_attr( $langData['flagUrl'] ).'" alt="'.esc_attr( $langData['title'] ).'" >'; } else { return $langData['code']; } }; $makeFlag = function ( $langData ) use ($getFlagImg) { ob_start(); ?> <span data-code="<?php esc_attr_e( $langData['code'] ); ?>" title="<?php esc_attr_e( $langData['title'] ); ?>" > <?php echo $getFlagImg($langData) ?> </span> <?php return ob_get_clean(); }; $flags = Wrapper::of( $this->active_languages ) ->map( Fns::map( $getFlagData ) ) ->map( Fns::map( $makeFlag ) ) ->map( Fns::reduce( WPML\FP\Str::concat(), '' ) ); ?> <<?php echo $tag; ?>> <tr> <td scope="col" class="manage-column column-cb check-column"><input type="checkbox"/></td> <th scope="col"><?php esc_html_e( 'Domain', 'wpml-string-translation' ); ?></th> <?php if ( $this->additional_columns_to_render->contains( 'context' ) ) : ?> <th scope="col"><?php esc_html_e( 'Context', 'wpml-string-translation' ); ?></th> <?php endif; ?> <?php if ( $this->additional_columns_to_render->contains( 'name' ) ) : ?> <th scope="col"><?php esc_html_e( 'Name', 'wpml-string-translation' ); ?></th> <?php endif; ?> <?php if ( $this->additional_columns_to_render->contains( 'view' ) ) : ?> <th scope="col"><?php esc_html_e( 'View', 'wpml-string-translation' ); ?></th> <?php endif; ?> <th scope="col"><?php esc_html_e( 'String', 'wpml-string-translation' ); ?></th> <th scope="col" class="wpml-col-languages" data-langs="<?php echo esc_attr( json_encode( $codes ) ); ?>"><?php echo $flags->get(); ?></th> </tr> <<?php echo $tag; ?>> <?php } public function render_string_row( $string_id, $icl_string ) { global $wpdb, $sitepress, $WPML_String_Translation; $icl_string = $this->decodeHtmlEntitiesForStringAndTranslations( $icl_string ); ?> <tr valign="top" data-string="<?php echo esc_attr( htmlentities( json_encode( $icl_string ), ENT_QUOTES ) ); ?>"> <?php echo $this->render_checkbox_cell( $icl_string ); ?> <td class="wpml-st-col-domain"><?php echo esc_html( $icl_string['context'] ); ?></td> <?php if ( $this->additional_columns_to_render->contains( 'context' ) ) : ?> <td class="wpml-st-col-context"><?php echo esc_html( $icl_string['gettext_context'] ); ?></td> <?php endif; ?> <?php if ( $this->additional_columns_to_render->contains( 'name' ) ) : ?> <td class="wpml-st-col-name"><?php echo esc_html( $this->hide_if_md5( $icl_string['name'] ) ); ?></td> <?php endif; ?> <?php if ( $this->additional_columns_to_render->contains( 'view' ) ) : ?> <td class="wpml-st-col-view" nowrap="nowrap"> <?php $this->render_view_column( $string_id ); ?> </td> <?php endif; ?> <td class="wpml-st-col-string"> <div class="icl-st-original"<?php _icl_string_translation_rtl_div( $icl_string['string_language'] ); ?>> <img width="18" height="12" src="<?php echo esc_url( $sitepress->get_flag_url( $icl_string['string_language'] ) ); ?>"> <?php echo esc_html( $icl_string['value'] ); ?> </div> <input type="hidden" id="icl_st_wc_<?php echo esc_attr( $string_id ); ?>" value=" <?php echo $WPML_String_Translation->estimate_word_count( $icl_string['value'], $icl_string['string_language'] ) ?> "/> </td> <td class="languages-status wpml-col-languages"></td> </tr> <?php } private function decodeHtmlEntitiesForStringAndTranslations( $string ) { $decode = partialRight( 'html_entity_decode', ENT_QUOTES ); $string['value'] = $decode( $string['value'] ); $string['name'] = $decode( $string['name'] ); if ( Obj::prop( 'translations', $string ) ) { $string['translations'] = Fns::map( Obj::over( Obj::lensProp( 'value' ), $decode ), $string['translations'] ); } return $string; } /** * @param array $string * * @return string html for the checkbox and the table cell it resides in */ private function render_checkbox_cell( $string ) { $class = 'icl_st_row_cb' . ( ! empty( $string['string_package_id'] ) ? ' icl_st_row_package' : '' ); return '<td><input class="' . esc_attr( $class ) . '" type="checkbox" value="' . esc_attr( $string['string_id'] ) . '" data-language="' . esc_attr( $string['string_language'] ) . '" /></td>'; } private function render_view_column( $string_id ) { if ( isset( $this->strings_in_page[ ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_SOURCE ][ $string_id ] ) ) { $thickbox_url = $this->get_thickbox_url( WPML_ST_String_Tracking_AJAX_Factory::ACTION_POSITION_IN_SOURCE, $string_id ); ?> <a class="thickbox" title="<?php esc_attr_e( 'view in source', 'wpml-string-translation' ); ?>" href="<?php echo esc_url( $thickbox_url ); ?>"> <img src="<?php echo WPML_ST_URL; ?>/res/img/view-in-source.png" width="16" height="16" alt="<?php esc_attr_e( 'view in page', 'wpml-string-translation' ); ?>"/> </a> <?php } if ( isset( $this->strings_in_page[ ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_PAGE ][ $string_id ] ) ) { $thickbox_url = $this->get_thickbox_url( WPML_ST_String_Tracking_AJAX_Factory::ACTION_POSITION_IN_PAGE, $string_id ); ?> <a class="thickbox" title="<?php esc_attr_e( 'view in page', 'wpml-string-translation' ); ?>" href="<?php echo esc_url( $thickbox_url ); ?>"> <img src="<?php echo WPML_ST_URL; ?>/res/img/view-in-page.png" width="16" height="16" alt="<?php esc_attr_e( 'view in page', 'wpml-string-translation' ); ?>"/> </a> <?php } } /** * @param string $action * @param int $string_id * * @return string */ private function get_thickbox_url( $action, $string_id ) { return add_query_arg( array( 'page' => WPML_ST_FOLDER . '/menu/string-translation.php', 'action' => $action, 'nonce' => wp_create_nonce( $action ), 'string_id' => $string_id, 'width' => 810, 'height' => 600, ), 'admin-ajax.php' ); } private function hide_if_md5( $str ) { return preg_replace( '#^((.+)( - ))?([a-z0-9]{32})$#', '$2', $str ); } /** * @param array<string,string|int> $string */ public function updateColumnsForString( $string ) { if ( ! $this->additional_columns_to_render->contains( 'context' ) && $string['gettext_context'] ) { $this->additional_columns_to_render->push( 'context' ); } if ( ! $this->additional_columns_to_render->contains( 'name' ) && $this->hide_if_md5( $string['name'] ) ) { $this->additional_columns_to_render->push( 'name' ); } if ( ! $this->additional_columns_to_render->contains( 'view' ) && $this->is_string_tracked( $string['string_id'] ) ) { $this->additional_columns_to_render->push( 'view' ); } } private function is_string_tracked( $string_id ) { $tracked_source = Obj::prop( ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_SOURCE, $this->strings_in_page ); $tracked_page = Obj::prop( ICL_STRING_TRANSLATION_STRING_TRACKING_TYPE_PAGE, $this->strings_in_page ); return ( $tracked_source && Obj::prop( $string_id, $tracked_source ) ) || ( $tracked_page && Obj::prop( $string_id, $tracked_page ) ); } }
[+]
ajax
[-] class-wpml-string-translation-table.php
[edit]
[-] class-wpml-change-string-domain-language-dialog.php
[edit]
[-] class-wpml-change-string-language-select.php
[edit]
[-] UI.php
[edit]
[-] class-wpml-translation-priority-select.php
[edit]
[+]
..