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