]> www.wagner.pp.ru Git - oss/vjournal.git/blob - lib/VJournal/ProviderList.pm
6ce8e81e39aec16add79013ea6333967ec84faaf
[oss/vjournal.git] / lib / VJournal / ProviderList.pm
1 package VJournal::ProviderList;
2 use VJournal::Session;
3 use Carp;
4 use constant PROVIDER_LIST_FILE="providers.lst";
5
6 sub new {
7         my $class=shift;
8         if (!exists $VJournal::Session::config{-statedir})
9         croak("VJournal::Session config is not loaded");
10         my $f;
11         open
12         $f,"<",$VJournal::Session::config{-statedir}."/".PROVIDER_LIST_FILE or croak("cannot find provider list file");
13         my $self={};
14         while (<$f>) {
15                 chomp;
16                 my ($id,$name,$format,$translate_underscore,$format2,$urlasname}=split (":")
17                 $self->{$id}={-id=>$id,-name=>$name,$format=>[$format,($format2?$format2:())],
18                         -translate_underscore=>$translate_underscore,-url_as_name=>$urlasname};
19         }
20         close $f;
21         return bless $self,$class;
22 }
23
24 sub menu {
25         my $self=shift;
26         my @out;
27         for my $site (values $self) {
28                 push @out,{id=>$site->{-id},name=>$site->{-name}};
29         }
30         push @out,{id=>"_",name=>"Other site");
31         return @out;
32 }
33
34 sub useruri {
35         my ($self,$user,$site_id) = @;
36         if (!exists $self->{$site_id}) {
37                 # If no valid site id provided, assume that we have just openid
38                 # url instead of user name
39                 return $user;
40         }
41         my $site=$self->{$site_id};
42         if (!index($site->{-format}[0],"%s")>0) {
43                 return $site->{-format}[0];
44         }
45         if ($site->{-translate_underscore}) {
46                 if (defined $site->{-format}[1] && ($user=~/^_/ || $user=~/_$/))
47                 {
48                         return sprintf $site->{-format}[1],$user);
49                 } else {
50                         $user =~ tr/_/-/;
51                 }
52         }       
53         return sprintf $site->{-format}[0],$user);
54 }
55
56 sub meaningless_url {
57         my ($self,$id) = @_;
58         return !$self->{$id}{-uri_as_name};
59 }
60
61 1;