Lemonldap-NG-Manager

 view release on metacpan or  search on metacpan

scripts/llng-build-manager-files  view on Meta::CPAN

    my $insert_after  = $ext_spec->{insert_after};
    my $insert_before = $ext_spec->{insert_before};

    # Determine target array for insertion
    my $target_array;
    if ($insert_into) {

# Navigate to nested node using path (e.g., "oidcRPMetaDataOptions/oidcRPMetaDataOptionsAdvanced")
        my @path_parts = split '/', $insert_into;
        my $target =
          find_tree_node( $core_ctrees->{$ctree_name}, \@path_parts );
        unless ($target) {
            warn
"Warning [$ext_file]: Could not find ctree path: $ctree_name/$insert_into\n";
            return;
        }
        $target_array = $target->{nodes};
        unless ($target_array) {
            warn
"Warning [$ext_file]: Target node '$insert_into' has no 'nodes' array\n";
            return;
        }
    }
    else {
        $target_array = $core_ctrees->{$ctree_name};
    }

    if ($insert_after) {
        insert_nodes_after( $target_array, $insert_after, $nodes, $ext_file );
    }
    elsif ($insert_before) {
        insert_nodes_before( $target_array, $insert_before, $nodes, $ext_file );
    }
    else {
        push @$target_array, @$nodes;
    }

    verbose "  Extended ctree: $ctree_name\n";
}

sub merge_constants {
    my ( $core, $ext, $ext_file ) = @_;

    for my $key ( keys %$ext ) {
        if ( exists $core->{$key} ) {
            die
"Error [$ext_file]: Portal constant '$key' already exists with value $core->{$key}\n";
        }

        my $value = $ext->{$key};
        if ( $value >= 0 && $value < 200 ) {
            warn
"Warning [$ext_file]: Plugin constants should use values >= 200 (got $key => $value)\n";
        }

        $core->{$key} = $value;
        verbose "  Added constant: $key => $value\n";
    }
}

sub update_language_files {
    my ( $dir, $translations ) = @_;

    # List all language files
    opendir my $dh, $dir or die "Cannot open language directory $dir: $!";
    my @lang_files = grep { /\.json$/ } readdir $dh;
    closedir $dh;

    my $json =
      JSON->new->utf8->pretty->canonical->space_before(0)->space_after(0);

    for my $lang_file (@lang_files) {
        my $lang_path = "$dir/$lang_file";

        # Extract language code from filename (e.g., "fr.json" -> "fr")
        my ($lang_code) = $lang_file =~ /^(.+)\.json$/;

        # Load existing translations
        my $content;
        {
            open my $fh, '<', $lang_path or die "Cannot read $lang_path: $!";
            local $/;
            $content = <$fh>;
            close $fh;
        }
        my $lang_data = $json->decode($content);

        # Add new translations
        my $modified = 0;
        for my $key ( keys %$translations ) {
            my $trans = $translations->{$key};

            # Determine the text to use:
            # 1. Use the specific language if available
            # 2. Fall back to English
            # 3. Fall back to the first available language
            my $text;
            if ( ref($trans) eq 'HASH' ) {
                $text = $trans->{$lang_code} // $trans->{en}
                  // ( values %$trans )[0];
            }
            else {
                # If trans is a scalar, use it directly (same for all languages)
                $text = $trans;
            }

            if ( defined $text ) {
                if ( exists $lang_data->{$key} ) {
                    verbose "    [$lang_code] Overriding existing key '$key'\n";
                }
                $lang_data->{$key} = $text;
                $modified = 1;
            }
        }

        # Write back if modified
        if ($modified) {
            $content = $json->encode($lang_data);

            # Compact format like addTrEntry
            $content =~ s/\n\s+/\n/sg;



( run in 0.978 second using v1.01-cache-2.11-cpan-e93a5daba3e )