EPrints Technical Mailing List Archive

Message: #04434


< Previous (by date) | Next (by date) > | < Previous (in thread) | Next (in thread) > | Messages - Most Recent First | Threads - Most Recent First

[EP-tech] Re: Finding selected lang from configuration


It's always good practice to make as few changes to the default configuration files as possible -- this will make managing upgrades far, *far* easier.  However, with the case of field definitions, this can be a little tricky.  What I've done in the past is create a new configuration file called eprint_fields_local.pl (this will be loaded immediately after eprints_fields.pl), and have code in there that swaps out field definitions.  Something like this:


#define local fields
my $local_fields = [
{ name => 'foo', type => 'text' },
{ name => 'title', type => 'virtualwithvalue', ....},
]


#create lookup hash of local field names
my $local_fieldnames = {};
foreach my $f (@{$local_fields})
{
$local_fieldnames->{$f->{name}} = 1;
}

#merge in existing field configurations
foreach my $f (@{$c->{fields}->{eprint}})
{
if (!$local_fieldnames->{$f->{name}})
{
push @{$local_fields}, $f;
}
}

#overwrite original array of configured fields
$c->{fields}->{eprint} = $local_fields;


...note that I've simply typed this into my email, so it probably won't compile, but hopefully you get the idea.


--
Adam Field
Business Relationship Manager and Community Lead
EPrints Services

On 2 Jul 2015, at 10:56, George Mamalakis <mamalos@eng.auth.gr> wrote:

Ah, and one more thing with respect to replacing existing fields.

What is the proper file of doing this? Is it the
~eprints/archives/repoid/cfg/cfg.d/eprints_fields.pl (as I've done), or
can I use some custom config file to *replace* the existing fields? I
suppose the latter would be more robust wrt EPrints updates.

Thanks again!

On 01/07/2015 05:56 μμ, George Mamalakis wrote:
Will do, thanks!

On 01/07/2015 05:14 μμ, Field A.N. wrote:
Hi George

I wouldn't worry about performance unless you're seeing specific problems.  However, you can get it from $repository->id() I believe.  Don't assume there's be a database lookup, as its

I would also recommend the following changes in syntax for readability:

%$v1{'lang'} becomes $v1->{lang}
%$v1{'text'} becomes $v1->{text}
${$$vals[0]}{'text'} becomes $vals->[0]->{text}

Best Wishes

--
Adam Field
Business Relationship Manager and Community Lead
EPrints Services
+44 (0)23 8059 8814





On 1 Jul 2015, at 11:34, George Mamalakis wrote:

Cheers Adam,

It worked like a charm! Now please allow me to asking you one more
thing: I changed my title field to contain code that looks for my
repository_id through the $eprint variable (which is my method's
parameter), which means that the system will have to make an additional
database call each time my field is accessed for each object. There's no
easier method of having access to it, I suppose? (eg. directly, like I
have access to the configuration via $c).

PS. My new title-field code is as follows:

{
     name => 'title',
     type => 'virtualwithvalue',
     virtual => 1,

     get_value => sub
     {
         my ($eprint) = @_;
         if ($eprint->is_set('ml_title'))
         {
             my $repo = $eprint->repository;
             my $lang = $repo->get_langid;
             # if cannot find a user language setting, I'm taking the
default one
             if (!$lang)
             {
                 $lang = $c->{defaultlanguage};
             }
             my $vals = $eprint->get_value('ml_title');
             my $title = '';
             # set the default lang's text as title
             foreach my $v1 (@{$vals})
             {
                 if (%$v1{'lang'} eq $lang)
                 {
                     $title = %$v1{'text'};
                 }
             }
             # if I couldn't find a title in the user's language, get
the first object's text as title
             if ($title eq '')
             {
                 $title = ${$$vals[0]}{'text'} ;
             }
             return $title;

         }
         return undef;
     }
},



On 01/07/2015 12:30 μμ, Field A.N. wrote:
It should be:

$repository->get_lang(), which will return an EPrints::Language object, or $repository->get_langid, which will return the ID of the language.

--
Adam Field
Business Relationship Manager and Community Lead
EPrints Services
+44 (0)23 8059 8814





On 30 Jun 2015, at 10:29, George Mamalakis wrote:

Hi all,

I am testing the multilang field (with virtual fields for title and
abstract) and I am trying to make my virtual field return a different
title (or abstract) based on what the user's language choice is. How can
I have access to that variable on my perl configuration file? (I've
tested the default language and works as expected, but I don't find it
usable.)

Thanks all in advance.

--
George Mamalakis

IT and Security Officer,
Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
PhD (Aristotle Univ. of Thessaloniki),
MSc (Imperial College of London)

School of Electrical and Computer Engineering
Aristotle University of Thessaloniki

phone number : +30 (2310) 994379


*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
*** Archive: http://www.eprints.org/tech.php/
*** EPrints community wiki: http://wiki.eprints.org/
*** EPrints developers Forum: http://forum.eprints.org/
*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
*** Archive: http://www.eprints.org/tech.php/
*** EPrints community wiki: http://wiki.eprints.org/
*** EPrints developers Forum: http://forum.eprints.org/
--
George Mamalakis

IT and Security Officer,
Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
PhD (Aristotle Univ. of Thessaloniki),
MSc (Imperial College of London)

School of Electrical and Computer Engineering
Aristotle University of Thessaloniki

phone number : +30 (2310) 994379



*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
*** Archive: http://www.eprints.org/tech.php/
*** EPrints community wiki: http://wiki.eprints.org/
*** EPrints developers Forum: http://forum.eprints.org/
*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
*** Archive: http://www.eprints.org/tech.php/
*** EPrints community wiki: http://wiki.eprints.org/
*** EPrints developers Forum: http://forum.eprints.org/




--
George Mamalakis

IT and Security Officer,
Electrical and Computer Engineer (Aristotle Univ. of Thessaloniki),
PhD (Aristotle Univ. of Thessaloniki),
MSc (Imperial College of London)

School of Electrical and Computer Engineering
Aristotle University of Thessaloniki

phone number : +30 (2310) 994379



*** Options: http://mailman.ecs.soton.ac.uk/mailman/listinfo/eprints-tech
*** Archive: http://www.eprints.org/tech.php/
*** EPrints community wiki: http://wiki.eprints.org/
*** EPrints developers Forum: http://forum.eprints.org/