[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[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 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