/** Datei: plugins/rest/hooks/generator/enum/icon.php **/ * @copyright 2025 ARUNOX * @version 1.0.0 * * @hook config::loaded * * @since 1.0.0 File is created */ $pluginDir = realpath( PLUGINS_DIR ); $hashFile = "{$pluginDir}/rest/assets/bootstrap-icons.hash"; $emojiFile = "{$pluginDir}/rest/assets/icon_emoji.json"; $inputFile = "{$pluginDir}/rest/assets/bootstrap-icons.json"; $outputFile = "{$pluginDir}/rest/library/ARUNOX/Plugins/REST/Generator/Config/Icon.php"; if( !file_exists( $emojiFile ) ) return; if( !file_exists( $inputFile ) ) return; $currentHash = implode( ".", [ md5_file( $inputFile ), md5_file( $emojiFile ), ]); $previousHash = file_exists( $hashFile ) ? file_get_contents( $hashFile ) : ""; if( $currentHash === $previousHash ) return; $emojis = file_get_contents( $emojiFile ); $emojis = json_decode( $emojis, TRUE ); $input = file_get_contents( $inputFile ); $input = json_decode( $input, TRUE ); $output = []; if( !is_array( $input ) ) return; function toReadableEnumCase( string $iconName ): string { $parts = explode("-", $iconName ); if( is_numeric( $parts[0] ) ) { $number = array_shift($parts ); $prev = array_shift($parts ); $parts = array_merge( [ $prev, $number ], $parts ); $parts = array_filter( $parts, fn( $item ) => $item !== NULL ); } return implode("", array_map("ucfirst", $parts ) ); } $input = array_map( fn( $key, $code ) => [ "icon" => "bi-{$key}", "name" => toReadableEnumCase( $key ), "code" => sprintf( '\\%04x', $code ), "emoji" => $emojis["bi-{$key}"] ?? NULL, ], array_keys( $input ), array_values( $input ) ); $input = array_filter( $input, fn( $item ) => !is_numeric( $item["name"] ) ); // show( $input ); $output[] = " \"{$icon["code"]}\","; } $output[] = " };"; $output[] = " }"; $output[] = " public function emoji() {"; $output[] = " return match( \$this ) {"; foreach( $input as $icon ) { $output[] = " Icon::{$icon["name"]} => \"{$icon["emoji"]}\","; } $output[] = " };"; $output[] = " }"; $output[] = " }"; $output = implode( "\n", $output ); // show( htmlentities( $output ) ); file_put_contents( $outputFile, $output ); file_put_contents( $hashFile, $currentHash );