[EP-tech] Re: Finding selected lang from configuration
Adam Field
af05v at ecs.soton.ac.uk
Thu Jul 2 11:38:04 BST 2015
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 at 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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ecs.soton.ac.uk/pipermail/eprints-tech/attachments/20150702/cd965332/attachment-0001.html
More information about the Eprints-tech
mailing list