Changeset 959
- Timestamp:
- 05/15/12 03:30:21 (12 years ago)
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Controller/Request.pm
r946 r959 54 54 $c->stash->{datarequest} = 55 55 LATMOS::Accounts::Bases::Sql::DataRequest->new($accreq); 56 $c->stash->{datarequest}->set_ptr_object($c->stash->{object}) 57 if ($c->stash->{object}); 58 56 59 $c->stash->{form} = $c->model( 57 60 'AttrForms', 58 61 '', 59 $c->stash->{ object},62 $c->stash->{datarequest}, 60 63 $c->model('Accounts')->db 61 64 ); 65 66 # Default apply date: 67 my @date = localtime( time + 3600 * 24 ); 68 $c->stash->{default_apply_date} = sprintf( 69 '%02d/%02d/%d', 70 @date[3,4], 71 $date[5] + 1900 72 ); 73 74 if ($c->req->param('send')) { 75 my %attrs; 76 foreach ($c->stash->{datarequest}->attributes) { 77 my $htmlname = $c->stash->{form}->attr_field_name($_); 78 my @vals = $c->req->param($htmlname); 79 $attrs{$_} = @vals > 1 ? \@vals : $vals[0]; 80 } 81 if ($c->stash->{datarequest}->register( 82 $c->user->{username}, 83 $c->req->param('apply') || $c->stash->{default_apply_date}, 84 %attrs, 85 )) { 86 $c->go('recorded'); 87 } 88 } 89 62 90 } 63 91 92 sub recorded : Private { 93 my ($self, $c) = @_; 64 94 95 my %attrs = $c->stash->{datarequest}->get_values; 96 $c->stash->{values} = \%attrs; 97 } 65 98 66 99 =head1 AUTHOR -
LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrFilter.pm
r861 r959 91 91 sub search_field { 92 92 my ($self, $count) = @_; 93 my $form = $self->{c}->model('AttrForms' );93 my $form = $self->{c}->model('AttrForms', '', $self->otype, $self->{c}->stash->{db}); 94 94 my $html = '<select name="attr"> 95 95 <option value=""></option>'; -
LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrForms.pm
r955 r959 216 216 217 217 sub attr_label { 218 my ($self, $attr) = @_; 219 my ($hint, $label) = ('', ''); 218 my ($self, $attr, $label, $hint) = @_; 219 $label ||= ''; 220 $hint ||= ''; 220 221 LATMOS::Accounts::Web->config->{attrs} ||= {}; 221 my $htmlname = ($self->{object} ? $self->{object}->id . '_' : '') . $attr; 222 my $attribute = $self->base->attribute($self->otype, $attr); 223 my $htmlname = $self->escape($self->attr_field_name($attr)); 222 224 if (my $attr_config = LATMOS::Accounts::Web->config->{attrs}{$attr}) { 223 $label = $attr_config->{label} || '';225 $label ||= $attr_config->{label} || ''; 224 226 #utf8::is_utf8($label) && utf8::encode($label); 225 $hint = $attr_config->{hint} || '';227 $hint ||= $attr_config->{hint} || ''; 226 228 #utf8::is_utf8($hint) && utf8::encode($hint); 227 229 } … … 243 245 244 246 sub attr_raw_value { 245 my ($self, $attr) = @_; 246 return $self->{c}->req->param($attr) || 247 ($self->{object} ? $self->{object}->get_attributes($attr) : '') 247 my ($self, $attribute) = @_; 248 my @val = grep { $_ } 249 ($self->{c}->req->param($attribute->name)) 250 || ($self->{object} 251 ? ($self->{object}->get_attributes($attribute->name)) 252 : ()); 253 254 if (@val) { 255 return @val; 256 } else { 257 return (grep { $_ } ($attribute->default_value)) 258 } 248 259 } 249 260 … … 251 262 my ($self, $attr) = @_; 252 263 my $id = $self->{object} 253 ? $self->{object}->id . '_'264 ? ($self->{object}->id || '') 254 265 : ''; 266 $id .= '_' if ($id); 255 267 $id =~ s/\./_/g; 256 268 $id =~ s/-/_/g; … … 403 415 last; 404 416 }; 405 406 warn $_;407 417 } 408 418 return ''; … … 450 460 frequency => 1, 451 461 with => "'val='+element.value" . 452 ($self->{object} ? "+'&exclude=" . $self->{object}->id . "'" : 453 ''), 462 ($self->{object} ? 463 "+'&exclude=" . ($self->{object}->id || '') . "'" 464 : ''), 454 465 } 455 466 ) … … 463 474 my ($self, $attr, $type) = @_; 464 475 465 my $attr_info = $type 466 ? { formtype => $type } 467 : undef; 468 469 my $attribute = ($self->{object} 470 ? $self->{object}->attribute($attr) 471 : $self->base->attribute($self->otype, $attr)); 472 473 $attribute ||= $self->base->attribute( 474 $self->otype, 475 { 476 name => $attr, 477 formtype => $type 478 }, 479 ); 476 my $attribute = ($type 477 ? ref $type 478 ? $self->base->attribute( 479 $self->otype, 480 { %$type, name => $attr },) 481 : $self->base->attribute( 482 $self->otype, 483 { formtype => $type , name => $attr },) 484 : ($self->{object} 485 ? $self->{object}->attribute($attr) 486 : $self->base->attribute($self->otype, $attr, { formtype => $type }))) 487 || $self->base->attribute($self->otype, { name => $attr }); 488 480 489 481 490 my $htmlname = $self->escape($self->attr_field_name($attr)); 482 491 483 492 my @html_fields; 484 foreach my $attr_raw_value ( 485 $attribute->multiple 486 ? (grep { $_ } $self->attr_raw_value($attr)) 487 : $self->attr_raw_value($attr) || '') { 493 494 # Force Array context: 495 my @attr_raw_value = (); 496 if ($attribute->multiple) { 497 @attr_raw_value = grep { $_ } $self->attr_raw_value($attribute); 498 } else { 499 my ($val) = $self->attr_raw_value($attribute); 500 @attr_raw_value = ($val || ''); 501 } 502 503 foreach my $attr_raw_value (@attr_raw_value) { 488 504 489 505 my $html_id = $htmlname . … … 501 517 } 502 518 503 if ($attribute->{multiple} ) {519 if ($attribute->{multiple} && !$attribute->readonly) { 504 520 my $html_id = $htmlname . '_m_SUBID'; 505 521 -
LATMOS-Accounts-Web/root/html/includes/header.tt
r888 r959 103 103 </span> 104 104 <span> 105 <a href="[% c.uri_for('/sites') %]"106 onMouseOver="document.getElementById('menui').innerHTML='Liste des sites';"107 onMouseOut="resetmenu();"108 >109 <img title="Sites" src="[% c.uri_for('/static', 'icons', 'xfce-internet.png') %]"></a>110 </span>111 [% # On cache volontairement les alias si l'utilisateur ne doit pas y112 toucher %]113 [% IF c.model('Accounts').db.check_acl('aliases', '@CREATE', 'w') %]114 <span>115 <a href="[% c.uri_for('/aliases') %]"116 onMouseOver="document.getElementById('menui').innerHTML=117 'Alias mail sans utilisateur';"118 onMouseOut="resetmenu();"119 >120 <img title="Alias mail" src="[% c.uri_for('/static', 'icons', 'mail_forward.png') %]"></a>121 </span>122 [% END %]123 <span>124 105 <a href="[% c.uri_for('/nethosts') %]" 125 106 onMouseOver="document.getElementById('menui').innerHTML='Liste des hÃŽtes réseau';" … … 135 116 [% END %] 136 117 </span> 137 [% # On cache volontaire les zones si l'utilisateur ne doit pas y138 toucher %]139 [% IF c.model('Accounts').db.check_acl('netzone', '@CREATE', 'w') %]140 118 <span> 141 <a href="[% c.uri_for('/ netzones') %]"142 onMouseOver="document.getElementById('menui').innerHTML=' Liste des zones réseaux';"119 <a href="[% c.uri_for('/request') %]" 120 onMouseOver="document.getElementById('menui').innerHTML='Demandes';" 143 121 onMouseOut="resetmenu();" 144 122 > 145 <img title="Gestion Réseau" src="[% c.uri_for('/static', 'icons', 'network-workgroup.png') %]"></a> 146 <a href="[% c.uri_for('/create', 'netzone') %]" 147 onMouseOver="document.getElementById('menui').innerHTML='Ajouter une zones réseau';" 123 <img title="Demandes" src="[% c.uri_for('/static', 'icons', 'logviewer.png') %]"></a> 124 </span> 125 <span> 126 <a href="[% c.uri_for('/admin') %]" 127 onMouseOver="document.getElementById('menui').innerHTML='Administrer...';" 148 128 onMouseOut="resetmenu();" 149 ><img title="Ajouter une zone" src="[% c.uri_for('/static', 'icons', 'add.png') %]"></a> 129 > 130 <img title="Administrer..." src="[% c.uri_for('/static', 'icons', 'gtk-execute.png') %]"></a> 150 131 </span> 151 [% END %]152 132 <span> 153 133 <a href="[% c.uri_for('/about') %]" -
LATMOS-Accounts-Web/root/html/request/default.tt
r952 r959 1 1 <!-- $Id$ --> 2 3 <h2>[% accreq.get_attributes('description') | html %]</h2> 2 4 3 5 [% IF select_object %] … … 25 27 [% ELSE %] 26 28 29 [% IF accreq.get_attributes('requireObject') %] 30 <h3>[% datarequest.get_attributes('displayName') || datarequest.id %]</h3> 31 [% END %] 32 27 33 <form action="[% c.uri_for('/request', accreq.id, object.id) %]"> 28 34 [% FOREACH attr = datarequest.attributes %] … … 31 37 [% END %] 32 38 <tr> 33 <th>[% form.attr_label(attr) %]</th> 39 [% attrinfo = datarequest.attribute_info(attr) %] 40 <th>[% form.attr_label(attr, attrinfo.label) %]</th> 34 41 <td>[% form.attr_field(attr) %]</td> 35 42 </tr> 36 43 [% IF loop.last %] 37 44 <tr> 45 <th>Date d'application</th> 46 <td> 47 [% form.attr_field('apply', { formtype => 'date', _noacl => 1, default => default_apply_date } ) %] 48 </td> 49 </tr> 50 <tr><td></td><td> 51 <input type="submit" name="send"> 52 </td></tr> 38 53 </table> 39 54 [% END %] 40 55 [% END %] 41 [% form.attr_field('apply', 'DATE') %]42 <input type="submit" name="send">43 56 </form> 44 57 -
LATMOS-Accounts-Web/root/html/request/index.tt
r946 r959 1 1 <!-- $Id$ --> 2 2 3 <h2>Formuler une demande:</h2> 4 3 5 [% FOREACH h = c.model('Accounts').db.search_objects('accreq', 'exported=*') %] 6 [% IF loop.first %] 7 <ul> 8 [% END %] 4 9 [% o = c.model('Accounts').db.get_object('accreq', h) %] 10 <li> 5 11 <a href="[% c.uri_for(h) %]"> 6 12 [% o.get_attributes('description') || o.id | html %] 7 13 </a> 8 <br> 9 14 </li> 15 [% IF loop.last %] 16 </ul> 10 17 [% END %] 18 [% END %] -
LATMOS-Accounts/MANIFEST
r881 r959 37 37 bin/la-sync-manager 38 38 bin/la-warn-expire 39 bin/la-sql-valid-request 40 bin/la-sql-list-request 39 41 etc/cron.d/latmos-accounts 40 42 etc/init.d/la-sync-manager -
LATMOS-Accounts/Makefile.PL
r881 r959 58 58 bin/la-sql-loadatt 59 59 bin/la-sql-upgrade 60 bin/la-sql-edit-form 60 61 ) ], 61 62 macro => { -
LATMOS-Accounts/lib/LATMOS/Accounts.pm
r868 r959 189 189 allowed_values => $self->{_allowed_values}, 190 190 configdir => $self->_configdir, 191 _la => $self, 191 192 ) or do { 192 193 la_log(LA_WARN, "Cannot instanciate base $section ($type)"); -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases.pm
r937 r959 50 50 $base->{_acls} = $options{acls}; 51 51 $base->{_allowed_values} = $options{allowed_values}; 52 $base->{_la} = $options{_la}; 52 53 la_log(LA_DEBUG, 'Instanciate base %s (%s)', ($options{label} || 'N/A'), $pclass); 53 54 $base … … 92 93 $_[0]->{_type}; 93 94 } 95 96 =head2 la 97 98 return LATMOS::Accounts object parent to the base 99 100 =cut 101 102 sub la { $_[0]->{_la} }; 94 103 95 104 sub options { … … 276 285 sub _create_c_object { 277 286 my ($self, $otype, $id, %cdata) = @_; 287 288 $id ||= ''; # Avoid undef 278 289 279 290 if (my $chk = ( -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Attributes.pm
r950 r959 152 152 sub check_acl { 153 153 my ($self, $mode) = @_; 154 155 return 1 if ($self->{_noacl}); 156 154 157 return $self->base->check_acl($self->object 155 158 ? ($self->object, $self->name, $mode) … … 234 237 235 238 if (ref $self->{set} eq 'CODE') { 236 return $self->{set}->($self, $values); 239 return $self->{set}->($self, 240 ref $values 241 ? [ map { $self->input($_) } @$values ] 242 : $values ? $self->input($values) : undef); 237 243 } else { 238 244 return $self->object->set_fields( … … 240 246 ref $values 241 247 ? [ map { $self->input($_) } @$values ] 242 : $self->input($values), 243 ); 244 } 248 : $values ? $self->input($values) : undef); 249 } 250 } 251 252 sub default_value { 253 my ($self) = @_; 254 return grep { $_ } (ref $self->{default} 255 ? @{ $self->{default} } 256 : $self->{default}); 245 257 } 246 258 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/OCHelper/User.pm
r941 r959 10 10 sub _step { 11 11 my ($self, $info) = @_; 12 if ($info->{step} == 0) {12 if ($info->{step} <= 0) { 13 13 $info->{name}{ask} = 1; 14 14 push(@{$info->{ask}}, qw(givenName sn)); 15 15 $info->{step} = 1; 16 return 'NEEDINFO'; 17 } elsif ($info->{step} == 1) { 16 if (!($info->{name}{content} || 17 ($info->{contents}{sn}) && $info->{contents}{givenName})) { 18 return 'NEEDINFO'; 19 } 20 } 21 if ($info->{step} == 1) { 18 22 $info->{step} = 2; 19 23 my $login = $info->{name}{content}; -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm
r944 r959 7 7 use base qw(LATMOS::Accounts::Bases); 8 8 use LATMOS::Accounts::Log; 9 use LATMOS::Accounts::Bases::Sql::DataRequest; 9 10 use DBI; 10 11 use Crypt::RSA; … … 371 372 } 372 373 374 sub get_datarequest { 375 my ($self, $id) = @_; 376 377 my $sth = $self->db->prepare(q{ 378 select name from request 379 where id = ? 380 }); 381 $sth->execute($id); 382 if (my $res = $sth->fetchrow_hashref) { 383 my $accreq = $self->get_object('accreq', $res->{name}); 384 return LATMOS::Accounts::Bases::Sql::DataRequest->new($accreq, $id); 385 } else { 386 return; 387 } 388 } 389 390 sub list_requests { 391 my ($self) = @_; 392 393 my $sth = $self->db->prepare(q{ 394 select id from request 395 where done is null 396 order by apply 397 }); 398 $sth->execute; 399 my @ids; 400 while (my $res = $sth->fetchrow_hashref) { 401 push(@ids, $res->{id}); 402 } 403 404 @ids 405 } 406 407 sub list_pending_requests { 408 my ($self) = @_; 409 410 my $sth = $self->db->prepare(q{ 411 select id from request 412 where done is null 413 and apply < now() 414 order by apply 415 }); 416 $sth->execute; 417 my @ids; 418 while (my $res = $sth->fetchrow_hashref) { 419 push(@ids, $res->{id}); 420 } 421 422 @ids 423 } 424 373 425 1; 374 426 -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Accreq.pm
r945 r959 8 8 use LATMOS::Accounts::Log; 9 9 use base qw(LATMOS::Accounts::Bases::Sql::objects); 10 use YAML; 10 11 11 12 our $VERSION = (q$Rev: 2008 $ =~ /^Rev: (\d+) /)[0]; … … 13 14 =head1 NAME 14 15 15 LATMOS::Ad - Perl extension for blah blah blah 16 17 =head1 SYNOPSIS 18 19 use LATMOS::Accounts::Bases; 20 my $base = LATMOS::Accounts::Bases->new('sql'); 21 ... 16 LATMOS::Accounts::Bases::Sql::Accreq - Accreq object in LATMOS::Accounts system 22 17 23 18 =head1 DESCRIPTION 24 19 25 Account base access over standard unix file format. 20 The C<Accreq> object is a form handle information about form allowing user to 21 request admin for change 26 22 27 23 =head1 FUNCTIONS … … 29 25 =cut 30 26 31 =head2 new(%options) 32 33 Create a new LATMOS::Ad object for windows AD $domain. 34 35 domain / server: either the Ad domain or directly the server 36 37 ldap_args is an optionnal list of arguments to pass to L<Net::LDAP>. 38 39 =cut 27 sub _yaml_attr { qw(description notifyMail) } 40 28 41 29 sub object_table { 'accreq' } … … 50 38 $class->SUPER::_get_attr_schema($base, 51 39 { 52 unexported 40 unexported => { inline => 1, formtype => 'CHECKBOX',}, 53 41 name => { inline => 1, ro => 1, }, 54 42 create => { inline => 1, ro => 1, }, 55 43 date => { inline => 1, ro => 1, }, 56 attributes => { multiple => 1 }, 44 attributes => { 45 ro => 1, 46 multiple => 1, 47 get => sub { 48 my ($self) = @_; 49 my $ref = _parse_form($self, 50 $self->object->get_attributes('form')); 51 my @attributes = (); 52 my @attrs = @{ $ref->{attrs} }; 53 while (my $attr = shift(@attrs)) { 54 my $attrname = ref $attr 55 ? $attr->{name} 56 : $attr; 57 push(@attributes, $attrname); 58 } 59 \@attributes 60 }, 61 }, 57 62 oType => { 58 63 can_values => sub { … … 61 66 mandatory => 1, 62 67 }, 63 requireObject => { formtype => 'CHECKBOX', } 68 requireObject => { formtype => 'CHECKBOX', }, 69 form => { 70 get => sub { 71 my ($self) = @_; 72 if (my $obj = $self->object) { 73 my $res = $obj->parse_form; 74 foreach (_yaml_attr()) { 75 $res->{$_} = $obj->get_field($_); 76 } 77 return YAML::freeze($res); 78 } else { 79 return; 80 } 81 }, 82 set => sub { 83 my ($self, $yaml) = @_; 84 my $res = _parse_form($self, $yaml) 85 or return 0; 86 my %attrs; 87 foreach (_yaml_attr()) { 88 $attrs{$_} = $res->{$_} if (exists($res->{$_})); 89 } 90 $self->object->set_fields(%attrs, form => $yaml); 91 }, 92 }, 64 93 } 65 94 ) 66 95 } 67 96 68 sub _office_address_fields { qw(telephoneNumber physicalDeliveryOfficeName site) } 97 sub parse_form { 98 my ($self) = @_; 99 if (my $text = $self->get_field('form')) { 100 $self->_parse_form($text); 101 } else { 102 return { attrs => [] }; 103 } 104 } 105 106 sub attr_info { 107 my ($self, $wanted_attr) = @_; 108 109 my $ref = $self->parse_form; 110 111 my @attrs = @{ $ref->{attrs} }; 112 while (my $attr = shift(@attrs)) { 113 my $attrname = ref $attr 114 ? $attr->{name} 115 : $attr; 116 if ($wanted_attr eq $attrname) { 117 if (ref $attr) { 118 return $attr; 119 } else { 120 return; 121 } 122 } 123 } 124 return; 125 } 126 127 sub _parse_form { 128 my ($self, $yaml) = @_; 129 130 my $ref = YAML::thaw($yaml) or return 0; 131 132 my @attributes = (); 133 my @attrs = @{ $ref->{attrs} }; 134 while (my $attr = shift(@attrs)) { 135 my $attrname = ref $attr 136 ? $attr->{name} 137 : $attr; 138 139 if (!$attrname) { 140 $self->base->log('LA_ERR', 'No attribute name supplied'); 141 return; 142 } 143 } 144 145 $ref 146 } 69 147 70 148 1; … … 86 164 at your option, any later version of Perl 5 you may have available. 87 165 88 89 166 =cut -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Aliases.pm
r939 r959 56 56 multiple => 1, 57 57 }, 58 finalpoint => { ro => 1, },58 finalpoint => { ro => 1, multiple => 1 }, 59 59 parents => { ro => 1, }, 60 60 anyparents => { ro => 1, }, 61 sameforward => { ro => 1, },62 samedestination => { ro => 1, },61 sameforward => { ro => 1, multiple => 1 }, 62 samedestination => { ro => 1, multiple => 1 }, 63 63 user => { 64 64 ro => 1, -
LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm
r938 r959 14 14 15 15 LATMOS::Ad - Perl extension for blah blah blah 16 17 =head1 SYNOPSIS18 19 use LATMOS::Accounts::Bases;20 my $base = LATMOS::Accounts::Bases->new('sql');21 ...22 16 23 17 =head1 DESCRIPTION … … 491 485 $attr =~ /^memberOf$/ and do { 492 486 my %member; 493 foreach (@{ $self->get_field('memberOf') }) { 487 my $memberof = $self->get_field('memberOf'); 488 foreach (ref $memberof 489 ? @{ $memberof } 490 : $memberof || ()) { 494 491 $member{$_}{c} = 1; 495 492 } … … 710 707 at your option, any later version of Perl 5 you may have available. 711 708 712 713 709 =cut -
LATMOS-Accounts/lib/LATMOS/Accounts/Utils.pm
r861 r959 148 148 sub check_ug_validity { 149 149 my ($name) = @_; 150 return "Empty name is not a valid name !" 151 if (!$name); 150 152 return "first caractere must be a-z" 151 153 if ($name !~ /^[a-z]/); -
LATMOS-Accounts/sqldata/attributes.csv
r945 r959 1 1 "accreq","description","description" 2 2 "accreq","oType","Type d'objet" 3 "accreq","attributes","Attributs"4 3 "accreq","requireObject","Mets à jour un objet existant" 5 4 "accreq","notifyMail","Mail recevant la demande" 6 5 "accreq","comment","Commentaire" 6 "accreq","form","Description du formulaire" 7 7 "address","isMainAddress","Cette addresse est tel l'adresse principal" 8 8 "address","postalCode","Code postal"
Note: See TracChangeset
for help on using the changeset viewer.