Revision 303
Date:
2013/04/10 11:04:35
Author:
ahitrov
Revision Log:
Права пользователей и скрипт очистки
Files:
Legend:
Added
Removed
Modified
utf8/plugins/webshop/comps/contenido/webshop/components/order_browse.msn
133
133
% $actions = join (' | ', map { '<a href="./'.$_->{href}.'?id='.$document->id.($params_unclassed ? '&'.$params_unclassed : '').'">'.$_->{name}.'</a>' } @actions);
134
134
% }
135
135
% }
136
% if ( $active_rights == 0 ) {
137
% if ( $document->$user_id && $document->$user_id != $user->id ) {
138
% $actions .= ' (<a href="/contenido/webshop/?drop_owner=1&id='.$document->id.($params_unclassed ? '&'.$params_unclassed : '').'&field='.$user_id.'">unlock</a>)'
139
% } else {
140
% $actions = join (' | ', map { '<a href="./'.$_->{href}.'?id='.$document->id.($params_unclassed ? '&'.$params_unclassed : '').'">'.$_->{name}.'</a>' } @actions);
141
% }
142
% }
136
143
<td nowrap><% $actions %>\
137
144
% if ( $inline_status ) {
138
145
<input type="hidden" name="update_<% $document->id %>_class" value="<% $document->class %>">
utf8/plugins/webshop/comps/contenido/webshop/components/order_form.msn
47
47
</tr>
48
48
</table>
49
49
50
% my @properties = $object->structure();
51
<pre><% Dumper \@properties %></pre>
50
52
<center>
51
53
<table width="98%" cellpadding="1" cellspacing="0" border="0">
52
54
53
55
<%perl>
54
56
55
my @properties = $object->structure();
57
# my @properties = $object->structure();
56
58
57
59
for (0..$#properties)
58
60
{
utf8/plugins/webshop/comps/contenido/webshop/delivery.html
31
31
% }
32
32
33
33
% } else {
34
% if ( $document->postman_id == $user->id ) {
34
% if ( $document->postman_id == $user->id || $active_rights == 0 ) {
35
35
<& "/contenido/components/obj_list_js.msn", object => $document &>
36
36
<& "/contenido/webshop/components/order_form.msn",
37
37
context => 'post',
utf8/plugins/webshop/comps/contenido/webshop/facility.html
32
32
33
33
% } else {
34
34
35
% if ( $document->vault_id == $user->id ) {
35
% if ( $document->vault_id == $user->id || $active_rights == 0 ) {
36
36
<& "/contenido/components/obj_list_js.msn", object => $document &>
37
37
<& "/contenido/webshop/components/order_form.msn",
38
38
context => 'facil',
…
…
129
129
return undef;
130
130
}
131
131
132
if ( ref $document ) {
132
if ( ref $document && !$document->vault_id ) {
133
133
$document->vault_id( $user->id );
134
134
$document->store;
135
135
}
utf8/plugins/webshop/comps/contenido/webshop/index.html
54
54
$ost => 1
55
55
$p => 1
56
56
$delete => undef
57
$drop_owner => undef
57
58
58
59
</%args>
59
60
<%init>
…
…
115
116
}
116
117
}
117
118
$m->redirect("/contenido/webshop/".($return_params ? '?'.$return_params : ''));
119
} elsif ( $active_rights == 0 && $drop_owner ) {
120
my $id = $ARGS{id};
121
my $doc = $keeper->get_document_by_id( $id,
122
class => 'webshop::Order',
123
) if $id && $id =~ /^\d+$/;
124
if ( ref $doc ) {
125
my $user_id = $ARGS{field};
126
$doc->$user_id( 0 );
127
$doc->store;
128
$m->redirect( $r->header_in('Referer') );
129
}
118
130
}
119
131
120
132
</%init>
utf8/plugins/webshop/comps/contenido/webshop/take_care.html
32
32
33
33
% } else {
34
34
35
% if ( $document->vault_id == $user->id || $active_rights == 0 ) {
35
36
<& "/contenido/components/obj_list_js.msn", object => $document &>
36
37
<& "/contenido/webshop/components/order_form.msn",
37
38
object => $document,
…
…
39
40
sect_id => $owner->id,
40
41
filter_params => \%filter_params,
41
42
&>
43
% } else {
44
% my $profile = $keeper->get_user_by_id( $document->manager_id );
45
<div style="padding:10px;">
46
<b style="font-size:110%">Оформление ЗАКАЗА</b>
47
<p style="color:red"><b>Внимание!</b> Комплектацией заказа занимается <% $profile->name %></p>
48
<p><a href="./?ost=1"><< Вернуться в список комплектации</a></p>
49
</div>
50
% }
42
51
% }
43
52
44
53
</body>
…
…
64
73
my $new;
65
74
my $now = Contenido::DateTime->new;
66
75
76
my $active_rights = $m->comp('/contenido/webshop/subs/user_rights.msn');
77
67
78
if ($id && ($id !~ /\D/) && ($id > 0)) {
68
79
$document = $keeper->get_document_by_id($id, class=>$class);
69
80
} elsif ( ($class) && (length($class)>0) && (! ref($document)) ) {
…
…
112
123
return undef;
113
124
}
114
125
115
if ( ref $document ) {
126
if ( ref $document && !$document->manager_id ) {
116
127
$document->manager_id( $user->id );
117
128
$document->store;
118
129
}
utf8/plugins/webshop/lib/webshop/Order.pm
59
59
mandatory => 1, rel => 'Не указан город' },
60
60
{ 'attr' => 'metro', 'type' => 'string', 'rusname' => 'Ближайшее метро', manager_hidden => 1, postshow => 1 },
61
61
{ 'attr' => 'timeline', 'type' => 'string', 'rusname' => 'Предпочтительное время', postshow => 1, },
62
{ 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5, manager_hidden => 1, postshow => 1 },
62
{ 'attr' => 'description', 'type' => 'text', 'rusname' => 'Описание для курьера', rows => 5, postshow => 1 },
63
63
{ 'attr' => 'facility_comment', 'type' => 'text', 'rusname' => 'Описание проблем с комплектацией', rows => 5, manager_hidden => 1, faciledit => 1 },
64
64
{ 'attr' => 'delivery_comment', 'type' => 'text', 'rusname' => 'Описание проблем с доставкой', rows => 5, manager_hidden => 1, postedit => 1 },
65
65
)
utf8/plugins/webshop/lib/webshop/SQL/Order.pm
24
24
_s_filter
25
25
26
26
_uid_filter
27
_manager_filter
28
_vault_filter
29
_postman_filter
27
30
)];
28
31
29
32
sub available_filters {
…
…
191
194
return &SQL::Common::_generic_int_filter('d.uid', $opts{uid});
192
195
}
193
196
197
sub _manager_filter {
198
my ($self,%opts)=@_;
199
return undef unless ( exists $opts{manager} );
200
return &SQL::Common::_generic_int_filter('d.manager_id', $opts{manager});
201
}
202
203
sub _vault_filter {
204
my ($self,%opts)=@_;
205
return undef unless ( exists $opts{vault} );
206
return &SQL::Common::_generic_int_filter('d.vault_id', $opts{vault});
207
}
208
209
sub _postman_filter {
210
my ($self,%opts)=@_;
211
return undef unless ( exists $opts{postman} );
212
return &SQL::Common::_generic_int_filter('d.postman_id', $opts{postman});
213
}
214
194
215
1;
utf8/plugins/webshop/services/order_manager_clean.pl
1
#!/usr/bin/perl
2
3
use strict;
4
use warnings "all";
5
use locale;
6
7
use FindBin;
8
BEGIN {
9
require "$FindBin::RealBin/../lib/Modules.pm";
10
}
11
12
use Contenido::Globals;
13
use Contenido::Init;
14
use ErrorTee;
15
use PidFile;
16
17
18
# begin
19
Contenido::Init->init();
20
21
my $keeper_module = $state->project.'::Keeper';
22
$keeper = $keeper_module->new($state);
23
24
#PidFile->new($keeper, compat=>1); # db-based locking (run only on one host)
25
#PidFile->new($keeper, compat=>1, per_host=>1); # db-based locking (run on whole cluster)
26
27
############################################
28
# please use:
29
# $state->{log_dir} for logging
30
# $state->{tmp_dir} for temporary files
31
###########################################
32
my $SALES_TIMEOUT = 3600;
33
my $VAULT_TIMEOUT = 10800;
34
35
my $now = Contenido::DateTime->new;
36
my $request = "UPDATE orders SET manager_id = 0 WHERE status = 1 AND mtime < (CURRENT_DATE - '$SALES_TIMEOUT seconds'::INTERVAL)";
37
my $sql = $keeper->SQL->prepare( $request );
38
$sql->execute();
39
$sql->finish();
40
41
$request = "UPDATE orders SET vault_id = 0 WHERE status = 2 AND mtime < (CURRENT_DATE - '$VAULT_TIMEOUT seconds'::INTERVAL)";
42
$sql = $keeper->SQL->prepare( $request );
43
$sql->execute();
44
$sql->finish();
Небольшая справка по веткам
cnddist – контейнер, в котором хранятся все дистрибутивы всех библиотек и программных пакетов, которые использовались при построении различных версий Contenido. Если какой-то библиотеки в данном хранилище нет, инсталлятор сделает попытку "подтянуть" ее с веба (например, с CPAN). Если библиотека слишком старая, есть очень большая вероятность, что ее там уже нет. Поэтому мы храним весь хлам от всех сборок. Если какой-то дистрибутив вдруг отсутствует в cnddist - напишите нам, мы положим его туда.
koi8 – отмирающая ветка, чей код, выдача и все внутренние библиотеки заточены на кодировку KOI8-R. Вносятся только те дополнения, которые касаются внешнего вида и функционала админки, баги ядра, обязательные обновления портов и мелочи, которые легко скопипастить. В дальнейшем планируется полная остановка поддержки по данной ветке.
utf8 – актуальная ветка, заточенная под UTF-8.
Внутри каждой ветки: core – исходники ядра; install – скрипт установки инсталляции; plugins – плагины; samples – "готовые к употреблению" проекты, которые можно поставить, запустить и посмотреть, как они работают.