#!perl -w
use DBIx::Web;
use vars qw($w);
#my $w;
$w =DBIx::Web->new($w
,-title =>'CMDB' # title of application
#,-logo =>'<img src="/icons/p.gif" border="0" />'
,-debug =>1 # debug level
,-log =>0 # logging
,-serial =>0 # serial operation level
,-dbiarg =>["DBI:mysql:cgibus","cgibus","********"]
,-dbiACLike =>'rlike' # dbi access control comparation, i.e. 'eq lc', 'rlike'
,-keyqn =>1 # key query null comparation
,-path =>'-ServerRoot' # datastore path
#,-cgibus =>undef # legacy mode
#,-url =>'/dbix-web' # filestore URL (/dbix-web or /cgi-bus)
,-urf =>'-path' # filestore filesystem URL
#,-fswtr =>'System' # filesystem writers (default is process account)
#,-login =>/cgi-bin/ntlm/# login URL
#,-AuthUserFile =>'' # apache users file
#,-AuthGroupFile=>'' # apache groups file
#,-usernt =>1 # windows NT style for user names (0 - @, 1 - \\)
#,-userln =>0 # short local usernames (0 - off, 1 - default)
,-ugadd =>['Everyone','Guests'] # additional user groups
#,-rac =>0 # record access control (0 - off, 1 - default)
#,-racAdmRdr =>'' # record access control admin reader
#,-racAdmWtr =>'' # record access control admin writer
#,-rfa =>0 # record file attachments (0 - off, 1 - default)
#,-w32xcacls =>1 # use 'xcacls' instead of 'cacls'
#,-httpheader =>{} # http header arguments
#,-htmlstart =>{} # html start arguments
,-smtphost =>'localhost' # smtp mail server
,-smtpdomain =>'localhost' # smtp default domain
,-search=>sub{ 1
? $_[0]->urlCmd('',-form=>'cmdb-nav.psp', -cmd=>'frmCall',-frame=>'_main')
: $_[0]->urlCmd('',-form=>'cmdb-nav.psp', -cmd=>'frmCall',-frame=>'RIGHT')
}
);
### CMDBm Settings
### HelpDesk Settings
#$w->{-a_cmdbh_larole} ={''=>'' # Support groups, or using 'uglist()'
# ,'group name' => 'group label'
# };
$w->{-a_cmdbh_lmrole} = # Manager roles
$w->{-a_cmdbh_larole};
$w->{-a_cmdbh_vmrole} ={ '' => '' # Manager assign (rec=>value||[values]||{values})
,'work' => undef # all off: $w->{-a_cmdbh_vmrole} =undef
# ,'incident' => undef
# ,'problem' => ['Everyone','']
};
$w->{-a_cmdbh_lrrole} ={ '' => '' # Read levels
,'Everyone' => 'Everyone'
};
### CMDBm Predefinitions
$w->{-a_cmdbm_fh} = # CMDBm field hide conditions
sub{ my $k =ref($_[0]) ? $_[0]->{-pout}->{'record'} : $_[0];
my $f =ref($_[1]) ? $_[1]->{-fld} : $_[1];
!$k
? 0
: $k eq 'all'
? $f !~/^(?:name|system|service|application|type|os|invno|location|office|model|hardware|cpu|ram|hdd|action|computer|slot|device|port|ipaddr|macaddr|speed|duplex|interface|ugroup|role|user|stmt|seclvl|definition)/
: $k eq 'description'
? $f !~/^(?:name|system|office|stmt|definition)/
: $k eq 'service'
? $f !~/^(?:name|system|application|office|stmt|seclvl|definition)/
: $k eq 'user'
? $f !~/^(?:name|system|location|office|ugroup|user|stmt|seclvl|definition)/
: $k eq 'grouping'
? $f !~/^(?:ugroup|role|user|stmt|definition)/
: $k eq 'computer'
? $f !~/^(?:name|system|type|os|invno|location|office|model|hardware|cpu|ram|hdd|port|ipaddr|ipmask|macaddr|speed|duplex|role|user|stmt|seclvl|definition)/
: $k eq 'interface'
? $f !~/^(?:name|system|computer|port|ipaddr|ipmask|macaddr|speed|duplex|stmt|definition)/
: $k eq 'device'
? $f !~/^(?:name|system|slot|invno|location|office|model|hardware|stmt|definition)/
: $k eq 'netint'
? $f !~/^(?:name|system|slot|invno|service|ipaddr|ipmask|macaddr|speed|duplex|interface|stmt|definition)$/
: $k eq 'connector'
? $f !~/^(?:name|system|slot|device|port|stmt|definition)/
: $k eq 'connection'
? $f !~/^(?:system|slot|device|port|stmt|definition)/
: $k eq 'usage'
? $f !~/^(?:service|action|computer|interface|role|user|stmt|definition)/
: 0 };
$w->{-a_cmdbm_fho} = # CMDBm field optional hide condition
sub{ (!$_ && ($_[2] !~/e/)) ||&{$_[0]->{-a_cmdbm_fh}}(@_)};
$w->{-a_cmdbm_fl} = # CMDBm field link description
['','recRead','name']; # ['','recRead','name']|['cmdbm','','-wikn']
### HelpDesk Predefinitions
$w->{-a_cmdbh_rectype} ={ # record subtypes
'incident' =>[qw(svc-rst svc-req sys-rst sys-evt)]
,'work' =>['','vendor']
,'task' =>['','vendor']
,'solution' =>['','faq','howto','object','component','contact','applicatn','location','operation','doc']
,'error' =>[qw(bug enhancmnt)]
,'change' =>[qw(implementn change project release)]
,'unavlbl' =>[qw(part-schd full-schd part-uschd full-uschd)]
,'note' =>['','faq','howto']
};
$w->{-a_cmdbh_fsvrclr} ={0=>'orangered' # severity colours
,1=>'orange'
,2=>'yellow'
,3=>'turquoise'
,'3.5'=>'lavender'
,4=>'lime'
,''=>'lightgreen'};
$w->{-a_cmdbh_fsvrlds} =sub{ # -ldstyle with severity colours
my $v =eval{$_[3]->{-rec}->{severity}};
$v ='3.5'
if (!defined($v) || ($v eq '4'))
&& $_[3]->{-rec}->{record}
&& ($_[3]->{-rec}->{record} eq 'unavlbl')
&& $_[0]->{-a_cmdbh_fsvrclr}->{'3.5'};
(defined($v) && ($v ne '') && ($_[0]->{-a_cmdbh_fsvrclr}->{$v})
&& ('background-color: ' .$_[0]->{-a_cmdbh_fsvrclr}->{$v}))
|| ''};
$w->logRec('set') if $w->{-debug};
$w->set(
-menuchs =>[ 'start'
,'notes'
,'hdesk', 'hdesko', 'hdeskc', 'hdeskg'
,'cmdbm', 'cmdbmn', 'cmdbmh'
,'fulltext']
,-menuchs1 =>[ '','notes+','hdesk+','cmdbm+']
,-wikq =>sub{ my($s,$n,$q,$k,$r,$f) =@_;
return(undef)
if $q !~/^(object|application|location|process)\.*(.*)/;
($q,$k) =($1,$2);
$k ='' if !$k
|| ($k !~/^solution\.$q/)
|| ($k !~/$q$/)
|| (($q eq 'object') && ($k !~/(object|component|contact)$/))
;
my $n1 =$n;
while ($n1) {
$f ='hdesk';
$r = !$k && $s->recRead(-test=>1,-table=>$f
,-version=>'-'
,-key=>{$q=>$n1
, $q eq 'application'
? ('rectype'=>'applicatn')
: $q eq 'object'
? ('rectype'=>['object','component']) #,'contact'])
: ('rectype'=>$q)});
$r && return({-table=>$f,-key=>$s->recKey($f,$r)});
$f ='cmdbm';
$r =($q ne 'process')
&& $s->recRead(-test=>1,-table=>$f
,-version=>'-'
,-key=>{'name'=>$n1});
$r && return({-table=>$f,-key=>$s->recKey($f,$r)});
last if ($n1 !~/(.+)\/[^\\\/]+$/)
&& ($n1 !~/^[^\.\@]+[\.\@](.*)/);
$n1 =$1
}
return({-table=>'hdesk',-cmd=>'recList',-qkey=>{$q=>$n}});
}
,-table =>{
'notes'=>{ ### notes table
-lbl =>'Notes'
,-cmt =>'Notes'
,-lbl_ru =>'Çàìåòêè'
,-cmt_ru =>'Çàìåòêè'
,-expr =>'cgibus.notes'
,-null =>''
,-field =>[
{-fld=>$w->tn('-rvcActPtr')
,-flg=>'q'
,-hide=>sub{!$_}
},
,{-fld=>'id'
,-flg=>'kwq'
,-lblhtml=>$w->tfoShow('id_',['idrm'])
}, ''
,{-fld=>$w->tn('-rvcInsWhen')
,-flg=>'q'
,-ldstyle=>'width: 20ex'
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::\d\d)$/ ? $` : $_}
}, ''
,{-fld=>$w->tn('-rvcInsBy')
,-flg=>'q'
},
,{-fld=>'idrm'
,-flg=>'euq'
,-hide=>$w->tfoHide('id_')
},''
,{-fld=>$w->tn('-rvcUpdWhen')
,-flg=>'wq'
,-fhprop=>'nowrap=true'
,-ldstyle=>'width: 20ex'
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::\d\d)$/ ? $` : $_}
},''
,{-fld=>$w->tn('-rvcUpdBy')
,-edit=>0
,-flg=>'wql'
,-lhstyle=>'width: 10ex'
,-lsthtml=>sub{$_[0]->htmlEscape($_[0]->udispq($_))}
,-ldprop=>'nowrap=true'
}
,{-fld=>'otime'
,-flg=>'l', -hidel=>1
,-expr=> "CONCAT("
."IF(status IN('edit','progress','do'), '', ' ')"
.", utime)"
,-lbl=>'Execution', -cmt=>'Fulfilment ordering of records'
,-lbl_ru=>'Âûï-å', -cmt_ru=>'Óïîðÿäî÷åíèå çàïèñåé ïî âûïîëíåíèþ'
,-lhstyle=>'width: 20ex'
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::\d\d)$/ ? $` : $_}
}
,{-fld=>'prole'
,-flg=>'euq'
,-fdprop=>'nowrap=true'
,-ddlb=>sub{$_[0]->uglist({})}
#,-ddlbtgt=>[[undef,undef,','],['rrole',undef,',']]
,-ddlbtgt=>[[undef,undef],['rrole',undef]]
}, ''
,{-fld=>'rrole'
,-flg=>'euq'
,-ddlb=>sub{$_[0]->uglist({})}
#,-colspan=>3
},''
,{-fld=>'mailto'
,-flg=>'euq'
,-hide=>sub{ !$_ && ($_[2] !~/e/)}
,-ddlb=>sub{$_[0]->{-ldapsrv}
? $_[0]->ldapLst('-<>','',{},['mail','cn'])
: $_[0]->uglist({})}
,-ddlbtgt=>[[undef,undef,', ']]
,-ddlbmsab=>1
}
,{-fld=>$w->tn('-rvcState')
,-inp=>{ -values=>['ok','edit','chk-out','deleted']
,-labels_ru=>{'ok'=>'çàâåðøåíî','edit'=>'ðåäàêò-å','deleted'=>'óäàëåíî'}
}
,-flg=>'euql', -null=>undef
,-lhstyle=>'width: 14ex'
,-ldstyle=>sub{ /^(?:ok)$/
? '' : 'color: red; font-weight: bold'}
}, ''
,{-fld=>'subject'
,-flg=>'euqlm', -null=>undef
,-inp=>{-asize=>60}
,-colspan=>3
}
,"\f"
,{-fld=>'comment'
,-flg=>'eu'
,-lblhtml=>'' # '<b>$_</b><br />'
,-inp=>{-htmlopt=>1, -hrefs=>1, -arows=>5, -cols=>70}
}
,$w->tfsAll()
]
,$w->ttoRVC()
,-dbd =>'dbi'
,-ridRef =>[qw(idrm comment)]
,-dbiACLike =>'eq'
,-racReader =>[qw(rrole)]
,-racWriter =>[$w->tn('-rvcUpdBy'), $w->tn('-rvcInsBy'), 'prole']
,-urm =>[$w->tn('-rvcUpdWhen')]
,-rfa =>1
,-cgiRun0A =>sub{ $_[0]->{-udisp} ='+'
# comments as group display names
}
,-recNew0C =>sub{ $_[2]->{'idrm'} =$_[3]->{'id'}||'';
foreach my $n (qw(prole rrole)) {
$_[2]->{$n} =$_[3]->{$n}
if !$_[2]->{$n} && $_[3]->{$n};
$_[0]->recLast($_[1],$_[2],['uuser'],[$n])
if !$_[2]->{$n};
}
$_[2]->{'status'} ='ok' if !$_[2]->{'status'};
}
,-recChg0W =>sub {
$_[0]->smtpSend(-to=>$_[2]->{mailto}
,-pout=>$_[2], -pcmd=>$_[1])
if $_[2]->{mailto}
&& ($_[2]->{$_[0]->tn('-rvcState')}
=~/^(?:ok|no|do|progress|deleted)$/);
}
,-query =>{ -display=>[qw(otime status subject uuser)]
,-frmLso=>['hierarchy']
,-order=>'otime'
,-keyord=>'-dall'
}
,-frmLsoAdd =>
[['hierarchy',undef,{-qkeyadd=>{'idrm'=>undef}}]
]
,-frmLsc =>
[{-val=>'otime',-cmd=>{}}
,{-val=>'utime'}
,{-val=>'ctime'}
]
}
,'cmdbm'=>{ ### cmdbm table
-lbl =>'CMDB'
,-cmt =>'CMDB - Configuration management database'
,-lbl_ru =>'ÊÁÄ'
,-cmt_ru =>'ÊÁÄ - Êîíôèãóðàöèîííàÿ áàçà äàííûõ'
,-expr =>'cgibus.cmdbm'
,-null =>''
,-field =>[
sub{return('') if !$_[3]->{-print};
'<td colspan=3>'
.'<nobr>Configuration item approvement form</nobr>'
.'</td></tr><tr>'
}
,{-fld=>$w->tn('-rvcActPtr')
,-flg=>'q'
,-hide=>sub{!$_}
}, ''
,{-fld=>$w->tn('-rvcInsWhen')
,-flg=>'q'
,-hide=>sub{$_[2] =~/p/}
}, ''
,{-fld=>$w->tn('-rvcInsBy')
,-flg=>'q'
,-hide=>sub{$_[2] =~/p/}
}
,{-fld=>'id'
,-flg=>'kwq'
}, ''
,{-fld=>$w->tn('-rvcUpdWhen')
,-flg=>'wq'
,-fhprop=>'nowrap=true'
,-ldstyle=>'width: 25ex'
,-ldprop=>'nowrap=true'
},''
,{-fld=>$w->tn('-rvcUpdBy')
,-edit=>0
,-flg=>'wq'
,-lhstyle=>'width: 10ex'
}
,{-fld=>$w->tn('-rvcState')
,-inp=>{-values=>['new','change','delete','edit','chk-out','ok','deleted']
,-labels_ru=>{'new'=>'ââåñòè','change'=>'èçìåíèòü','delete'=>'èñêëþ÷èòü','edit'=>'ðåäàêò-å','ok'=>'ok','deleted'=>'óäàëåíî'}
}
,-flg=>'euq', -null=>undef
,-lhstyle=>'width: 5ex'
,-ldstyle=>sub{ /^(?:ok)$/
? '' : 'color: red; font-weight: bold'}
,-fdstyle=>sub{$_[2] =~/p/ ? 'font-size: larger; font-weight: bolder; color: red': ''}
}, ''
,{-fld=>'authors'
,-flg=>'euq'
,-ddlb=>sub{$_[0]->uglist({})}
,-ddlbtgt=>[[undef,undef,', '],['readers',undef,', ']]
}, ''
,{-fld=>'readers'
,-flg=>'euq'
,-ddlb=>sub{$_[0]->uglist({})}
,-ddlbtgt=>[[undef,undef,', ']]
,-colspan=>3
}
,{-fld=>'record'
,-cmt=>"'description' or documentation"
."'service', application or system;\n"
."'user' or group,\n"
."'grouping' of users;\n"
."'computer' system,\n"
."'interface' of computer into network;\n"
."'network interface' to connect computer/interface;\n"
."'device';\n"
."named 'connector' or unnamed 'connection' or cabling of devices;\n"
."'usage' of service by computer and/or user, usage of computer by user;\n"
,-cmt_ru=>"'îïèñàíèå' èëè äîêóìåíòàöèÿ;\n"
."'ñåðâèñ', ïðèëîæåíèå èëè ñèñòåìà;\n"
."'ïîëüçîâàòåëü' èëè ãðóïïà,\n"
."'ãðóïïèðîâàíèå' ïîëüçîâàòåëåé;\n"
."'êîìïüþòåð' èëè âû÷èñëèòåëüíàÿ óñòàíîâêà,\n"
."'èíòåðôåéñ' êîìïüþòåðà â ñåòü;\n"
."'èíòåðôåéñ ñåòè' äëÿ ïîäêëþ÷åíèÿ êîìïüþòåðà/èíòåðôåéñà;\n"
."'óñòðîéñòâî';\n"
."èìåíîâàííûé 'ñîåäèíèòåëü' è íåèìåíîâàííîå 'ñîåäèíåíèå' óñòðîéñòâ;\n"
."'ïðèìåíåíèå' ñåðâèñà êîìïüþòåðîì è/èëè ïîëüçîâàòåëåì, ëèáî êîìïüþòåðà ïîëüçîâàòåëåì;\n"
,-inp=>{-values=>['description','service','user','grouping','computer','interface','device','netint','connector','connection','usage']
,-labels_ru=>{'description'=>'îïèñàíèå','service'=>'ñåðâèñ'
,'user'=>'ïîëüçîâàòåëü','grouping'=>'ãðóïïèðîâàíèå'
,'computer'=>'êîìïüþòåð','interface'=>'èíòåðôåéñ'
,'device'=>'óñòðîéñòâî'
,'connector'=>'ñîåäèíèòåëü'
,'connection'=>'ñîåäèíåíèå'
,'usage'=>'ïðèìåíåíèå'
,'netint'=>'èíò.ñåòè'}
,-loop=>1
}
,-flg=>'euq', -null=>undef
,-edit=>sub{$_[0]->{-pout}->{-new}}
,-fdstyle=>sub{$_[2] =~/p/ ? 'font-size: larger; font-weight: bolder; color: red': ''}
} # , ''
,{-fld=>'name'
,-lbl=>'Name', -cmt=>'Configuration item name'
,-lbl_ru=>'Èìÿ', -cmt_ru=>'Èìÿ êîíôèãóðàöèîííîé åäèíèöû'
,-flg=>'euq', -null=>undef
,-inp=>{-asize=>60}
,-hidel=>$w->{-a_cmdbm_fh}
,-fdstyle=>sub{$_[2] =~/p/ ? 'font-size: larger; font-weight: bolder; color: red': 'font-size: larger; font-weight: bolder;'}
,-fnhref=>sub{
$_ && ($_[2] !~/p/)
&& $_[0]->urlCmd('',-form=>'hdesk',-cmd=>'recList'
,-qwhere=>$_[0]->dbi->quote($_) .' IN(hdesk.object, hdesk.application, hdesk.location)'
.' OR hdesk.subject LIKE ' .$_[0]->dbiQuote("%$_%")
)
}
,-colspan=>3
}
,{-fld=>'vsubject'
,-lbl=>'Subject'
,-lbl_ru=>'Òåìà'
,-flg=>'-', -hidel=>1
,-expr=>"IF(name IS NOT NULL AND name !='',"
."CONCAT_WS(' - ', name, definition),"
."CONCAT_WS(' - ', name, system, slot, service, action, computer, interface, device, port, ugroup, role, user, definition))"
,-lsthtml=>sub{ my $r =$_[3]->{-rec};
# return($_[0]->htmlEscape($r->{definition}));
$r->{-a_a} =$_[0]->lngslot($_[0]->{-table}->{cmdbm}->{-mdefld}->{action}->{-inp},'-labels')
if !$r->{-a_a};
$r->{-a_r} =$_[0]->lngslot($_[0]->{-table}->{cmdbm}->{-mdefld}->{role}->{-inp},'-labels')
if !$r->{-a_r};
$_[0]->htmlEscape(join(' - ', map {!$_ ? () : $_}
$r->{name}
? (@$r{qw(name type model invno office device interface userdef definition)})
# ??? review
: (@$r{qw(name system slot service)}
, join(' ', map {!$_ ? () : $_}
$r->{action} && $r->{-a_a}->{$r->{action}} || $r->{action}
, ($r->{interface}||'') eq ($r->{computer}||'')
? () : $r->{interface}
, $r->{computer})
, @$r{qw(device port ugroup)}
, join(' ', map {!$_ ? () : $_}
$r->{role} && $r->{-a_r}->{$r->{role}} || $r->{role}
, $r->{user}
, $r->{userdef}
)
, @$r{qw(definition)}
)))}
# ,-lsthtml=>undef
}
,{-fld=>'vorder'
,-lbl=>'Sorting'
,-lbl_ru=>'Ñîðòèðîâêà'
,-flg=>'-', -hidel=>1
,-expr=>"IF(record='description',0,IF(record='service',1,IF(record='device',2,IF(record='computer' OR record='interface',3,IF(record='netint',4,IF(record='connection' OR record='connector',5,IF(record='user',6,IF(record='usage' AND action='supplier',7,IF(record='usage' AND role !='user',8,9)))))))))"
}
,{-fld=>'vordh'
,-lbl=>'Sorting'
,-lbl_ru=>'Ñîðòèðîâêà'
,-flg=>'f', -hidel=>1
,-expr=>"IF(system IS NULL OR system='',0,IF(record='description',1,IF(record='service',2,IF(record='device',3,IF(record='computer' OR record='interface',4,IF(record='netint',4,IF(record='connection' OR record='connector',5,IF(record='user',6,IF(record='usage' AND action='supplier',7,IF(record='usage' AND role !='user',8,9))))))))))"
}
,{-fld=>'system'
,-lbl=>'System', -cmt=>'System including descriptions, services, users, computers/interfaces, devices'
,-lbl_ru=>'Ñèñòåìà', -cmt_ru=>'Ñèñòåìà, âêëþ÷àþùàÿ îïèñàíèÿ, ñåðâèñû, ïîëüçîâàòåëåé, êîìïüþòåðû/èíòåðôåéñû, óñòðîéñòâà'
,-flg=>'euq'
#,-inp=>{-asize=>60}
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> 'cmdbmn'
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','computer','interface','device','netint')"
, -qkey=>{$_ ? ('system'=>$_) : ('system'=>'')}})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>5
}
,{-fld=>'slot'
,-lbl=>'Slot', -cmt=>'Slot of the system/computer/device where device installed'
,-lbl_ru=>'Ñëîò', -cmt_ru=>'Ñëîò óñòàíîâêè óñòðîéñòâà â ñèñòåìó/êîìïüþòåð/óñòðîéñòâî'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb =>sub{$_[0]->cgiQueryFv('','slot')}, -form=>'cmdbm'
,-colspan=>5
}
,{-fld=>'type'
,-lbl=>'Type', -cmt=>'Type of computer, description or typisation service, may be in \'Types\' container'
,-lbl_ru=>'Òèï', -cmt_ru=>'Òèï êîìïüþòåðà, îïèñàíèå èëè òèïèçèðóþùèé ñåðâèñ, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'Òèïû\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qkey=>{'record'=>['service','description']
,$_ ? ('system'=>$_) : ('system'=>['','Types','Òèïû'])}
,$_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>3
},''
,{-fld=>'os'
,-lbl=>'OS', -cmt=>'Operation System, description, may be in \'OS\' container'
,-lbl_ru=>'ÎÑ', -cmt_ru=>'Îïåðàöèîííàÿ ñèñòåìà / ñåòåâîå ïðîãðàììíîå îáåñïå÷åíèå, îïèñàíèå, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'ÎÑ\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qkey=>{'record'=>['service','description']
,$_ ? ('system'=>$_) : ('system'=>['','OS','ÎÑ'])}
,$_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
},
,{-fld=>'invno'
,-lbl=>'Inv#', -cmt=>'Inventory number of computer'
,-lbl_ru=>'Èíâ¹', -cmt_ru=>'Èíâåíòàðíûé èëè çàâîäñêîé íîìåð'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
},''
,{-fld=>'office'
,-lbl=>'Office', -cmt=>'Office or subdivision, description or organisation structure service, may be in \'Offices\' container'
,-lbl_ru=>'Ïîäðàçä.', -cmt_ru=>'Ïîäðàçäåëåíèå, îòäåë, ñëóæáà, îïèñàíèå èëè îðãñòðóêòóðíûé ñåðâèñ, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'Ïîäðàçäåëåíèÿ\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','user')"
.($_ ? '' : " AND (system IS NULL OR system='' OR system IN('Offices','Ïîäðàçäåëåíèÿ') OR record='user')")
, -qkey=>{$_ ? ('system'=>$_) : ()}
, $_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
},''
,{-fld=>'location'
,-lbl=>'Location', -cmt=>'Location of computer or device, description or apartment service, may be in \'Locations\' container'
,-lbl_ru=>'Ìåñòî', -cmt_ru=>'Ìåñòîíàõîæäåíèå êîìïüþòåðà èëè óñòðîéñòâà, îïèñàíèå èëè ñåðâèñ ðàçìåùåíèÿ, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'Ìåñòîíàõîæäåíèÿ\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qkey=>{'record'=>['service','description']
,$_ ? ('system'=>$_) : ('system'=>['','Locations','Apartments','Ìåñòîíàõîæäåíèÿ','Ïîìåùåíèÿ'])}
,$_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
}
,{-fld=>'model'
,-lbl=>'Model', -cmt=>'Model of computer or device, descriptio or typisation service, may be in \'Models\' container'
,-lbl_ru=>'Ìîäåëü', -cmt_ru=>'Ìîäåëü êîìïüþòåðà èëè óñòðîéñòâà, îïèñàíèå èëè òèïèçèðóþùèé ñåðâèñ, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'Ìîäåëè\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qkey=>{'record'=>['service','description']
,$_ ? ('system'=>$_) : ('system'=>['','Models','Ìîäåëè'])}
,$_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
},''
,{-fld=>'hardware'
,-lbl=>'Hardware', -cmt=>'Hardware description'
,-lbl_ru=>'Õàðàêò.', -cmt_ru=>'Îïèñàíèå àïïàðàòíîãî îáåñïå÷åíèÿ'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{-asize=>60}
,-colspan=>3
},
,{-fld=>'cpu'
,-lbl=>'CPU', -cmt=>'Central Processor Unit'
,-lbl_ru=>'CPU', -cmt_ru=>'Ïðîöåññîð'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb =>sub{$_[0]->cgiQueryFv('','cpu')}, -form=>'cmdbm'
}, ''
,{-fld=>'ram'
,-lbl=>'RAM', -cmt=>'RAM capacity, Mb'
,-lbl_ru=>'RAM', -cmt_ru=>'Îáúåì îïåðàòèâíîé ïàìÿòè, Mb'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
}, ''
,{-fld=>'hdd'
,-lbl=>'HDD', -cmt=>'Main HDD capacity, Gb'
,-lbl_ru=>'HDD', -cmt_ru=>'Îáúåì îñíîâíîé äèñêîâîé ïàìÿòè, Gb'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
}
,{-fld=>'application'
,-lbl=>'Application', -cmt=>'Application to use a service, description or service, may be in \'Applications\' container'
,-lbl_ru=>'Ïðèëîæåíèå', -cmt_ru=>'Ïðèëîæåíèå äîñòóïà ê ñåðâèñó, îïèñàíèå èëè ñåðâèñ, ìîæåò íàõîäèòüñÿ â êîíòåéíåðå \'Ïðèëîæåíèÿ\''
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qkey=>{'record'=>['service','description']
,$_ ? ('system'=>$_) : ('system'=>['','Applications','Ïðèëîæåíèÿ'])}
,$_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>5
}
,{-fld=>'service'
,-lbl=>'Service', -cmt=>'Service being used/supplied'
,-lbl_ru=>'Ñåðâèñ', -cmt_ru=>'Ñåðâèñ, ïðèìåíÿåìûé/ïîñòàâëÿåìûé'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','computer','interface')"
, -qkey=>{$_ ? ('system'=>$_) : ('system'=>'')}})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>5
}
,{-fld=>'device'
,-lbl=>'Device', -cmt=>'Device/computer connected'
,-lbl_ru=>'Óñòðîéñòâî', -cmt_ru=>'Ïîäêëþ÷àåìîå óñòðîéñòâî/êîìïüþòåð'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','computer','device','netint')"
.($_ ? '' : " AND (system IS NULL OR system='' OR system IN('Computers','Êîìïüþòåðû') OR record='computer')")
, -qkey=>{$_ ? ('system'=>$_) : ()}
, $_ ? () : (-qorder=>['vordh','name'])
})}
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>5
}
,{-fld=>'action'
,-lbl=>'Action', -cmt=>'Action of the computer delivering/accepting service'
,-lbl_ru=>'Äåéñòâèå', -cmt_ru=>'Äåéñòâèå âû÷èñëèòåëüíîé óñòàíîâêè ïî ïðåäîñòàâëåíèþ èëè ïîòðåáëåíèþ óñëóãè'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{-values=>['','user','supplier']
,-labels_ru=>{''=>'','user'=>'ïîòðåáèòåëü','supplier'=>'ïîñòàâùèê'}
}
}, ''
,{-fld=>'computer'
,-lbl=>'Computer', -cmt=>'Computer installation (server, cluster, desktop, or another)'
,-lbl_ru=>'Êîìïüþòåð', -cmt_ru=>'Âû÷èñëèòåëüíàÿ óñòàíîâêà (ñåðâåð, êëàñòåð, íàñòîëüíàÿ ñèñòåìà, è ò.ï.)'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','computer')"
.($_ ? '' : " AND (system IS NULL OR system='' OR system IN('Computers','Êîìïüþòåðû') OR record='computer')")
, -qkey=>{$_ ? ('system'=>$_) : ()}
, $_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
},''
,{-fld=>'interface'
,-lbl=>'Interface', -cmt=>'Computer\'s network interface'
,-lbl_ru=>'Èíòåðôåéñ', -cmt_ru=>'Ñåòåâîé èíòåðôåéñ âû÷èñëèòåëüíîé óñòàíîâêè'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record in('interface','computer')"
,-qkey=>{$_[0]->{-pout}->{computer}||$_[0]->{-pout}->{device}
? ('computer'=>$_[0]->{-pout}->{computer}||$_[0]->{-pout}->{device})
: ()}}
)}
,-form=>sub{['',-cmd=>'recRead',-form=>'cmdbm'
,-key=>{'name' =>$_||'?'}]}
,-form=>$w->{-a_cmdbm_fl}
}
,{-fld=>'port'
,-lbl=>'Port', -cmt=>'Device\'s port connected'
,-lbl_ru=>'Ïîðò', -cmt_ru=>'Ïîäêëþ÷àåìûé ïîðò óñòðîéñòâà'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb =>sub{$_[0]->cgiQueryFv('','port')}, -form=>'cmdbm'
,-colspan=>5
}
,{-fld=>'ipaddr'
,-lbl=>'IP addr', -cmt=>'TCP/IP address'
,-lbl_ru=>'Àäðåñ IP', -cmt_ru=>'Àäðåñ TCP/IP'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
}, ''
,{-fld=>'ipmask'
,-lbl=>'IP mask', -cmt=>'TCP/IP network mask'
,-lbl_ru=>'Ìàñêà IP', -cmt_ru=>'Ìàñêà ñåòè TCP/IP'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
}, ''
,{-fld=>'macaddr'
,-lbl=>'MAC', -cmt=>'MAC address'
,-lbl_ru=>'MAC', -cmt_ru=>'Àäðåñ MAC'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
}
,{-fld=>'speed'
,-lbl=>'Speed', -cmt=>'Network speed mbit/sec'
,-lbl_ru=>'Ñêîðîñòü', -cmt_ru=>'Ñêîðîñòü ñåòè mbit/sec'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{-values=>['',10,100,1000,10000]}
},''
,{-fld=>'duplex'
,-lbl=>'Duplex', -cmt=>'Network speed mbit/sec'
,-lbl_ru=>'Äóïëåêñ', -cmt_ru=>'Ðåæèì äóïëåêñà ñåòè'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{-values=>['',0,1], -labels=>{0=>'Off', 1=>'On'}}
}
,{-fld=>'ugroup'
,-lbl=>'Group', -cmt=>'Group including user'
,-lbl_ru=>'Ãðóïïà', -cmt_ru=>'Ãðóïïà, â êîòîðóþ âêëþ÷àåòñÿ ïîëüçîâàòåëü'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','user')"
.($_ ? '' : " AND (system IS NULL OR system='' OR system IN('Users','Ïîëüçîâàòåëè') OR record='user')")
, -qkey=>{$_ ? ('system'=>$_) : ()}
, $_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-colspan=>5
}
,{-fld=>'role'
,-lbl=>'Role', -cmt=>'Role of the user'
,-lbl_ru=>'Ðîëü', -cmt_ru=>'Ðîëü ïîëüçîâàòåëÿ'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{-values=>['','user','responsible','sysadmin','sysadmin double','appadmin','appadmin double','security','security double']
,-labels_ru=>{''=>'','user'=>'ïîëüçîâàòåëü'
,'responsible'=>'îòâåòñòâåííûé'
,'sysadmin'=>'ñèñòåìíûé àäì-ð'
,'sysadmin double'=>'äóáëåð ñèñò.àäì.'
,'appadmin'=>'ïðèêëàäíîé àäì-ð'
,'appadmin double'=>'äóáëåð ïðèêë.àäì.'
,'security'=>'àäì-ð áåçîïàñíîñòè'
,'security double'=>'äóáëåð àäì.áåçîï.'
}
}
}, ''
,{-fld=>'user'
,-lbl=>'User', -cmt=>'User name'
,-lbl_ru=>'Ïîëüçîâàòåëü', -cmt_ru=>'Èìÿ ïîëüçîâàòåëÿ'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-ddlb=> sub{$_[0]->cgiQuery('cmdbmn',undef
,{-qwhere=>"record IN('description','service','user')"
.($_ ? '' : " AND (system IS NULL OR system='' OR system IN('Users','Ïîëüçîâàòåëè') OR record='user')")
, -qkey=>{$_ ? ('system'=>$_) : ()}
, $_ ? () : (-qorder=>['vordh','name'])
})}
,-ddlbloop=>1
,-form=>$w->{-a_cmdbm_fl}
,-inphtml=>sub{ return('$_') if !$_ || ($_[2] =~/eq/);
$_[0]->htmlEscape(
'$_' .($_[0]->{-pout}->{userdef} ? ' - ' .$_[0]->{-pout}->{userdef} : ''))
}
,-lsthtml=>sub{$_[0]->htmlEscape($_[3]->{-rec}->{userdef}
? $_ .' - ' .$_[3]->{-rec}->{userdef}
: ($_||''))}
,-colspan=>3
}
,{-fld=>'userdef'
,-lbl=>'UserDef', -cmt=>'User definition'
,-lbl_ru=>'ÎïðÏîëüç', -cmt_ru=>'Îïðåäåëåíèå ïîëüçîâàòåëÿ'
,-flg=>'', -hidel=>1
}
,{-fld=>'seclvl'
,-lbl=>'Permit', -cmt=>'Security level/clearance/classification'
,-lbl_ru=>'Äîïóñê', -cmt_ru=>'Óðîâåíü áåçîïàñíîñòè/çàùèòû/äîñòóïà'
,-flg=>'euq'
,-hidel=>$w->{-a_cmdbm_fho}
,-inp=>{ -values=>['', qw(public corporate restricted confidentl secret)]
,-labels_ru=>{ '' =>''
,'public' => 'ïóáëè÷íûé'
,'corporate' => 'êîðïîðàòèâíûé'
,'restricted' => 'îãðàíè÷åííûé'
,'confidentl' => 'êîíôèäåíöèàëüíûé'
,'secret' => 'òàéíà'
}}
},
#,{-fld=>'stmt'
# ,-lbl=>'Stmt *', -cmt=>'[obsolete/legacy/removal] Statement of work'
# ,-lbl_ru=>'Îñíîâàíèå *', -cmt_ru=>'[óñòàðåëî/óíàñëåäîâàíî/èñêëþ÷åíèå] Îñíîâàíèå âûïîëíåíèÿ ðàáîò'
# ,-flg=>'euq'
# ,-hidel=>1
# ,-ddlb =>sub{$_[0]->cgiQueryFv('','stmt')}, -form=>'cmdbm'
# ,-fnhref=>sub{
# $_ && ($_[2] !~/p/)
# && $_[0]->urlCmd('',-form=>'hdesk',-cmd=>'recList'
# ,-qwhere=>'hdesk.subject LIKE ' .$_[0]->dbiQuote("%$_%")
# )
# }
# }
,{-fld=>'definition'
,-lbl=>'Def', -cmt=>'Configuration item short definition'
,-lbl_ru=>'Îïð-å', -cmt_ru=>'Îïðåäåëåíèå (êðàòêîå îïèñàíèå) êîíôèãóðàöèîííîé åäèíèöû'
,-flg=>'euq', -null=>undef
,-inp=>{-asize=>100}
,-hidel=>$w->{-a_cmdbm_fh}
,-colspan=>5
,-fdstyle=>sub{$_[2] =~/p/ ? 'font-size: larger; font-weight: bolder; color: red': 'font-size: larger; font-weight: bolder;'}
}
,"\f"
,{-fld=>'comment'
,-flg=>'eu'
,-lblhtml=>'' # '<b>$_</b><br />'
,-inp=>{-htmlopt=>1, -hrefs=>1, -arows=>5, -cols=>70}
}
,$w->tfsAll() # ,$w->tfdRFD(),$w->tfvVersions(),$w->tfvReferences()
, sub { my $s =$_[0];
my $d =$_[0]->{-pout};
my $c =$_[3];
return('') if ($s->{-pcmd}->{-cmg} eq 'recQBF');
return('') if !$d->{'record'};
local $s->{-uiclass} ='tfvReferences';
my $vw =sub{
my $qwhr ='('
.join(') AND ('
,$_[0] =~/\s|[^\w\d]/ ? shift : ()
,@_
? join(' OR '
, map {"$_=" .$s->dbi->quote($d->{name})
} @_)
: ()
) .')';
$s->cgiLst('cmdbmv'
,{-qflghtml=>
'<div align="right" style="font-size: smaller;"><hr />'
.($c && $c->{-print}
? ''
: $s->cgi->a({-href=>
$s->urlCmd('',-cmd=>'frmCall'
,-form=>'cmdbm'
,-qwhere=>$qwhr)
,-title=>$s->lng(1,'recQBF')
}, $s->lng(0,'recQBF')))
."</div>\n"
,-qorder=>['vorder','vsubject']
,-qwhere=> $qwhr }
)};
my $va =sub{
my $qwhr ='('
.join(') AND ('
,$_[0] =~/\s|[^\w\d]/ ? shift : ()
,@_
? join(' OR '
, map {"$_=" .$s->dbi->quote($d->{name})
} @_)
: ()
) .')';
$s->cgiLst('-','cmdbmva'
,{-qflghtml=>$s->cgi->hr() ."\n"
,-qwhere=> $qwhr}
)};
if (!$d->{name}) {
}
elsif ($d->{'record'} eq 'description') {
&$vw(qw(system service application computer type model os location office));
}
elsif ($d->{'record'} eq 'service') {
&$vw(qw(system service application computer type model os location office));
# &$va(qw(service));
}
elsif ($d->{'record'} eq 'user') {
&$vw(qw(user));
&$vw(qw(ugroup));
}
elsif ($d->{'record'} eq 'computer') {
&$vw("id !=" .$s->dbi->quote($d->{id}||0)
,qw(computer device interface service system))
}
elsif ($d->{'record'} eq 'interface') {
&$vw("id !=" .$s->dbi->quote($d->{id}||0)
,qw(interface service))
}
elsif ($d->{'record'} eq 'device') {
&$vw(qw(device));
&$vw(qw(system));
}
elsif ($d->{'record'} eq 'netint') {
&$vw(qw(system));
}
''}
, sub { return('') if !$_[3]->{-print};
"<br/><hr/>\n"
."Approvement signatures<br/><br/>\n"
}
]
,$w->ttoRVC()
,-dbd =>'dbi'
,-dbiACLike =>'rlike'
,-racReader =>[qw(readers)]
,-racWriter =>[$w->tn('-rvcUpdBy'), 'authors']
,-urm =>[$w->tn('-rvcUpdWhen')]
,-rfa =>1
,-recNew0C =>sub{
foreach my $n (qw(authors readers)) {
$_[2]->{$n} =$_[3]->{$n}
if !$_[2]->{$n} && $_[3]->{$n};
$_[0]->recLast($_[1],$_[2],['uuser'],[$n])
if !$_[2]->{$n};
}
# !!! only visible fields will be transfered changing record type
if (!$_[3]->{'record'}) {
}
elsif ($_[3]->{'record'} eq 'description') {
$_[2]->{'record'} =$_[3]->{'record'} if !$_[2]->{'record'};
$_[2]->{'name'} =$_[3]->{'name'} .'/' if !$_[2]->{'name'};
$_[2]->{'system'} =$_[3]->{'name'} if !$_[2]->{'system'};
$_[2]->{'service'}=$_[3]->{'name'} if !$_[2]->{'service'};
}
elsif ($_[3]->{'record'} eq 'service') {
$_[2]->{'record'} =$_[3]->{'record'} if !$_[2]->{'record'};
$_[2]->{'name'} =$_[3]->{'name'} .'/' if !$_[2]->{'name'};
$_[2]->{'system'} =$_[3]->{'name'} if !$_[2]->{'system'};
$_[2]->{'service'}=$_[3]->{'name'} if !$_[2]->{'service'};
}
elsif ($_[3]->{'record'} eq 'user') {
$_[2]->{'record'}='grouping' if !$_[2]->{'record'};
$_[2]->{'user'} =$_[3]->{'name'} if !$_[2]->{'user'};
}
elsif ($_[3]->{'record'} eq 'grouping') {
$_[2]->{'record'} =$_[3]->{'record'} if !$_[2]->{'record'};
$_[2]->{'user'} =$_[3]->{'user'} if !$_[2]->{'user'};
}
elsif ($_[3]->{'record'} eq 'computer') {
$_[2]->{'record'} ='usage' if !$_[2]->{'record'};
foreach my $n (qw(computer device)) {
$_[2]->{$n} =$_[3]->{'name'} if !$_[2]->{$n}
}
foreach my $n (qw(port urole user)) {
$_[2]->{$n} =$_[3]->{$n} if !$_[2]->{$n}
}
}
elsif ($_[3]->{'record'} eq 'interface') {
$_[2]->{'record'} ='usage' if !$_[2]->{'record'};
foreach my $n (qw(computer device)) {
$_[2]->{$n} =$_[3]->{'computer'} if !$_[2]->{$n}
}
foreach my $n (qw(interface)) {
$_[2]->{$n} =$_[3]->{'name'} if !$_[2]->{$n}
}
foreach my $n (qw(port urole user)) {
$_[2]->{$n} =$_[3]->{$n} if !$_[2]->{$n}
}
}
elsif ($_[3]->{'record'} eq 'device') {
$_[2]->{'record'} ='connection' if !$_[2]->{'record'};
$_[2]->{'device'} =$_[3]->{'name'} if !$_[2]->{'device'};
}
elsif ($_[3]->{'record'} eq 'connection') {
$_[2]->{'record'} =$_[3]->{'record'} if !$_[2]->{'record'};
foreach my $n (qw(system slot computer device interface port)) {
$_[2]->{$n} =$_[3]->{$n} if !$_[2]->{$n}
}
}
elsif ($_[3]->{'record'} eq 'usage') {
$_[2]->{'record'} =$_[3]->{'record'} if !$_[2]->{'record'};
foreach my $n (qw(service action computer device interface role user)) {
$_[2]->{$n} =$_[3]->{$n} if !$_[2]->{$n}
}
}
$_[2]->{'record'} ='description' if !$_[2]->{'record'};
$_[2]->{'status'} ='new' if !$_[2]->{'status'};
}
,-recEdt0R => sub{
$_[2]->{computer} =$_[2]->{name}
if $_[2]->{record}
&& ($_[2]->{record} eq 'computer');
}
,-recChg0R => sub{
$_[0]->die('"' .$_[0]->lnglbl($_[0]->{-table}->{cmdbm}->{-mdefld}->{record},'-fld')
.'" - '
.$_[0]->lng(0,'fldReqStp'))
if !$_[2]->{record};
foreach my $f (@{$_[0]->{-table}->{'cmdbm'}->{-field}}) {
next if !ref($f) ||(ref($f) ne 'HASH') || !$f->{-fld};
next if !&{$_[0]->{-a_cmdbm_fh}}($_[2]->{record}, $f->{-fld});
next if &{$_[0]->{-a_cmdbm_fh}}('all', $f->{-fld});
$_[2]->{$f->{-fld}} =undef;
}
if ($_[2]->{record} eq 'computer') {
$_[2]->{computer} =$_[2]->{name}
}
if ($_[2]->{record} eq 'usage') {
$_[2]->{action} =undef
if !$_[2]->{computer};
$_[2]->{interface} =undef
if !$_[2]->{computer}
|| !$_[2]->{action};
$_[2]->{role} =undef
if !$_[2]->{user};
$_[2]->{user} =undef
if !$_[2]->{role};
}
if (!&{$_[0]->{-a_cmdbm_fh}}($_[2]->{record}, 'user')) {
my $v = $_[2]->{user}
? $_[0]->recRead(-table=>'cmdbm',-test=>1, -key=>{name=>$_[2]->{user}})
: undef;
$_[2]->{userdef} =$v
? $v->{definition}
: undef;
}
if (!&{$_[0]->{-a_cmdbm_fh}}($_[2]->{record}, 'name')) {
$_[0]->die('"' .$_[0]->lnglbl($_[0]->{-table}->{cmdbm}->{-mdefld}->{name},'-fld')
.'" - '
.$_[0]->lng(0,'fldReqStp'))
if !$_[2]->{name};
$_[0]->die('"' .$_[0]->lnglbl($_[0]->{-table}->{cmdbm}->{-mdefld}->{name},'-fld')
.'" - '
.$_[0]->lng(0,'fldChkStp'))
if $_[0]->recLast({-table=>$_[1]->{-table}, -excl=>1, -version=>0}
,$_[2], ['name'])
}
}
,-recUpd0R => sub{
if (($_[2]->{record} ne $_[3]->{record})
&& !$_[0]->uadmin()
) {
$_[0]->die('"' .$_[0]->lnglbl($_[0]->{-table}->{cmdbm}->{-mdefld}->{record},'-fld')
.'" - '
.$_[0]->lng(0,'fldChkStp'))
}
if (!&{$_[0]->{-a_cmdbm_fh}}($_[2]->{record}, 'name')) {
if (($_[2]->{name}||'') ne ($_[3]->{name}||'')) {
$_[0]->die('"' .$_[0]->lnglbl($_[0]->{-table}->{cmdbm}->{-mdefld}->{name},'-fld')
.'" - '
.$_[0]->lng(0,'fldChkStp'))
if 0 && !$_[0]->uadmin();
foreach my $n (qw(system service application type os model location user ugroup office computer interface device)) {
$_[0]->recUtr(
{-table=>$_[1]->{-table}
, -version=>1, -excl=>1
}
,{'name'=>$n},$_[2],$_[3])
}
}
if ($_[2]->{record} eq 'user'
&& (($_[2]->{definition}||'') ne ($_[3]->{definition}||''))) {
$_[0]->recUtr(
{-table=>$_[1]->{-table}
,-version=>1, -excl=>1}
,{'name'=>'user'
,'definition'=>'userdef'}
,$_[2],$_[3])
}
}
}
,-query =>{ -display=>[qw(utime uuser status record vsubject)]
,-order=>'utime'
,-keyord=>'-dall'
}
,-frmLsc =>
[{-val=>'utime',-cmd=>{}}
,['vsubject',undef
,sub { $_[3]->{-order} ='vsubject asc, utime desc';
}]
]
,-limit =>1024
}
,'hdesk'=>{ ### hdesk table
-lbl =>'Service Desk'
,-cmt =>'Service Desk for requests and incidents'
,-lbl_ru =>'Öåíòð Îáñëóæ.'
,-cmt_ru =>'Öåíòð îáñëóæèâàíèÿ çàïðîñîâ è èíöèäåíòîâ'
,-expr =>'cgibus.hdesk'
,-null =>''
,-field =>[
{-fld=>$w->tn('-rvcActPtr')
,-flg=>'q'
,-hide=>sub{!$_}
},
,{-fld=>'id'
,-flg=>'kwq'
#,-lblhtml=>$w->tfoShow('id_',['idrm'])
,-fhstyle=>sub{ my $v =$_[0]->{-pout}->{severity};
defined($v) && ($v ne '4') && $_[0]->{-a_cmdbh_fsvrclr}->{$v}
&& ($_[2] !~/[q]/)
? 'color: ' .$_[0]->{-a_cmdbh_fsvrclr}->{$v}
# ? 'background-color: ' .$_[0]->{-a_cmdbh_fsvrclr}->{$v}
# ? 'border: 1px solid ' .$_[0]->{-a_cmdbh_fsvrclr}->{$v}
# ? 'border: 0 solid ' .$_[0]->{-a_cmdbh_fsvrclr}->{$v} .'; border-bottom-width: thin'
: ''}
}, ''
,{-fld=>$w->tn('-rvcInsWhen')
,-flg=>'q'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-fdprop=>'nowrap=true'
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
}, ''
,{-fld=>$w->tn('-rvcInsBy')
,-flg=>'q'
,-fdprop=>'nowrap=true'
}
,"\n\t\t"
,{-fld=>$w->tn('-rvcUpdWhen')
,-flg=>'wq'
,-fhprop=>'nowrap=true'
,-fdprop=>'nowrap=true'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
},''
,{-fld=>$w->tn('-rvcUpdBy')
,-edit=>0
,-flg=>'wq'
,-fdprop=>'nowrap=true'
,-lhstyle=>'width: 10ex'
}
,{-fld=>'vftime'
,-flg=>'f', -hidel=>1
,-expr=>'COALESCE(hdesk.etime, hdesk.utime)'
,-lbl=>'Finish', -cmt=>'Finish time of record described by'
,-lbl_ru=>'Çàâåðø', -cmt_ru=>'Äàòà è âðåìÿ çàâåðøåíèÿ ñîáûòèÿ èëè îáíîâëåíèÿ çàïèñè'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
}
,{-fld=>'votime'
,-flg=>'f', -hidel=>1
,-expr=> "CONCAT("
."IF(hdesk.status IN('new','draft','appr-do','scheduled','do','progress','rollback','delay','appr-ok','appr-no','edit'), '', ' ')"
.", COALESCE(hdesk.etime, hdesk.utime))"
,-lbl=>'Execution', -cmt=>'Fulfilment records order'
,-lbl_ru=>'Âûï-å', -cmt_ru=>'Óïîðÿäî÷åíèå ïî âûïîëíåíèþ çàïèñåé'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
}
,{-fld=>'votimej'
,-flg=>'-', -hidel=>1
,-expr=> "CONCAT("
."IF(hdesk.status IN('new','draft','appr-do','scheduled','do','progress','rollback','delay','appr-ok','appr-no','edit'), '', ' ')"
.", GREATEST(COALESCE(MAX(j.utime),hdesk.utime),hdesk.utime))"
,-lbl=>'Exec/below', -cmt=>'Record/subrecords update order'
,-lbl_ru=>'Âûï/ïîä', -cmt_ru=>'Óïîðÿäî÷åíèå ïî èçìåíåíèþ çàïèñè/ïîäçàïèñåé'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
}
,{-fld=>'idrm'
,-flg=>'euq'
,-hide=>$w->tfoHide('id_')
,-hide=>sub{ !$_ && ($_[2] !~/e/)}
},''
,{-fld=>'idpr'
,-flg=>'euq'
,-lbl=>'PrevRec', -cmt=>'Causal/Previous Record ID' #'vqis"'
,-lbl_ru=>'Ïðåäø', -cmt_ru=>'Óíèêàëüíûé èäåíòèôèêàòîð ïðè÷èííîé èëè èëè çíà÷èìî ïðåäøåñòâóþùåé çàïèñè, òåìó èëè çàäà÷ó êîòîðîé ïðîäîëæàåò äàííàÿ çàïèñü'
,-hide=>$w->tfoHide('id_')
,-hide=>sub{ !$_ && ($_[2] !~/e/)}
}
,{-fld=>'puser'
,-flg=>'euq'
,-lbl=>'User', -cmt=>'Principal User of Request'
,-lbl_ru=>'Ïîëüç.', -cmt_ru=>'Îáñëóæèâàåìûé ïîëüçîâàòåëü èëè èíèöèàòîð çàÿâêè; îáû÷íî èìÿ ïîëüçîâàòåëÿ â ñèñòåìå/ñåòè; ìîæåò ïðîñìàòðèâàòü çàïèñü'
,-ddlb=>sub{$_[0]->uglist('-u',{})}
,-ddlbtgt=>[undef,['auser'],['mailto',undef,',']]
,-inp=>{-maxlength=>60}
,-fdprop=>'nowrap=true'
}, ''
,{-fld=>'prole'
,-flg=>'euq'
,-lbl=>'UsrDev', -cmt=>'Division, Role or Group of User'
,-lbl_ru=>'Ïîäð.Ïëç', -cmt_ru=>'Îáñëóæèâàåìîå (èëè èíèöèèðîâàâøåå çàÿâêó) ïîäðàçäåëåíèå (â êîòîðîå âõîäèò îáñëóæèâàåìûé ïîëüçîâàòåëü); îáû÷íî èìÿ ãðóïïû â ñèñòåìå/ñåòè; ìîæåò ïðîñìàòðèâàòü çàïèñü'
,-ddlb=>sub{$_[0]->uglist('-g',{})}
,-ddlb=>sub{$_[0]->uglist('-g', $_[0]->{-pdta}->{'puser'}, {})}
,-ddlbtgt=>[undef,['arole'],['rrole']]
,-inp=>{-maxlength=>60}
,-colspan=>3
}
,{-fld=>'auser'
,-flg=>'euq'
,-lbl_ru=>'Èñï-ëü', -cmt_ru=>'Èñïîëíèòåëü ðàáîò (çàïèñè), èìÿ ïîëüçîâàòåëÿ â ñèñòåìå/ñåòè; ìîæåò èçìåíÿòü çàïèñü'
,-ddlb=>sub{$_[0]->uglist('-u',{})}
,-ddlbtgt=>[undef,['puser'],['mailto',undef,',']]
,-fdprop=>'nowrap=true'
}, ''
,{-fld=>'arole'
,-flg=>'euq'
,-lbl_ru=>'Ïîäð.Èñï', -cmt_ru=>'Èñïîëíèòåëè ðàáîò (çàïèñè) - Ïîäðàçäåëåíèå, ðîëü èëè ãðóïïà; èìÿ ãëîáàëüíîé ãðóïïû â ñèñòåìå/ñåòè; ìîæåò èçìåíÿòü çàïèñü'
,$w->{-a_cmdbh_larole}
? (-inp=>{-labels=>$w->{-a_cmdbh_larole}})
: (-ddlb=>sub{$_[0]->uglist('-g', $_[0]->{-pdta}->{'auser'}, {})})
,!$w->{-a_cmdbh_vmrole} ? (-colspan=>3) : ()
}, ''
,{-fld=>'mrole'
,-flg=>'euq'
,-hide=>sub{!$_[0]->{-a_cmdbh_vmrole}
|| ($_[3]->{record}
&& exists($_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}})
&& !$_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}})
|| (!$_ && ($_[2] !~/e/))
}
,$w->{-a_cmdbh_lmrole}
? (-inp=>{-labels=>
sub { return($_[0]->{-a_cmdbh_lmrole})
if !$_[0]->{-pcmd}->{-edit}
|| !$_[0]->{-pout}->{record}
|| !$_[0]->{-a_cmdbh_vmrole}->{$_[0]->{-pout}->{record}};
my $v =$_[0]->{-a_cmdbh_vmrole}->{$_[0]->{-pout}->{record}};
ref($v) eq 'HASH'
? $v
: {map {($_ => $_[0]->{-a_cmdbh_lmrole}->{$_} ||$_)
} ref($v) eq 'ARRAY' ? (@$v) : ($v)}
}
,-loop=>1})
: (-ddlb=>sub{$_[0]->uglist('-ug',{})}
,-ddlbtgt=>[undef,['auser'],['puser'],['mailto',undef,',']])
}
,{-fld=>'vauser'
,-flg=>'-', -hidel=>1
,-expr=>"CONCAT_WS('; ', hdesk.auser, hdesk.arole)"
,-lbl=>'Actors', -cmt=>'Actors of record - Actor and ARole'
,-lbl_ru=>'Èñï-ëè', -cmt_ru=>'Èñïîëíèòåëè çàïèñè - ïîëüçîâàòåëü / ïîäðàçäåëåíèå; èñïîëüçóåòñÿ äëÿ ïðåäñòàâëåíèé'
,-ldstyle=>'padding-left: 1em'
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{ my ($u, $g) =(split /\s*;\s*/, $_);
my ($u1, $g1) =($u && $_[0]->udispq($u)
,$g && $_[0]->{-a_cmdbh_larole} && $_[0]->{-a_cmdbh_larole}->{$g} ||$g);
'<span title="' .$_[0]->htmlEscape(join('; ', $u ? "$u1 <$u>" : (), $g ? "$g1 <$g>" : ()))
.'">'
.$_[0]->htmlEscape(join('; '
, $u
? (($u1=~/[.,]/) ||($_[0]->{-lang} !~/ru/i)
? $u1
: $u1 =~/^([^\s]+)\s+([^\s]+)\s+([^\s]+)$/
? $1 .' ' .substr($2,0,1) .'.' .substr($3,0,1) .'.'
: $u1
)
: ()
, $g ? $g1 : ()
))
.'</span>'}
}
,{-fld=>'rrole'
,-flg=>'euq'
,-lbl_ru=>'×èòàòåëè', -cmt_ru=>'Êðóã ÷èòàòåëåé çàïèñè - ðîëü èëè ãðóïïà; èìÿ ãðóïïû â ñèñòåìå/ñåòè; ìîæåò ïðîñìàòðèâàòü çàïèñü'
,$w->{-a_cmdbh_lrrole}
? (-inp=>{-labels=>$w->{-a_cmdbh_lrrole}})
: (-ddlb=>sub{$_[0]->uglist('-g',{})})
},''
,{-fld=>'mailto'
,-flg=>'euq'
,-ddlb=>sub{$_[0]->uglist('-u',{})}
,-ddlbtgt=>[[undef,undef,',']]
,-ddlbmsab=>1
,-inp=>{-maxlength=>255, -asize=>20}
,-colspan=>3
}
,{-fld=>'record'
,-flg=>'euq', -null=>undef
,-cmt=>"Record type:\n"
."'request' general - registration/fulfillment;\n"
."'work' free assignment with 'AboveID', 'Actors', 'Delete' restricted;\n"
."'task' strict assignment with most fields and deletion resticted;\n"
."'note' general - description/documentation;\n"
."Incident Managenent: 'incident', 'unavailability';\n"
."Problem Management and Definitions: 'problem', 'solution', 'error';\n"
."Change Management: 'change', 'unavailability', 'schedule';\n"
."Asset Management: 'purchase'"
,-cmt_ru=>"Òèï çàïèñè:\n"
."'çàÿâêà' - îáùåãî õàðàêòåðà - ðåãèñòðàöèÿ/âûïîëíåíèå;\n"
."'ðàáîòà' - ñâîáîäíîå íàçíà÷åíèå ñ îãðàíè÷åíèåì èçìåíåíèÿ 'Ãëàâíàÿ' è 'Ïîäð.Èñï', óäàëåíèÿ;\n"
."'çàäàíèå' - ñòðîãîå íàçíà÷åíèå ñ îãðàíè÷åíèåì èçìåíåíèÿ áîëüøèíñòâà ïîëåé è óäàëåíèÿ;\n"
."'çàìåòêà' - îáùåãî õàðàêòåðà îïèñàíèå/äîêóìåíòàöèÿ;\n"
."Óïðàâëåíèå Èíöèäåíòàìè: 'èíöèäåíò', 'íåäîñòóïíîñòü';\n"
."Óïðàâëåíèå Ïðîáëåìàìè è Îïðåäåëåíèÿ: 'ïðîáëåìà', 'ðåøåíèå', 'îøèáêà';\n"
."Óïðàâëåíèå Èçìåíåíèÿìè: 'èçìåíåíèå', 'íåäîñòóïíîñòü', 'ðàñïèñàíèå';\n"
."Óïðàâëåíèå Àêòèâàìè: 'ïðèîáðåòåíèå'"
,-inp=>{-values=>[qw(request work task incident problem solution error change unavlbl purchase schedule note)]
,-labels=>{ ''=>''
,'request' =>'request'
,'work' =>'work'
,'task' =>'task'
,'incident' =>'incident'
,'problem' =>'problem'
,'solution' =>'solution'
,'error' =>'error'
,'change' =>'change'
,'unavlbl' =>'unavlbl'
,'purchase' =>'purchase'
,'schedule' =>'schedule'
,'note' =>'note'
}
,-labels_ru=>{ ''=>''
,'request' =>'çàÿâêà'
,'work' =>'ðàáîòà'
,'task' =>'çàäàíèå'
,'incident' =>'èíöèäåíò'
,'problem' =>'ïðîáëåìà'
,'solution' =>'ðåøåíèå'
,'error' =>'îøèáêà'
,'change' =>'èçìåíåíèå'
,'unavlbl' =>'íåäîñòóïí'
,'purchase' =>'ïðèîáðåòåíèå'
,'schedule' =>'ãðàôèê'
,'note' =>'çàìåòêà'
}
,-loop=>1
}
,-fnhtml=>sub{ $_[2] eq 'e'
? '<input type="hidden" name="record__P" value="' .($_[3]->{'record'}||'') .'">'
: ''}
}, ''
,{-fld=>'rectype'
,-flg=>'euq'
,-lbl=>'Subtype', -cmt=>"Record subtype"
,-lbl=>'Ïîäòèï', -cmt_ru=>"Ïîäòèï çàïèñè"
,-hidel=>sub{!$_[0]->{-pout}->{record} || !$_[0]->{-a_cmdbh_rectype}->{$_[0]->{-pout}->{record}}
|| (!$_ && ($_[2] !~/e/))}
,-inp=>{ -values =>sub{ $_[0]->{-pout}->{record}
&& $_[0]->{-a_cmdbh_rectype}->{$_[0]->{-pout}->{record}}
|| []}
,-labels =>{ ''=>''
,'svc-rst' =>'service restore'
,'svc-req' =>'service request'
,'sys-rst' =>'system restore'
,'sys-evt' =>'system event'
,'contact' =>'contact'
,'vendor' =>'vendor'
,'faq' =>'FAQ'
,'howto' =>'HOWTO'
,'bug' =>'bug'
,'enhancmnt' =>'enhancement'
,'part-schd' =>'partial/scheduled'
,'full-schd' =>'full/scheduled'
,'part-uschd' =>'partial/unscheduled'
,'full-uschd' =>'full/unscheduled'
,'implementn' =>'implementation'
,'change' =>'change'
,'project' =>'project'
,'release' =>'release'
,'object' =>'object'
,'component' =>'component'
,'contact' =>'contact'
,'applicatn' =>'application'
,'location' =>'location'
,'operation' =>'operation'
,'doc' =>'documentation'
}
,-labels_ru =>{ ''=>''
,'svc-rst' =>'âîññò.óñëóã'
,'svc-req' =>'îáñë.ïîëüç.'
,'sys-rst' =>'âîññò.ñèñòåì'
,'sys-evt' =>'ñîáûòèå ñèñò'
,'contact' =>'êîíòàêò'
,'vendor' =>'ïîñòàâùèê'
,'faq' =>'÷àâî'
,'howto' =>'êàê'
,'bug' =>'äåôåêò'
,'enhancmnt' =>'ðàñøèðåíèå'
,'part-schd' =>'÷àñò/ïëàí'
,'full-schd' =>'ïîëí/ïëàí'
,'part-uschd' =>'÷àñò/íåïë'
,'full-uschd' =>'ïîëí/íåïë'
,'implementn' =>'âîïëîùåíèå'
,'change' =>'èçìåíåíèå'
,'project' =>'ïðîåêò'
,'release' =>'ðåëèç'
,'object' =>'îáúåêò'
,'component' =>'êîìïîíåíò'
,'contact' =>'êîíòàêò'
,'applicatn' =>'ðåñóðñ'
,'location' =>'ìåñòî'
,'operation' =>'äåÿòåëüíîñòü'
,'doc' =>'äîêóìåíòàöèÿ'
}
}
}, ''
,{-fld=>'recprc'
,-flg=>'f', -hidel=>1
,-lbl=>'OverType', -cmt=>"Master record type"
,-lbl=>'Íàäòèï', -cmt_ru=>"Òèï âûøåñòîÿùåé çàïèñè"
}, ''
,{-fld=>'vrecord'
,-flg=>'-', -hidel=>1
,-lbl=>'Type', -cmt=>"Record subtype/type, for lists"
,-lbl=>'Òèï', -cmt_ru=>"Ïîäòèï/òèï çàïèñè, äëÿ ïðåäñòàâëåíèé"
,-expr=>"IF(hdesk.rectype, hdesk.rectype, hdesk.record)"
,-lsthtml=>sub{ $_[3]->{-a_rr} =$_[0]->lngslot($_[0]->{-table}->{hdesk}->{-mdefld}->{record}->{-inp},'-labels') if !$_[3]->{-a_rr};
$_[3]->{-a_rt} =$_[0]->lngslot($_[0]->{-table}->{hdesk}->{-mdefld}->{rectype}->{-inp},'-labels') if !$_[3]->{-a_rt};
$_[3]->{-a_rs} =$_[0]->lngslot($_[0]->{-table}->{hdesk}->{-mdefld}->{severity}->{-inp},'-labels') if !$_[3]->{-a_rs};
'<span title="'
.$_[0]->htmlEscape(
join(', ',$_[3]->{-rec}->{recprc} ? $_[3]->{-a_rr}->{$_[3]->{-rec}->{recprc}} ||$_[3]->{-rec}->{recprc} : ()
, $_[3]->{-rec}->{record} ? $_[3]->{-a_rr}->{$_[3]->{-rec}->{record}} ||$_[3]->{-rec}->{record} : 'undef'
, defined($_[3]->{-rec}->{severity}) ? $_[3]->{-a_rs}->{$_[3]->{-rec}->{severity}} ||$_[3]->{-rec}->{severity} : ()
))
.'">'
.$_[0]->htmlEscape(
# $_[3]->{-a_rr}->{$_||''} ||$_ ||'undef'
$_[3]->{-a_rt}->{$_[3]->{-rec}->{rectype}||''} ||$_[3]->{-a_rr}->{$_||''} ||$_ ||'undef'
) .'</span>'}
}, '', ''
,{-fld=>'severity'
,-flg=>'euq', -null=>undef
,-lbl=>'Severity', -cmt=>"Severity of Record, level of urgency/impact: 'critical/wide'(0), 'high/large'(1), 'medium/limited'(2), 'low/localised'(3), 'general/planning'(4)"
,-lbl_ru=>'Óðîâåíü', -cmt_ru=>"Ïðèîðèòåò çàïèñè, óðîâåíü ñðî÷íîñòè/âîçäåéñòâèÿ: 'êðèòè÷åñêèé/ðàñøèðåííûé'(0), 'âûñîêèé/çíà÷èòåëüíûé'(1), 'ñðåäíèé/îãðàíè÷åííûé'(2), 'íèçêèé/ëîêàëüíûé'(3), 'îáùèé/ïëàíèðîâàíèå'(4)"
,-inp=>{-values=>[0,1,2,3,4]
,-labels=>{ ''=>''
,0=>'critical (1h)'
,1=>'high (8h)' # major
,2=>'medium (24h)' # minor
,3=>'low (48h)' # warning
,'3.5'=>'unavlbl'
,4=>'general'} # normal
,-labels_ru=>{ ''=>''
,0=>'êðèòè÷åñêèé (1÷)'
,1=>'çíà÷èòåëüíûé (8÷)'
,2=>'ñðåäíèé (24÷)' # íåçíà÷èòåëüíûé
,3=>'íèçêèé (48÷)' # ïðåäóïðåæäåíèå
,'3.5'=>'íåäîñòóïí'
,4=>'îáùèé'} # íîðìàëüíûé
,-loop=>sub{!$_[0]->{-pdta}->{etime}
&& (($_[0]->{-pdta}->{record}||'') eq 'incident')
}
}
}
,{-fld=>$w->tn('-rvcState')
,-flg=>'euq', -null=>undef
,-cmt=>"Status of the record or activity: planning ('new', 'draft', 'appr-do', 'scheduled', 'do') --> progress ('progress', 'rollback', 'delay', 'edit') --> approval ('appr-ok', 'appr-no') --> result ('ok', 'no').\n"
."'Managers' are responsible for acception ('new'; 'appr-do'), moderation, approvement ('appr-ok', 'appr-no').\n"
."'Actors' operates the record ('draft'; 'do', 'progress', 'delay', 'edit')."
,-cmt_ru=>"Ñòàòóñ çàïèñè/äåÿòåëüíîñòè: ïëàíèðîâàíèå ('çàïðîñ', 'ïðîåêò', 'óòâåðäèòü', 'ïëàí', 'âûïîëíèòü') --> ñîñòîÿíèå ðàáîò ('âûïîëíåíèå', 'âîçâðàò', 'çàäåðæêà', 'ðåäàêòèðîâàíèå') --> îäîáðåíèå ('óòâ.çâðø', 'óòâ.îòêë') --> ðåçóëüòàò ('çàâåðøåíî', 'îòêëîíåíî').\n"
."'Ìåíåäæåðû' âûïîëíÿþò ïðèåìêó ('çàïðîñ'; 'óòâåðäèòü') è îäîáðåíèå ('óòâ.çâðø', 'óòâ.îòêë'), ìîäåðèðóþò ñîïðîâîæäåíèå çàïèñè.\n"
."'Èñïîëíèòåëè' ñîïðîâîæäàþò çàïèñü ('ïðîåêò'; 'âûïîëíèòü', 'âûïîëíåíèå', 'âîçâðàò', 'çàäåðæêà', 'ðåäàêòèðîâàíèå')."
,-inp=>{-values=>[qw(new draft appr-do scheduled do progress rollback delay edit appr-ok appr-no ok no deleted)]
,-labels_ru=>{ ''=>''
,'new'=>'çàïðîñ'
,'draft'=>'ïðîåêò'
,'appr-do'=>'óòâåðäèòü'
,'scheduled'=>'ïëàí'
,'do'=>'âûïîëíèòü'
,'progress'=>'âûïîëí-å'
,'rollback'=>'âîçâðàò'
,'delay'=>'çàäåðæêà'
,'edit'=>'ðåäàêò-å'
,'appr-ok'=>'óòâ.çâðø'
,'appr-no'=>'óòâ.îòêë'
,'ok'=>'çàâåðøåíî'
,'no'=>'îòêëîíåíî'
,'deleted'=>'óäàëåíî'}
}
,-lhstyle=>'width: 5ex'
,-ldprop=>'nowrap=true'
,-ldstyle=>sub{ my ($v,$r) =($_, $_[3]->{-rec});
# if (0 && !$r->{-a_sg}) { # bg highlight
# $r->{-a_sg} ={};
# my $h =$_[0]->recSel(
# -table=>'hdesk'
# ,-data=>['idrm','status']
# ,-group=>['idrm','status']
# ,-where=>"status IN('new','draft','appr-do','scheduled','do','progress','rollback','delay','edit','appr-ok','appr-no') AND (idrm IS NOT NULL AND idrm<>'')");
# while(my $t=$h->fetchrow_hashref()) {
# $r->{-a_sg}->{$t->{idrm}} =''
# if !$r->{-a_sg}->{$t->{idrm}};
# $r->{-a_sg}->{$t->{idrm}} .=' ' .$t->{status}
# }
# }
# elsif ($r->{votimej} && $r->{utime} && $r->{status}
# && ($r->{status} =~/^(?:draft|do|progress|rollback|delay|edit)/)
# && ($r->{utime} lt substr($r->{votimej},-length($r->{utime})))
# ) {
# $h =1;
# }
$r->{-a_st} =$_[0]->strtime() if !$r->{-a_st};
($v =~/^(?:ok)$/
? ''
: $v
&& ($v=~/^(?:new|draft|appr-do|scheduled|do|progress|rollback|delay|edit|appr-ok|appr-no)$/)
&& $r->{etime}
&& ($r->{-a_st} gt $r->{etime})
? 'color: red; font-weight: bold;'
: 'color: brown; font-weight: bold')
.($v
&& ($v =~/^(?:do|progress|rollback|delay|edit)$/)
&& $r->{-a_sg} && !$r->{-a_sg}->{$r->{id}}
? '; background-color: yellow'
: '')}
}, ''
,{-fld=>'stime'
,-flg=>'euq'
,-lbl=>'Start', -cmt=>'Start time of record described by'
,-lbl_ru=>'Íà÷àëî', -cmt_ru=>'Äàòà è âðåìÿ íà÷àëà îïèñûâàåìîãî çàïèñüþ'
,-inp=>{-maxlength=>20, -id=>'stime'}
,-fdprop=>'nowrap=true'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
#,-inphtml=>sub{'$_'
# .($_[2] =~/[eq]/
# ?$_[0]->htmlSubmitSpl(-id=>'stime_b')
# : '')}
}, ''
,{-fld=>'etime'
,-flg=>'euq'
,-lbl=>'End', -cmt=>'End time of record described by'
,-lbl_ru=>'Çàâåðø', -cmt_ru=>'Äàòà è âðåìÿ çàâåðøåíèÿ îïèñûâàåìîãî çàïèñüþ'
,-inp=>{-maxlength=>20, -id=>'etime'}
,-fdprop=>'nowrap=true'
,-ldstyle=>$w->{-a_cmdbh_fsvrlds}
,-ldprop=>'nowrap=true'
,-lsthtml=>sub{/(?::00|\s00:00:00|:\d\d)$/ ? $` : $_}
#,-inphtml=>sub{'$_'
# .($_[2] =~/[eq]/
# ?$_[0]->htmlSubmitSpl(-id=>'etime_b') ."\n"
# .'<link rel="stylesheet" type="text/css" media="all" href="/jscalendar/calendar-win2k-1.css" />'
# .'<script type="text/javascript" src="/jscalendar/calendar.js"></script>'
# .'<script type="text/javascript" src="/jscalendar/lang/calendar-en.js"></script>'
# .'<script type="text/javascript" src="/jscalendar/calendar-setup.js"></script>'
# .'<script type="text/javascript">'
# .'Calendar.setup({'
# .'inputField: "stime"'
# .',ifFormat: "%Y-%m-%d %H:%M"'
# .',showsTime: true'
# .',timeFormat: "24"'
# .',button: "stime_b"'
# .'});'
# .'Calendar.setup({'
# .'inputField: "etime"'
# .',ifFormat: "%Y-%m-%d %H:%M"'
# .',showsTime: true'
# .',timeFormat: "24"'
# .',button: "etime_b"'
# .'});'
# .'</script>'
# : '')}
}
,{-fld=>'object'
,-flg=>'euq'
,-cmt=>'Object (computer, device) of record described by'
,-cmt_ru=>'Óíèêàëüíîå èìÿ îáúåêòà çàïèñè - êîìïüþòåðà èëè óñòðîéñòâà, ñîãëàñíî DNS'
# ,-ddlb =>sub{$_[0]->cgiQueryFv('','object')}
,-ddlb =>sub{$_[0]->recUnion(
$_[0]->cgiQueryFv('','object'
# ,{-qkey=>{'record'=>'solution'}}
)
,$_[0]->recSel(-table=>'cmdbm',-data=>['name'],-key=>{'record'=>'computer'},-order=>'name')
)}
,-form=>'hdesk'
,-inp=>{-maxlength=>60}
,-fnhref=>sub{
$_
# ? $_[0]->urlCmd('',-form=>'cmdbm',-key=>{'name'=>$_},-cmd=>'recRead')
? $_[0]->urlCmd('',-wikn=>$_,-wikq=>join('.', map {$_ ? $_ : ()} 'object',$_[3]->{record},$_[3]->{rectype}),-cmd=>'recRead')
: $_[2] =~/e/
# ? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'object')
? $_[0]->urlCmd('',-form=>'cmdbmn',-key=>{'record'=>'computer'},-cmd=>'recList')
: ''}
,-fvhref=>sub{
$_
? $_[0]->urlCmd('',-form=>'hdesk',-cmd=>'recList'
,-qwhere=>'hdesk.object=' .$_[0]->dbiQuote($_)
.' OR hdesk.subject LIKE ' .$_[0]->dbiQuote("%$_%"))
: $_[2] =~/[eq]/
? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'object')
: ''}
},''
,{-fld=>'application'
,-flg=>'euq'
,-lbl=>'Application', -cmt=>'Application or Resource (system, service, application) related to Record/Object'
,-lbl_ru=>'Ïðèëîæåíèå', -cmt_ru=>'Ðåñóðñ èëè ïðèëîæåíèå (ñèñòåìà, êîìïîíåíò, ñåðâèñ, ïðèëîæåíèå), ê êîòîðîìó îòíîñèòñÿ çàïèñü, â ôîðìàòå \'ñèñòåìà/ïîäñèñòåìà/...\''
# ,-ddlb =>sub{$_[0]->cgiQueryFv('','application')}
,-ddlb =>sub{$_[0]->hreverse($_[0]->recUnion(
$_[0]->cgiQueryFv('','application'
# ,{-qkey=>{'record'=>'solution'}}
)
,$_[0]->recSel(-table=>'cmdbm',-data=>['name'],-key=>{'record'=>'service'},-order=>'name')
))}
,-form=>'hdesk'
,-inp=>{-maxlength=>60}
,-fnhref=>sub{
$_
# ? $_[0]->urlCmd('',-form=>'cmdbm',-key=>{'name'=>$_},-cmd=>'recRead')
? $_[0]->urlCmd('',-wikn=>$_,-wikq=>join('.', map {$_ ? $_ : ()} 'application',$_[3]->{record},$_[3]->{rectype}),-cmd=>'recRead')
: $_[2] =~/e/
# ? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'application')
? $_[0]->urlCmd('',-form=>'cmdbmn',-key=>{'record'=>'service'},-cmd=>'recList')
: ''}
,-fvhref=>sub{
$_
? $_[0]->urlCmd('',-form=>'hdesk',-cmd=>'recList',-key=>{'application'=>$_})
: $_[2] =~/[eq]/
? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'application')
: ''}
},''
,{-fld=>'location'
,-flg=>'euq', -hidel=>sub{!$_ && ($_[2] !~/e/)}
,-lbl=>'Loc.', -cmt=>'Location of Record/Object'
,-lbl_ru=>'Ìåñòî', -cmt_ru=>'Ìåñòîíàõîæäåíèå/ðàçìåùåíèå, ê êîòîðîìó îòíîñèòñÿ çàïèñü, â ôîðìàòå \'îðãàíèçàöèÿ/.../êàáèíåò\''
# ,-ddlb =>sub{$_[0]->cgiQueryFv('','location')}
,-ddlb =>sub{$_[0]->recUnion(
$_[0]->cgiQueryFv('','location')
,$_[0]->recSel(-table=>'cmdbm',-data=>['name'],-key=>{'system'=>['Locations','Ìåñòîíàõîæäåíèÿ']},-order=>'name')
)}
,-form=>'hdesk'
,-inp=>{-maxlength=>60}
# ,-fnhref=>sub{$_ && $_[0]->urlCmd('',-form=>'cmdbm',-key=>{'name'=>$_},-cmd=>'recRead')}
,-fnhref=>sub{
$_
# ? $_[0]->urlCmd('',-form=>'cmdbm',-key=>{'name'=>$_},-cmd=>'recRead')
? $_[0]->urlCmd('',-wikn=>$_,-wikq=>join('.', map {$_ ? $_ : ()} 'location',$_[3]->{record},$_[3]->{rectype}),-cmd=>'recRead')
: $_[2] =~/e/
# ? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'location')
? $_[0]->urlCmd('',-form=>'cmdbmn',-key=>{'system'=>['Locations','Ìåñòîíàõîæäåíèÿ']},-cmd=>'recList')
: ''}
}
,"\n"
,{-fld=>'cause', -hide=>sub{$_[2] =~/e/
? !$_ && (($_[0]->{-pout}->{record}||'') !~/^(?:incident|problem|error)/)
: !$_}
,-flg=>'euq'
,-lbl=>'Cause', -cmt=>'Cause of incident, root cause of problem ivestigation or known error'
,-lbl_ru=>'Ïðè÷èíà', -cmt_ru=>'Ïðè÷èíà èíöèäåíòà, êîðíåâàÿ ïðè÷èíà ïðîáëåìû èëè îøèáêè'
,-form=>'hdesk'
#,-ddlb =>sub{$_[0]->cgiQueryFv('','cause')}
#,-inp=>{-maxlength=>60}
,-inp=>{ -values =>[''
,'fail'
,'fail/software'
,'fail/hardware'
,'fail/network'
,'breakage'
,'breakage/software'
,'breakage/hardware'
,'breakage/network'
,'improper'
,'improper/software'
,'improper/hardware'
,'improper/configuration'
,'change'
,'organization'
,'personnel']
,-labels_ru =>{'' =>''
,'fail' =>'ñáîé'
,'fail/software' =>'ñáîé ïðîãð'
,'fail/hardware' =>'ñáîé îáîðóä'
,'fail/network' =>'ñáîé ñåòè'
,'breakage' =>'ïîëîìêà'
,'breakage/software' =>'ïîëîìêà ïðîãð'
,'breakage/hardware' =>'ïîëîìêà îáîðóä'
,'breakage/network' =>'ïîëîìêà ñåòè'
,'improper' =>'íåêîððåêòíîñòü'
,'improper/software' =>'íåâåðíà ïðîãð'
,'improper/hardware' =>'íåâåðíî îáîðóä'
,'improper/configuration'=>'íåâåðíà êîíôèã'
,'change' =>'èçìåíåíèå'
,'organization' =>'îðãàíèçàöèÿ'
,'personnel' =>'ïåðñîíàë'}
}
},''
,{-fld=>'process'
,-flg=>'euq', -hide=>sub{!$_ && ($_[2] !~/e/)}
,-lbl=>'Operation', -cmt=>'Operation, process, item of expenses'
,-lbl_ru=>'Äåÿòåëüíîñòü', -cmt_ru=>'Äåéñòâèå, ïðîöåññ, ñòàòüÿ ðàñõîäîâ'
#,-ddlb =>sub{$_[0]->cgiQueryFv('','process')}
,-ddlb =>sub{$_[0]->cgiQueryFv('','process',{-qkey=>{
(map { $_[3]->{$_} ? ($_=>['', $_[3]->{$_}]) : ($_=>'')
} qw(object application))
# ,'record'=>'solution'
}})}
,-form=>'hdesk'
,-inp=>{-maxlength=>80}
,-fnhref=>sub{
$_
# ? $_[0]->urlCmd('',-form=>'cmdbm',-key=>{'name'=>$_},-cmd=>'recRead')
? $_[0]->urlCmd('',-wikn=>$_,-wikq=>join('.', map {$_ ? $_ : ()} 'process',$_[3]->{record},$_[3]->{rectype}),-cmd=>'recRead')
: $_[2] =~/e/
# ? $_[0]->urlCmd('',-form=>'cmdbmh',-cmd=>'recList')
# ? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'process')
? $_[0]->urlCmd('',-form=>'hdeskc',-cmd=>'recList', -frmLsc=>'process'
,-key=>{(map { $_[3]->{$_} ? ($_=>['', $_[3]->{$_}]) : ($_=>'')} qw(object application))
# ,'record'=>'solution'
}
)
: ''}
,-fhprop=>'nowrap=true'
},''
,{-fld=>'cost'
,-flg=>'euq', -hide=>sub{!$_ && ($_[2] !~/e/)}
,-lbl=>'Cost', -cmt=>'Cost of the Record described by, man*hour'
,-lbl_ru=>'Çàòðàòû', -cmt_ru=>'Çàòðàòû íà âûïîëíåíèå ðàáîò, ÷åë.*÷àñ'
,-inp=>{-maxlength=>10}
}
,{-fld=>'subject'
,-flg=>'euqm', -null=>undef
,-lbl=>'Description', -cmt=>'A brief description, summary, subject or title'
,-lbl_ru=>'Îïèñàíèå', -cmt_ru=>'Êðàòêîå îïèñàíèå çàÿâêè, ñîáûòèé èëè ðàáîò; òåìà èëè çàãëàâèå çàïèñè'
,-fnhref=>sub{
# (($_[0]->{-pout}->{record} && ($_[0]->{-pout}->{record} =~/^(?:incident|error|solution|change|request|task|work)/))
# ||($_[0]->{-pout}->{recprc} && ($_[0]->{-pout}->{recprc} =~/^(?:incident|error|solution|change)/)))
1
&& $_[0]->urlCmd('',-form=>'hdesk'
,-qwhere=>
($_[0]->{-pout}->{object} ||$_[0]->{-pout}->{application} ||$_[0]->{-pout}->{location}
? "hdesk.record IN('error','solution') AND ("
.join(' OR '
, map {$_[0]->{-pout}->{$_}
? 'hdesk.' .$_ .'=' .$_[0]->dbi->quote($_[0]->{-pout}->{$_})
: ()} qw (object application location))
.")"
: "hdesk.record IN('error','solution')")
,-qorder=>'hdesk.subject asc'
)}
,-fhprop=>'nowrap=true'
,-inp=>{-asize=>89, -maxlength=>255}
,-colspan=>10
}
,{-fld=>'vsubject'
,-flg=>'-', -hidel=>1
,-expr=>"CONCAT_WS('. ', hdesk.object, hdesk.application, hdesk.location, hdesk.subject)"
#,-expr=>"CONCAT_WS('. ', hdesk.object, hdesk.application, hdesk.location, hdesk.process, hdesk.subject)"
,-lbl=>'Description', -cmt=>'Description following Object and Resource, for lists'
,-lbl_ru=>'Îïèñàíèå', -cmt_ru=>'Îáúåêò. Ðåñóðñ. Ìåñòî. Îïèñàíèå. Èñïîëüçóåòñÿ äëÿ ïðåäñòàâëåíèé'
}
,{-fld=>'vsubjectx'
,-flg=>'-', -hidel=>1
,-expr=>"CONCAT_WS('. ', hdesk.object, hdesk.application, hdesk.location, hdesk.subject)"
#,-expr=>"CONCAT_WS('. ', hdesk.object, hdesk.application, hdesk.location, hdesk.process, hdesk.subject)"
,-lbl=>'Description', -cmt=>'Description following Object and Resource, for lists'
,-lbl_ru=>'Îïèñàíèå', -cmt_ru=>'Îáúåêò. Ðåñóðñ. Ìåñòî. Îïèñàíèå. Èñïîëüçóåòñÿ äëÿ ïðåäñòàâëåíèé'
,-lsthtml=>sub{ my $v =$_[3]->{-rec}->{'comment'};
my $a;
if (($_[3]->{-rec}->{'record'}||'') !~/^(?:work|task)$/) {
$v =undef;
$a =2
}
elsif (!$v) {}
elsif ($_[0]->ishtml($v)) {
$v =undef;
$a =1
}
else {
# $a =length($v) >1024;
# $v =substr($v, 0, 1024) if $a;
my($i,$j,$k) =(0,0,0);
while (length($v) >$j +1) {
$i =index($v,"\n",$j);
$j = $i > $j +79
? $j +80
: $i <0
? $j +80
: $i +1;
if (++$k >=15) {
$a =1;
$v =substr($v,0,$j);
$v =$` if $v =~/\s+$/;
last
}
}
$v =$_[0]->htmlFVUT('hdesk',$_[3]->{-rec},$v)
}
$a =$a && $_[0]->urlCmd('',-cmd=>'recRead',-form=>'hdesk',-key=>$_[3]->{-rec}->{'id'});
$_[0]->htmlEscape($_)
.($v ? '<div style="padding-top: 0.5ex;"><span style="font-size: smaller;">' .$v .'</span>' : '')
.($a ? ' <a href="' .$a .'" style="text-decoration: none; font-weight: bold;" nowrap=true>>></a>' : '')
.($v ? '</div>' : '')
}
}
,{-fld=>'vcount'
,-flg=>'-', -hidel=>1
,-expr=>"COUNT(*)"
,-lbl=>'Number', -cmt=>'Number of records, for lists'
,-lbl_ru=>'Êîëè÷åñòâî', -cmt_ru=>'×èñëî çàïèñåé, äëÿ ïðåäñòàâëåíèé'
}
,{-fld=>'vdefinition'
,-flg=>'-', -hidel=>1
,-expr=>"IF(cmdbm.name IS NULL, '', CONCAT_WS('','<a href=\"?_cmd=recRead;_form=cmdbm;_wikn=',cmdbm.name,'\">',IF(cmdbm.definition IS NULL OR cmdbm.definition='', '???', cmdbm.definition),'</a>'))"
,-lbl=>'Definition', -cmt=>'CMDB definition, for lists'
,-lbl_ru=>'Îïðåäåëåíèå', -cmt_ru=>'Îïðåäåëåíèå èç ÊÁÄ, äëÿ ïðåäñòàâëåíèé'
,-lsthtml=>sub{$_}
}
,"\f"
,{-fld=>'comment'
,-flg=>'eu'
,-lbl=>'Notes', -cmt=>"Comment text or HTML. Special URL protocols: 'urlh://' (this host), 'urlr://' (this application), 'urlf://' (file attachments), 'key://' (record id or table//id), 'wikn://' (wikiname). Bracket URL notations: [[xxx://...]], [[xxx://...][label]], [[xxx://...|label]]"
,-lbl_ru=>'Èíôîðìàöèÿ', -cmt_ru=>"Ïîäðîáíîå îïèñàíèå çàÿâêè, ñîáûòèé èëè ðàáîò, òåêñò êîììåíòàðèÿ. Ãèïåðññûëêè ìîãóò áûòü íà÷àòû ñ 'urlh://' (êîìïüþòåð), 'urlr://' (ýòî ïðèëîæåíèå), 'urlf://' (ïðèñîåäèíåííûå ôàéëû), 'key://' (êëþ÷ çàïèñè èëè òàáëèöà//êëþ÷), 'wikn://' (èìÿ çàïèñè); ìîãóò áûòü â ñêîáî÷íîé çàïèñè [[xxx://...]], [[xxx://...][label]], [[xxx://...|label]]"
,-lblhtml=>''
,-inp=>{-htmlopt=>1,-hrefs=>1,-arows=>5,-cols=>70,-maxlength=>4*1024}
}
, $w->tfdRFD(), "\f"
, $w->tfvVersions()
, $w->tfvReferences(undef
, sub{( (($_[0]->{-pout}->{record}||'') =~/^(?:incident)/)
|| (($_[0]->{-pout}->{rectype}||'') =~/^(?:implementn|change)/)
? (-datainc=>[qw(comment)],-display=>[qw(votime vrecord status vsubjectx vauser)])
: ()
, ($_[0]->{-pout}->{rectype}||'') =~/^(?:object|component|applicatn|operation)/
? (-where=>join(' OR '
,'hdesk.idrm=' .$_[0]->strquot($_[0]->{-pout}->{id})
,'hdesk.idpr=' .$_[0]->strquot($_[0]->{-pout}->{id})
, (map{$_[0]->{-pout}->{$_}
? ("($_=" .$_[0]->strquot($_[0]->{-pout}->{$_}) ." AND record='solution' AND id!=" .$_[0]->strquot($_[0]->{-pout}->{id}) .')')
: ()
} qw(object application operation))
))
: ()
)})
]
,$w->ttoRVC()
,-dbd =>'dbi'
,-ridRef =>[qw(idrm idpr comment)]
,-dbiACLike =>'eq'
,-racPrincipal =>['puser', 'prole']
,-racActor =>['auser', 'arole']
,-racManager =>['mrole']
,-racReader =>[qw(auser arole puser prole rrole), $w->tn('-rvcUpdBy'), $w->tn('-rvcInsBy')]
,-racWriter =>[$w->tn('-rvcUpdBy'), 'auser', 'arole', 'mrole']
,-urm =>[$w->tn('-rvcUpdWhen')]
,-rvcAllState =>['new','draft','apr-do','scheduled','do','progress','rollback','delay','chk-out','edit','appr-ok','appr-no','ok','no','deleted']
,-rvcFinState =>['status'=>'ok','no','deleted']
,-rvcChgState =>[$w->tn('-rvcState')=>'draft','edit']
,-rfa =>1
,-cgiRun0A =>sub{ $_[0]->{-udisp} ='+'
# comments as group display names
}
,-recNew0C =>sub{
$_[2]->{'idrm'} =$_[3]->{'id'}
if !$_[2]->{'idrm'} && $_[3]->{'id'};
$_[2]->{'record'} ='work'
if !$_[2]->{'record'} && $_[2]->{'idrm'};
foreach my $n (qw(puser prole rrole)) {
$_[2]->{$n} =$_[3]->{$n}
if !$_[2]->{$n} && $_[3]->{$n};
}
foreach my $n (qw(severity object application location process subject comment)) {
$_[2]->{$n} =$_[3]->{$n}
if !$_[2]->{$n} && defined($_[3]->{$n}) && ($_[3]->{$n} ne '');
}
foreach my $n (qw(puser auser)) {
$_[2]->{$n} =$_[2]->{'uuser'} ||$_[0]->user
if !$_[2]->{$n};
}
$_[2]->{'mrole'} =$_[3]->{'arole'}
if !$_[2]->{'mrole'} && $_[3]->{'arole'};
$_[2]->{'etime'} =$_[3]->{'etime'}
if !$_[2]->{'etime'} && $_[3]->{'etime'}
&& $_[3]->{'etime'} gt $_[0]->strtime();
$_[0]->recLast($_[1],$_[2],['auser'],['rrole'])
if !$_[2]->{'rrole'}; # ??? 'Users'
$_[2]->{'record'} ='request'
if !$_[2]->{'record'};
$_[2]->{'severity'} ='4'
if !defined($_[2]->{'severity'});
$_[2]->{'status'} ='do'
if !$_[2]->{'status'};
}
,-recEdt0A => sub{
if ( $_[1]->{-cmd} eq 'recNew'
|| $_[2]->{'puser__L'}
|| $_[2]->{'auser__L'}) {
$_[0]->recLast($_[1],$_[2],['puser'],['prole']);
$_[0]->recLast($_[1],$_[2],['auser'],['arole']);
$_[2]->{'prole'} =undef
if $_[2]->{'prole'}
&& !grep {lc($_) eq lc($_[2]->{'prole'})
} @{$_[0]->ugroups($_[2]->{'puser'})};
$_[2]->{'arole'} =undef
if $_[2]->{'arole'}
&& !grep {lc($_) eq lc($_[2]->{'arole'})
} @{$_[0]->ugroups($_[2]->{'auser'})};
}
if ( $_[1]->{-cmd} eq 'recNew'
|| $_[2]->{'object__L'}) {
$_[2]->{object}
&& $_[0]->recLast($_[1],$_[2],['object','arole'],['application','location']);
}
# if ( $_[1]->{-cmd} eq 'recNew'
# || $_[2]->{'object__L'}
# || $_[2]->{'application__L'}) {
# ($_[2]->{object} ||$_[2]->{application})
# && $_[0]->recLast($_[1],$_[2],['object','application','arole'],['process']);
# }
}
,-recFlim0R =>sub{
return(0) if !$_[0]->{-a_cmdbh_vmrole};
$_[2] # Types of weak record
&& $_[1]->{-edit}
&& $_[2]->{-editable}
&& !$_[2]->{idrm}
&& $_[0]->recActLim(@_[1..3]
,[grep {$_ !~/^(?:task|work)$/
} @{$_[1]->{-cmdt}->{-mdefld}->{record}->{-inp}->{-values}}]
,'record');
$_[2]->{mrole} = # Manager auto assign
!ref($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}})
? $_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}
: (ref($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}) eq 'ARRAY')
&& $_[0]->{-cgi}
&& (($_[0]->{-cgi}->param('record__P') ||'') ne $_[2]->{record})
&& $_[1]->{-cmd}
&& ($_[1]->{-cmd} =~/^(?:recNew|recForm)$/)
? $_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}->[0]
: $_[2]->{mrole}
if $_[1]->{-edit}
&& $_[2]->{-editable}
&& $_[2]->{record}
&& $_[0]->{-a_cmdbh_vmrole}
&& $_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}};
$_[0]->logRec('recFlim0R',$_[1]->{-cmd}
, '-edit', $_[1]->{-edit}
, '-editable', $_[2]->{-editable} && 1
, map {($_, $_[0]->recActor(@_[1..3],$_))
} qw(-racOwner -racReader -racWriter -racActor -racManager -racPrincipal));
if (!$_[0]->uadmin() # Manager appears
&& $_[2] && $_[3]
&& $_[2]->{mrole} && !$_[3]->{mrole}
&& !(exists($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}) && !$_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}})
&& !$_[0]->recActor($_[1], $_[2],'-racManager')
) {
$_[2]->{status} =
$_[3]->{status} =~/^(?:do)/
? 'new'
: $_[3]->{status} =~/^(?:ok)/
? 'appr-ok'
: $_[3]->{status} =~/^(?:no)/
? 'appr-no'
: $_[2]->{status};
}
!$_[1]->{-edit} # States of record
|| !(!$_[2] || $_[2]->{-editable})
? 1
: $_[0]->uadmin()
? ($_[2]->{mrole}
? 1
: $_[0]->recActLim(@_[1..3]
,[qw(do progress rollback delay edit ok no deleted)]
,'status'))
: (!$_[3] ||(!$_[3]->{mrole} && $_[2]->{mrole})
? ($_[2]->{mrole} && (!exists($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}) || $_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}))
: ($_[3]->{mrole} && (!exists($_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}}) || $_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}}))
)
? $_[0]->recActLim(@_[1..3] # on+role
,[&{sub{my %hv; # filter
$_[1] eq 'incident'
? (map { /^(?:new|draft|appr-do|scheduled|do)$/
? ($hv{do} ? () : (do{$hv{do}=1; 'do'}))
: ($_)
} @_[2..$#_])
: @_[2..$#_]}}($_[0], $_[2]->{record}||'',
# !role in db
!$_[3]
|| ($_[3] && !$_[3]->{mrole})
? ( $_[0]->recActor($_[1]
, !$_[3] ||!$_[3]->{mrole} ? $_[2] : $_[3]
, '-racManager')
? qw(new draft appr-do scheduled do progress rollback delay edit appr-ok appr-no ok no)
: $_[0]->recActor(@_[1..3],'-racActor')
? qw(new appr-do progress rollback delay edit appr-ok appr-no)
: qw(new))
# manager & actor in db
: $_[0]->recActor(@_[1..3],'-racManager')
&& $_[0]->recActor(@_[1..3],'-racActor')
? ( $_[3]->{status} =~/^(?:new|draft|appr-do)$/
? qw(new draft appr-do scheduled do progress rollback delay edit appr-ok appr-no ok no deleted)
: $_[3]->{status} =~/^(?:scheduled|do)$/
? qw(scheduled do progress rollback delay edit appr-ok appr-no ok no deleted)
: $_[3]->{status} =~/^(?:progress|rollback|delay|edit|appr-ok|appr-no)$/
? qw(progress rollback delay edit appr-ok appr-no ok no deleted)
: $_[3]->{status}
)
: $_[3]->{status} =~/^(?:new|draft|appr-do)$/
? ($_[0]->recActor(@_[1..3],'-racManager')
? qw(new draft appr-do scheduled do progress rollback delay edit appr-ok appr-no ok no deleted)
: $_[3]->{status} =~/^(?:draft)/
? qw(draft appr-do appr-no)
: $_[3]->{status})
: $_[3]->{status} =~/^(?:scheduled|do)$/
? ($_[0]->recActor(@_[1..3],'-racManager')
? qw(scheduled do progress rollback delay edit appr-ok appr-no ok no)
: qw(progress rollback delay edit appr-ok appr-no))
: $_[3]->{status} =~/^(?:progress|rollback|delay|edit|appr-ok|appr-no)$/
? (!$_[0]->recActor(@_[1..3],'-racManager')
? qw(progress rollback delay edit appr-ok appr-no)
: $_[3]->{status} =~/^(?:appr-no)$/
? qw(draft scheduled do progress rollback delay edit appr-no no)
: qw(progress rollback delay edit appr-ok appr-no ok no))
: $_[3]->{status}
)]
,'status')
: $_[0]->recActLim(@_[1..3]
,[qw(do progress rollback delay edit ok no deleted)]
,'status');
!$_[3] # Access to record
? 1
: $_[0]->uadmin()
? 1
: $_[3]->{mrole} && !(exists($_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}}) && !$_[0]->{-a_cmdbh_vmrole}->{$_[3]->{record}})
? ( $_[0]->recActor(@_[1..3],'-racOwner')
&& ($_[3]->{status} =~/^(?:new|draft|appr-do|scheduled|do)$/)
? 1
: $_[0]->recActor(@_[1..3],'-racManager')
&& $_[0]->recActor(@_[1..3],'-racActor')
? $_[0]->recActLim(@_[1..3],'v', qw(-recDel))
: $_[0]->recActor(@_[1..3],'-racManager')
? ( $_[3]->{status} =~/^(?:new|draft|appr-do|scheduled|do)$/
? $_[0]->recActLim(@_[1..3],'v', qw(-recDel))
: $_[3]->{status} =~/^(?:progress|rollback|delay|edit|appr-ok|appr-no|ok|no)$/
? ($_[0]->recActLim(@_[1..3],'v', qw(-recDel))
&& $_[0]->recActLim(@_[1..3],'v!', qw(auser mailto status etime cost comment)))
: $_[0]->recActLim(@_[1..3],'-recRead')
)
: $_[3]->{status} =~/^(?:scheduled|do|progress|rollback|delay|edit|appr-ok|appr-no)$/
? $_[0]->recActLim(@_[1..3],'v', qw(-recDel))
&& $_[0]->recActLim(@_[1..3],'v!', qw(auser mailto status cost comment))
: $_[0]->recActLim(@_[1..3],'-recRead')
)
: $_[0]->recActor(@_[1..3],'-racOwner')
? 1
: !$_[3]->{idrm}
? $_[0]->recActLim(@_[1..3],'v', qw(-recDel))
: $_[3]->{record} eq 'work'
? $_[0]->recActLim(@_[1..3],'v',qw(-recDel idrm arole record))
: $_[3]->{record} eq 'task'
? $_[0]->recActLim(@_[1..3],'v', qw(-recDel))
&& $_[0]->recActLim(@_[1..3],'v!', qw(auser mailto status cost comment))
: $_[0]->recActLim(@_[1..3],'v', qw(-recDel));
}
,-recEdt0R => sub{
delete $_[2]->{rectype}
if $_[2]->{rectype} && $_[2]->{record}
&& !(grep {$_ eq $_[2]->{rectype}
} @{$_[0]->{-a_cmdbh_rectype}->{$_[2]->{record}}||[]});
$_[2]->{stime} =$_[2]->{ctime} || $_[0]->strtime()
if !$_[2]->{stime};
$_[2]->{etime} =do {
my $tl =$_[0]->lngslot($_[0]->{-table}->{hdesk}->{-mdefld}->{severity}->{-inp},'-labels');
if ($tl && ($tl->{$_[2]->{severity}} =~/\(([\d:]+)/)) {
$tl =$1;
my $t0 =$_[0]->timestr($_[2]->{stime}) ||time();
my @t0 =localtime($t0);
my $t1 =$t0 +($tl =~/:(\d+)/ ? $1 * 60 : $tl *60*60);
if (($tl =/^\d+$/) && ($tl >8)
&& !(!$t0[6] ||($t0[6] ==6))) {
my @t1 =localtime($t1);
$t1 +=24*60*60 if !$t1[6];
$t1 +=48*60*60 if $t1[6] ==6;
}
$_[0]->strtime($t1);
}
else {
$_[2]->{etime}
}}
if !$_[2]->{etime}
&& $_[2]->{record}
&& ($_[2]->{record} eq 'incident')
&& defined($_[2]->{severity})
&& ($_[2]->{severity} ne '4')
&& ($_[2]->{$_[0]->tn('-rvcState')}
=~/^(?:do|delay|progress|rollback)$/);
$_[2]->{etime} =$_[2]->{utime}
if !$_[2]->{etime}
|| ($_[3] && $_[3]->{utime} && ($_[2]->{etime} eq $_[3]->{utime}));
$_[2]->{stime} =(length($3) <3 ? "20$3" : $3) .'-' .$2 .'-' .$1 .$4
if $_[2]->{stime}
&& $_[2]->{stime} =~/^(\d+)\.(\d+)\.(\d+)(.*)/;
$_[2]->{etime} =(length($3) <3 ? "20$3" : $3) .'-' .$2 .'-' .$1 .$4
if $_[2]->{etime}
&& $_[2]->{etime} =~/^(\d+)\.(\d+)\.(\d+)(.*)/;
($_[2]->{etime}, $_[2]->{stime})
= ($_[2]->{stime}, $_[2]->{etime})
if $_[2]->{etime}
&& $_[2]->{stime}
&& ($_[2]->{stime} gt $_[2]->{etime});
$_[2]->{etime} = $_[2]->{utime}
if $_[2]->{etime}
&& $_[2]->{utime}
&& ($_[2]->{$_[0]->tn('-rvcState')} =~/^(?:ok|no)$/)
&& ($_[2]->{utime} lt $_[2]->{etime});
$_[2]->{mailto} =$_[0]->umail($_[2]->{mailto})
if $_[2]->{mailto};
if ($_[2]->{'process'}
&& !$_[0]->uadmin()
&& !$_[0]->recLast($_[1],$_[2],['process'])) {
$_[0]->die('Not configured process')
}
}
,-recChg0R =>sub {
$_[2]->{mrole} =$_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}}
if $_[2]->{record}
&& $_[0]->{-a_cmdbh_vmrole}
&& exists($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}})
&& !ref($_[0]->{-a_cmdbh_vmrole}->{$_[2]->{record}});
if ($_[2] && $_[2]->{idrm}) {
my $r =$_[0]->recSel(-table=>$_[1]->{-table},-key=>{'id'=>$_[2]->{idrm}});
$r =$r->fetchrow_hashref();
if (!$r) {
$_[0]->warn("-recChg0R: recSel: parent not found\n")
}
else {
$_[2]->{recprc} =$r->{record} =~/^(?:work|task)$/
? $r->{recprc} ||$r->{record}
: $r->{record};
$_[0]->logRec('-recChg0R'
,map {($_ => $_[2]->{$_})
} qw (recprc))
}
}
else {
$_[2]->{recprc} =undef;
}
$_[0]->recUtr({-table=>$_[1]->{-table},-version=>1}
,{recprc =>$_[2]->{record} =~/^(?:work|task)$/
? $_[2]->{recprc} ||$_[2]->{record}
: $_[2]->{record}}
,{idrm =>$_[3]->{id}})
if $_[3] && ($_[3]->{record} ne $_[2]->{record});
}
,-recChg0W =>sub {
$_[0]->smtpSend(-to=>$_[2]->{mailto}
,-pout=>$_[2], -pcmd=>$_[1])
if $_[2]->{mailto}
&& ($_[2]->{$_[0]->tn('-rvcState')}
=~/^(?:new|draft|appr-do|scheduled|do|delay|progress|rollback|ok-appr|no-appr|ok|no|deleted)$/);
}
,-query =>{ -display=>[qw(votime vrecord status vsubject vauser)]
#-display=>[qw(votime status vrecord vsubject vauser)]
,-order=>'votime'
,-keyord=>'-dall'
,-frmLso=>['actors','Nowdays']
}
,-limit =>256
,-frmLsoAdd =>[{-lbl=>'Nowdays'
,-cmt=>'Current records and next 7 days'
,-lbl_ru=>'Òåïåðü'
,-cmt_ru=>'Òåêóùèå çàïèñè è ñëåäóþùèå 7 äíåé'
,-cmd=>{-qwhere=>"(TO_DAYS(hdesk.stime) <=TO_DAYS(NOW()) +6) OR hdesk.status NOT IN('scheduled','do')"}
}
,['hierarchy',undef,{-qkeyadd=>{'idrm'=>undef}}]
]
,-frmLsc =>
[{-val=>'votime',-cmd=>{}}
,{-val=>'votimeje',-lbl=>'Exec/under'
,-lbl_ru=>'Âûï-å/ïîä', -cmd=>
sub {
$_[0]->{-pcmd}->{-qhref}=$_[0]->{-pcmd}->{-qhref}||$_[2]->{-qhref}||{};
$_[0]->{-pcmd}->{-qhref}->{-urm} =['votimej'];
$_[3]->{-order} ='votime';
$_[3]->{-group} ='votime, hdesk.id';
$_[3]->{-join} =' LEFT OUTER JOIN cgibus.hdesk AS j ON (j.idrm=hdesk.id)';
$_[3]->{-datainc}=[qw(votimej)]}}
,{-val=>'votimej',-lbl=>'Upd/under'
,-lbl_ru=>'Èçì-å/ïîä', -cmd=>
sub {
$_[0]->{-pcmd}->{-qhref}=$_[0]->{-pcmd}->{-qhref}||$_[2]->{-qhref}||{};
$_[0]->{-pcmd}->{-qhref}->{-urm} =['votimej'];
$_[3]->{-order} ='votimej';
$_[3]->{-group} ='votime, hdesk.id';
$_[3]->{-join} =' LEFT OUTER JOIN cgibus.hdesk AS j ON (j.idrm=hdesk.id)';
$_[3]->{-display}->[0] ='votimej'}}
,{-val=>'vftime'}
,{-val=>'stime'}
,{-val=>'utime'}
,{-val=>'ctime'}
,{-val=>'object', -cmd=>{-display=>[qw(object vrecord status vsubject vauser)],-order=>'object asc, utime desc'}}
,{-val=>'application', -cmd=>{-display=>[qw(application vrecord status vsubject vauser)],-order=>'application asc, utime desc'}}
]
,-frmLso1C =>\&a_hdesk_stbar
}
});
$w->set(
-form=>{
'default' =>{-subst=>'start'}
,$w->tvdIndex()
,$w->tvdFTQuery()
,'start'=>{
-lbl =>'Start Page'
,-cmt =>'Service Desk and Configuretion Management Database'
,-lbl_ru =>'Ñòàðòîâàÿ ñòðàíèöà'
,-cmt_ru =>'Öåíòð îáñëóæèâàíèÿ è Êîíôèãóðàöèîííàÿ áàçà äàííûõ'
,-cgcCall =>'cmdb-start.psp'
}
### cmdbm views
,'cmdbmn' =>{
-lbl =>'CMDB - Names'
,-cmt =>'CMDB - Named elements'
,-lbl_ru =>'ÊÁÄ - Èìåíà'
,-cmt_ru =>'ÊÁÄ - Èìåíîâàííûå ýëåìåíòû'
,-table =>'cmdbm'
,-recQBF =>'cmdbm'
,-query =>{-display =>['name','record', 'status', 'utime', 'definition']
,-where =>"name IS NOT NULL AND name !=''"
,-order =>'name'
,-keyord =>'-aall'
}
,-limit =>1024
,-qhref =>{-key=>['name','status','record','utime'], -form=>'cmdbm', -cmd=>'recRead'}
,-frmLsc =>
[{-val=>'alphabetically',-cmd=>{}}
,['utime',undef, {-order=>'utime',-keyord=>'-dall'}]
,['ctime',undef, {-order=>'ctime',-keyord=>'-dall'}]
]
}
,'cmdbmh' =>{
-lbl =>'CMDB - Hierarchy'
,-cmt =>'CMDB - Hierarchy of records'
,-lbl_ru =>'ÊÁÄ - Èåðàðõèÿ'
,-cmt_ru =>'ÊÁÄ - Èåðàðõèÿ çàïèñåé'
,-table =>'cmdbm'
,-recQBF =>'cmdbm'
,-query =>{-display =>['name','record', 'status', 'utime', 'definition']
,-where =>"(name IS NOT NULL AND name !='')"
." AND (system IS NULL OR system='')"
,-order =>'name'
,-keyord =>'-aall'
}
,-limit =>1024
,-qhref =>{-key=>['name'], -form=>'cmdbm', -cmd=>'recRead'}
,-frmLsc =>
[{-val=>'alphabetically',-cmd=>{}}
,['utime',undef, {-order=>'utime',-keyord=>'-dall'}]
,['ctime',undef, {-order=>'ctime',-keyord=>'-dall'}]
]
}
,'cmdbmv' =>{
-lbl =>'CMDB - Records'
,-cmt =>'CMDB - Records of all elements and associations'
,-lbl_ru =>'ÊÁÄ - Çàïèñè'
,-cmt_ru =>'ÊÁÄ - Çàïèñè âñåõ ýëåìåíòîâ è àññîöèàöèé'
,-hide =>1
,-table =>'cmdbm'
,-recQBF =>'cmdbm'
,-query =>{-display =>['record','status','vsubject']
,-datainc =>[qw(vorder vsubject)]
,-order =>'vorder,vsubject'
,-keyord =>'-aall'
}
,-limit =>1024*4
,-qhref =>{-key=>['id'], -form=>'cmdbm', -cmd=>'recRead'}
,-frmLsc =>
[{-val=>'alphabetically',-cmd=>{}}
,['vorder',undef,{-order=>['vorder','vsubject'],-keyord=>'-aall'}]
,['utime',undef, {-order=>'utime',-keyord=>'-dall'}]
,['ctime',undef, {-order=>'ctime',-keyord=>'-dall'}]
]
}
,'cmdbmva' =>{
-lbl =>'CMDB - Association'
,-cmt =>'CMDB - Association records'
,-lbl_ru =>'ÊÁÄ - Àññîöèàöèè'
,-cmt_ru =>'ÊÁÄ - Çàïèñè àññîöèàöèé'
,-hide =>1
,-table =>'cmdbm'
,-recQBF =>'cmdbm'
,-query =>{-display =>['record','status','service','action','computer','interface','role','user','definition']
,-datainc =>[qw(vorder vsubject)]
,-order =>'vorder,vsubject'
,-keyord =>'-aall'
,-where =>"record IN('usage')"
}
,-limit =>1024*4
#,-qhref =>{-key=>['id'], -form=>'cmdbm', -cmd=>'recRead'}
,-frmLsc =>undef
}
,'hdesko'=>{
-lbl =>'Service Desk Objects'
,-lbl_ru =>'ÖÎ - Îáúåêòû'
,-table =>'hdesk'
,-recQBF =>'hdesk'
,-query =>{-qkey =>{'record' => 'solution', 'rectype' => 'object'}
,-frmLsc =>'object'
}
}
,'hdeskc' =>{
-lbl =>'Service Classifications'
,-cmt =>'Classifications of Service Desk records'
,-lbl_ru =>'ÖÎ - Êëàññèôèêàöèè'
,-cmt_ru =>'Êëàññèôèêàöèè çàïèñåé Öåíòðà îáñëóæèâàíèÿ çàïðîñîâ è èíöèäåíòîâ'
,-table =>'hdesk'
,-recQBF =>'hdesk'
,-query =>{-data =>['vrecord','vcount']
,-display =>['vrecord','vcount']
,-order =>'vrecord'
,-group =>'vrecord'
,-keyord =>'-aall'
}
,-limit =>1024*4
#,-qhref =>{-key=>['vrecord'], -form=>'hdesk', -cmd=>'recList'}
,-qhref =>sub{
$_[0]->urlCmd('',-cmd=>'recList',-form=>'hdesk'
,-key=>$_[0]->strdatah($_[0]->{-pcmd}->{-qkey} ? %{$_[0]->{-pcmd}->{-qkey}} : ()
, $_[0]->{-pout}->{NAME}->[0] => $_[1]->[0])
,(map { $_[0]->{-pcmd}->{$_} ? ($_ => $_[0]->{-pcmd}->{$_}) : ()
} qw(-urole -uname -qwhere -frmLso))
)}
,-frmLsc =>
[{-val=>'vrecord',-cmd=>{}}
,{-val=>'vrd-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè', -cmd=>{-order=>'utime',-keyord=>'-dall'}}
,{-val=>'severity',-cmd=>{-data=>['severity','vcount'],-display=>['severity','vcount'],-group=>'severity',-order=>'severity',-keyord=>'-aall'}}
,{-val=>'svr-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['severity','vcount'],-display=>['severity','vcount'],-group=>'severity',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'status',-cmd=>{-data=>['status','vcount'],-display=>['status','vcount'],-group=>'status',-order=>'status',-keyord=>'-aall'}}
,{-val=>'stt-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['status','vcount'],-display=>['status','vcount'],-group=>'status',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'object',-cmd=>{-data=>['object','vcount'],-display=>['object','vcount'],-group=>'object',-order=>'object',-keyord=>'-aall'}}
,{-val=>'obj-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['object','vcount'],-display=>['object','vcount'],-group=>'object',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'obj-c',-lbl=>'..obj&CMDB',-lbl_ru=>'..îáúåêò&ÊÁÄ'
,-cmd=>{-data=>['object','vcount','vdefinition'],-display=>['object','vcount','vdefinition']
,-join=>'LEFT OUTER JOIN cgibus.cmdbm AS cmdbm ON (cmdbm.name=hdesk.object)'
,-where=>'hdesk.object IS NOT NULL'
,-group=>'object',-order=>'object',-keyord=>'-aall'}}
,{-val=>'application',-cmd=>{-data=>['application','vcount'],-display=>['application','vcount'],-group=>'application',-order=>'application',-keyord=>'-aall'}}
,{-val=>'app-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['application','vcount'],-display=>['application','vcount'],-group=>'application',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'app-c',-lbl=>'..app&CMDB',-lbl_ru=>'..ðåñóðñ&ÊÁÄ'
,-cmd=>{-data=>['application','vcount','vdefinition'],-display=>['application','vcount','vdefinition']
,-join=>'LEFT OUTER JOIN cgibus.cmdbm AS cmdbm ON (cmdbm.name=hdesk.application)'
,-where=>'hdesk.application IS NOT NULL'
,-group=>'application',-order=>'application',-keyord=>'-aall'}}
,{-val=>'location',-cmd=>{-data=>['location','vcount'],-display=>['location','vcount'],-group=>'location',-order=>'location',-keyord=>'-aall'}}
,{-val=>'loc-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['location','vcount'],-display=>['location','vcount'],-group=>'location',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'loc-c',-lbl=>'..loc&CMDB',-lbl_ru=>'..ìåñòî&ÊÁÄ'
,-cmd=>{-data=>['location','vcount','vdefinition'],-display=>['location','vcount','vdefinition']
,-join=>'LEFT OUTER JOIN cgibus.cmdbm AS cmdbm ON (cmdbm.name=hdesk.location)'
,-where=>'hdesk.location IS NOT NULL'
,-group=>'location',-order=>'location',-keyord=>'-aall'}}
,{-val=>'cause',-cmd=>{-data=>['cause','vcount'],-display=>['cause','vcount'],-group=>'cause',-order=>'cause',-keyord=>'-aall'}}
,{-val=>'cas-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['cause','vcount'],-display=>['cause','vcount'],-group=>'cause',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'process',-cmd=>{-data=>['process','vcount'],-display=>['process','vcount'],-group=>'process',-order=>'process',-keyord=>'-aall'}}
,{-val=>'prc-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['process','vcount'],-display=>['process','vcount'],-group=>'process',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'puser',-cmd=>{-data=>['puser','vcount'],-display=>['puser','vcount'],-group=>'puser',-order=>'puser',-keyord=>'-aall'}}
,{-val=>'pus-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['puser','vcount'],-display=>['puser','vcount'],-group=>'puser',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'prole',-cmd=>{-data=>['prole','vcount'],-display=>['prole','vcount'],-group=>'prole',-order=>'prole',-keyord=>'-aall'}}
,{-val=>'prl-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['prole','vcount'],-display=>['prole','vcount'],-group=>'prole',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'auser',-cmd=>{-data=>['auser','vcount'],-display=>['auser','vcount'],-group=>'auser',-order=>'auser',-keyord=>'-aall'}}
,{-val=>'aus-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['auser','vcount'],-display=>['auser','vcount'],-group=>'auser',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'arole',-cmd=>{-data=>['arole','vcount'],-display=>['arole','vcount'],-group=>'arole',-order=>'arole',-keyord=>'-aall'}}
,{-val=>'arl-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['arole','vcount'],-display=>['arole','vcount'],-group=>'arole',-order=>'utime',-keyord=>'-dall'}}
,{-val=>'mrole',-cmd=>{-data=>['mrole','vcount'],-display=>['mrole','vcount'],-group=>'mrole',-order=>'mrole',-keyord=>'-aall'}}
,{-val=>'mrl-u',-lbl=>'..news',-lbl_ru=>'..íîâîñòè',-cmd=>{-data=>['mrole','vcount'],-display=>['mrole','vcount'],-group=>'mrole',-order=>'utime',-keyord=>'-dall'}}
]
}
,'hdeskg'=>{
-lbl =>'Service Graph'
,-cmt =>'Service Desk State Matrix'
,-lbl_ru =>'ÖÎ - Ãðàô'
,-cmt_ru =>'Ñåðâèñíûé ãðàô ïî çàïèñÿì Öåíòðà îáñëóæèâàíèÿ çàïðîñîâ è èíöèäåíòîâ'
,-cgcCall =>'cmdb-svcgrph.pl'
}
});
#$w->set(-index=>1);
#$w->set(-setup=>1);
$w->logRec('cgiRun') if $w->{-debug};
$w->cgiRun();
##############################
sub a_hdesk_stbar {
my ($s,$on,$om,$c,$mc) =@_;
my $ah = $s->{-table}->{'hdesk'}->{-mdefld}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'arole'}->{-inp}
&&$s->lngslot($s->{-table}->{'hdesk'}->{-mdefld}->{'arole'}->{-inp},'-labels');
# $ah =undef;
$ah ={map {(lc($_) => $ah->{$_})} keys %$ah} if $ah;
my $ac =$s->{-a_cmdbh_fsvrclr};
my $acn=$s->{-table}->{'hdesk'}->{-mdefld}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'severity'}->{-inp}
&&$s->lngslot($s->{-table}->{'hdesk'}->{-mdefld}->{'severity'}->{-inp},'-labels');
my $acr=$s->{-table}->{'hdesk'}->{-mdefld}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'record'}->{-inp}
&&$s->lngslot($s->{-table}->{'hdesk'}->{-mdefld}->{'record'}->{-inp},'-labels');
my $act=$s->{-table}->{'hdesk'}->{-mdefld}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'rectype'}->{-inp}
&&$s->lngslot($s->{-table}->{'hdesk'}->{-mdefld}->{'rectype'}->{-inp},'-labels');
my $alr=$s->{-table}->{'hdesk'}->{-mdefld}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'record'}->{-inp}
&&$s->{-table}->{'hdesk'}->{-mdefld}->{'record'}->{-inp}->{-values};
$alr=[map { !$_ ||!$acr->{$_} ||(/^(?:work|task|analysis)$/)
? ()
: ($_) } @$alr] if $alr;
my $aqa=$s->{-table}->{'hdesk'}
&& $s->{-table}->{'hdesk'}->{-frmLsoAdd};
my $avs={}; # severities
my $avr={}; # rectypes
my $avt={}; # subtypes
my $avg={}; # groups
my $avp={}; # person current
my $avc={}; # group current
my $avu={}; # group current users
my $avx=''; # exclusion due to query
local $s->{-rac} =undef;
my $qu =1 && ($ENV{MOD_PERL} || (($ENV{GATEWAY_INTERFACE}||'') =~/PerlEx/))
&& do{ my $v = $s->dbi->selectrow_arrayref("SELECT max(utime) FROM cgibus.hdesk");
# $s->dbiSel({-table=>'hdesk',-data=>[['max(utime)','mutime']]});
# $v =$v->fetch();
# $s->logRec('a_hdesk_stbar','max(utime)',$v->[0]);
$v->[0];
};
my $qc =$DBIx::Web::CACHE->{a_hdesk_stbar};
$qc =$DBIx::Web::CACHE->{a_hdesk_stbar} ={} if !$qc && $qu;
my $qh =!$qu || !$qc->{-u} || ($qc->{-u} lt $qu)
? $s->recSel(-table=>'hdesk'
,-data=>[qw(arole auser prole puser mrole severity utime status record rectype)]
,-where=>"status IN('new','draft','appr-do','scheduled','do','progress','rollback','delay','edit','appr-ok','appr-no') OR (TO_DAYS(etime)=TO_DAYS(CURRENT_DATE()))"
)
: undef;
if ($qu && $qh) {
$qc->{-u} =$qu;
$qc->{-q} =$qh->fetchall_arrayref({});
$qh =undef;
$s->logRec('a_hdesk_stbar','cache', $#{$qc->{-q}});
}
$qu =0;
my $qpk =!$c ||!ref($c->{-qkey})
? undef
: $c->{-qkey}->{record} || $c->{-qkey}->{rectype}
? {-qkey => {map {
$c->{-qkey}->{$_} ? ($_ => $c->{-qkey}->{$_}) : ()
} qw(record rectype)}}
: undef;
my %xpar =(-xpar=>['-qurole', '-quname', '-frmLso']
,-xkey=>[qw(record rectype severity auser)]
,ref($c->{-qkey}) && $c->{-qkey}->{record} && ($c->{-qkey}->{record} eq 'solution')
&& $c->{-form} && ($c->{-form} =~/^(:?hdesk|hdesko)$/)
? (-ovw=>sub{
if ($_[4]->{-qkey} && $_[4]->{-qkey}->{rectype}
&& ($_[4]->{-qkey}->{rectype} =~/(:?object|component|applicatn|contact|location|operation)/)) {
$_[4]->{-frmLsc} =
$_[4]->{-qkey}->{rectype} eq 'component'
? 'object'
: $_[4]->{-qkey}->{rectype} eq 'applicatn'
? 'application'
: $_[4]->{-qkey}->{rectype} eq 'contact'
? 'subject'
: $_[4]->{-qkey}->{rectype} eq 'operation'
? 'process'
: $_[4]->{-qkey}->{rectype};
$_[4]->{-qkeyord}='aall';
}
else {
delete $_[4]->{-frmLsc};
delete $_[4]->{-qkeyord};
}})
: ()
);
my $vinit =sub{ # val init (record, key, store) -> store elem
return($_[1]) if !defined($_[1]);
return($_[2]->{$_[1]}) if $_[2]->{$_[1]};
my $v =$_[2]->{$_[1]} ={%{$_[0]}};
foreach my $k (keys %$v) {$v->{$k} ='' if !defined($v->{$k})};
$v->{severity} ='' if !defined($v->{severity}) ||($v->{severity} eq '');
$v->{count} =0;
$v
};
my $vset =sub { # val set (record, key, store) -> store elem
return($_[1]) if !defined($_[1]);
my $q =$_[0];
my $v =$_[2]->{$_[1]};
$v->{severity} =$q->{severity}
if defined($q->{severity})
&& ($q->{severity} ne '')
&& (!defined($v->{severity}) || ($v->{severity} eq '')
|| ($v->{severity} >$q->{severity}));
$v->{utime} =$q->{utime}
if defined($q->{utime}) && ($q->{utime} ne '')
&& ($v->{utime} lt $q->{utime});
$v->{count}++
if !$q->{status} || ($q->{status} =~/^(?:do|progress|rollback|delay|edit)$/);
};
if (ref($c->{-qkey}) && 1) {
foreach my $f (qw(auser arole mrole puser prole cuser uuser)) {
next if !$c->{-qkey}->{$f};
my $r = $f eq 'auser' ? 'actor'
: $f eq 'arole' ? 'actors'
: $f eq 'mrole' ? 'manager'
: $f eq 'puser' ? 'principal'
: $f eq 'prole' ? 'principals'
: $f =~/^(?:cuser|uuser)/ ? 'author'
: '';
next if !$r
|| ($c->{-qurole} && ($c->{-qurole} ne $r));
$c->{-quname} =$c->{-qkey}->{$f};
$c->{-qurole} =$r;
$avx .='$avg';
last;
}
}
while (my $qv =$qh
? $qh->fetch() && $qh->{-rec} # $qh->fetchrow_hashref()
: $qc->{-q}->[$qu++]
) {
$qv->{severity} =3.5
if (!defined($qv->{severity}) ||($qv->{severity} eq '4') ||($qv->{severity} eq ''))
&& ($qv->{record} && ($qv->{record} eq 'unavlbl'));
if (defined($qv->{severity}) && $ac->{$qv->{severity}}
&& (!defined($qv->{record}) || ($qv->{record}!~/^(?:work|task|analysis)$/))) {
&$vinit($qv, $qv->{severity}, $avs);
&$vset($qv, $qv->{severity}, $avs);
}
if ($qv->{record} && ($qv->{record} !~/^(?:work|task|analysis)$/)) {
&$vinit($qv, $qv->{record}, $avr);
&$vset($qv, $qv->{record}, $avr);
}
if ($qpk && $qpk->{-qkey}->{record}
&& ($qpk->{-qkey}->{record} ne ($qv->{record}||''))) {
next
}
if ($avt && $qpk && $qpk->{-qkey}->{record}) {
&$vinit($qv, $qv->{rectype}, $avt);
&$vset($qv, $qv->{rectype}, $avt);
}
if ($avt && $qpk && $qpk->{-qkey}->{rectype}
&& ($qpk->{-qkey}->{rectype} ne ($qv->{rectype}||''))) {
next
}
if (1) {
my $qn =lc($qv->{arole}||'');
# $qn ='' if !$ah->{$qn};
&$vinit($qv, $qn, $avg);
&$vset($qv, $qn, $avg)
}
if (grep {$qv->{$_} && (lc($qv->{$_}) eq lc($s->user))
} qw (auser puser)) {
&$vinit($qv, 'auser', $avp);
&$vset($qv, 'auser', $avp);
}
if (grep {$qv->{$_} && (lc($qv->{$_}) eq lc($s->user))
} qw (auser puser cuser uuser)) {
&$vinit($qv, 'auser+', $avp);
&$vset($qv, 'auser+', $avp);
}
if ($qv->{arole} && $s->{-pcmd}->{-quname}
&& (lc($s->{-pcmd}->{-quname}) eq lc($qv->{arole})) ) {
$avc->{act} =$avg->{lc($s->{-pcmd}->{-quname})};
if ($qv->{auser}) {
&$vinit($qv, lc($qv->{auser}), $avu);
&$vset($qv, lc($qv->{auser}), $avu);
}
if ($qv->{arole} ne ($qv->{prole}||'')) {
&$vinit($qv, 'svc', $avc);
&$vset($qv, 'svc', $avc);
}
elsif ($qv->{arole} eq $qv->{prole}) {
&$vinit($qv, 'self', $avc);
&$vset($qv, 'self', $avc);
}
}
elsif ($qv->{prole} && $s->{-pcmd}->{-quname}
&& (lc($s->{-pcmd}->{-quname}) eq lc($qv->{prole})) ) {
&$vinit($qv, 'req', $avc);
&$vset($qv, 'req', $avc);
$avc->{req}->{arole} =$s->{-pcmd}->{-quname};
}
if ($qv->{mrole} && $s->{-pcmd}->{-quname}
&& (lc($s->{-pcmd}->{-quname}) eq lc($qv->{mrole})) ) {
&$vinit($qv, 'mgr', $avc);
&$vset($qv, 'mgr', $avc);
$avc->{mgr}->{arole} =$s->{-pcmd}->{-quname};
}
}
if (0 && scalar(%$avs)) {
foreach my $k (keys %$acn) {
next if $avs->{$k} ||($k eq '');
&$vinit({}, $k, $avs);
}
}
if (ref($avr)) {
foreach my $k (@$alr) {
next if $avr->{$k};
&$vinit({}, $k, $avr);
$avr->{$k}->{severity} ='';
}
}
if ($avt && $qpk && $qpk->{-qkey}->{record}
&& $s->{-a_cmdbh_rectype}->{$qpk->{-qkey}->{record}}) {
foreach my $k (@{$s->{-a_cmdbh_rectype}->{$qpk->{-qkey}->{record}}}) {
next if $avt->{$k};
&$vinit({}, $k, $avt);
$avt->{$k}->{severity} ='';
}
}
if ($ah) {
foreach my $k (keys %$ah) {
next if $avg->{lc($k)};
&$vinit({}, lc($k), $avg);
$avg->{$k}->{arole} =$k;
}
}
if (!$s->uguest) {
foreach my $k (qw(auser auser+)) {
next if $avp->{$k};
&$vinit({}, $k, $avp);
}
}
if ($s->{-pcmd}->{-quname}){
$avc->{act} =$avg->{lc($s->{-pcmd}->{-quname})}
if $avg->{lc($s->{-pcmd}->{-quname})};
foreach my $k (qw(self svc req mgr act)) {
&$vinit({}, $k, $avc) if !$avc->{$k};
$avc->{$k}->{arole} =$s->{-pcmd}->{-quname};
}
}
if ($s->{-pcmd}->{-quname}) {
foreach my $n (@{$s->uglist('-u',$s->{-pcmd}->{-quname})}) {
my $k =lc($n);
if (!$avu->{$k}) {
&$vinit({}, $k, $avu);
$avu->{$k}->{severity} ='';
}
$avu->{$k}->{auser} =$n;
$avu->{$k}->{arole} =$s->{-pcmd}->{-quname};
}
}
#<div style="margin-bottom: 1ex; margin-top: 1ex;">
#<span style="border: 1px solid">
#<fieldset style="padding: 2"><legend>Group box</legend># </fieldset>
'<div nowrap="true" style="margin-bottom: 0.4ex; margin-top: 0.5ex;">'
.(!%$avs
? ''
:(join(' ',
map { my $k =$_;
# $s->logRec('***',$k,$avs->{$k});
my $vl =$avs->{$k}->{count}||0;
my $vt =($acn->{$k} ||$k);
$s->htmlMQH(-html=>' ' .$vl .' '
,-title=>"$vl, $vt"
,%xpar
,-frmLso=>'-add'
,$k eq '3.5'
? (-qkey=>{'record'=>'unavlbl'})
: (-qkey=>{'severity'=>$k}
,-qwhere=>"[[hdesk.record NOT IN('work','task')]]")
,-urm=>$avs->{$k}->{utime} ||''
,-style=>'background-color: ' .$ac->{$k}||$ac->{''})
} sort { $b <=> $a
} keys %$avs)
))
.(!$aqa
? ''
:(' '
.do{ my $vt =$s->lngslot($aqa->[0],'-lbl');
my $ymch =$s->{-pcmd}->{-htmlMQH};
my %ypar =$ymch
? ()
: (map {$c->{$_} ? ($_=>$c->{$_}) : ()
} qw(-qurole -quname -qkey));
$s->htmlMQH(-html=>' ' .$vt .' '
,-title=>$s->lngslot($aqa->[0],'-cmt') ||$aqa->[0]->{-cmd}->{-qwhere}
,-style=>'background-color: buttonface'
,%ypar
,-qwhere=>(!$ymch && $c->{-qwhere} && ($c->{-qwhere} =~/^(\[\[.+?\]\])/) ? $1 : '')
.$aqa->[0]->{-cmd}->{-qwhere}
)
.' '
.$s->htmlMQH(-html=>' X '
,-title=>$s->lng(1,'ddlbreset')
,-style=>'background-color: buttonface; border-width: 0px;'
,%ypar
,!$ymch && $c->{-qwhere} && ($c->{-qwhere} =~/^(\[\[.+?\]\])/) ? (-qwhere=>$1) : ()
,-frmLso=>'-add') # -add
}))
.(!%$avr
? ''
:(' '
.join(' ',
map { my $k =$_;
# $s->logRec('***',$k,$avr->{$k});
my $vl =$acr->{$k} ||$k;
my $vt =$k;
$s->htmlMQH(-html=>' ' .$vl .' '
,-title=>$vt
.($avr->{$k}->{count} ? ', ' .$avr->{$k}->{count} : '')
.($acn && defined($avr->{$k}->{severity}) && ($avr->{$k}->{severity} ne '')
? ', ^' .($acn->{$avr->{$k}->{severity}} ||$avr->{$k}->{severity})
: '')
,%xpar
,-qkey=>{'record'=>$k}
,-urm=>$avr->{$k}->{utime} ||''
,-style=>'background-color: '
.($ac->{$avr->{$k}->{severity}}||$ac->{''})
)} @$alr)
))
.' '
.$s->htmlMQH(-html=>' X '
,-title=>$s->lng(1,'ddlbreset')
,%xpar
,-frmLso=>'-all'
,-qkey=>{}
,-qwhere=>'[[]]'
,-style=>'background-color: buttonface; border-width: 0px'
)
."</div>\n"
.($avt && scalar(%$avt)
? '<div nowrap="true" style="margin-bottom: 0.4ex; margin-top: 0.5ex; text-align: center;">'
.join(' ',
map { my $k =$_;
# $s->logRec('***',$k,$avt->{$k});
my $vl =$act->{$k} ||$k;
my $vt =$k;
$s->htmlMQH(-html=>' ' .$vl .' '
,-title=>$vt
.($avt->{$k}->{count} ? ', ' .$avt->{$k}->{count} : '')
.($acn && defined($avt->{$k}->{severity}) && ($avt->{$k}->{severity} ne '')
? ', ^' .($acn->{$avt->{$k}->{severity}} ||$avt->{$k}->{severity})
: '')
,%xpar
,-qkey=>{'record'=>$qpk->{-qkey}->{record},'rectype' => $k}
,-urm=>$avt->{$k}->{utime} ||''
,-style=>'background-color: '
.($ac->{$avt->{$k}->{severity}}||$ac->{''})
)} @{$s->{-a_cmdbh_rectype}->{$qpk->{-qkey}->{record}}})
."</div>\n"
: '')
.(!%$avg || $avx
? ''
: ('<div style="margin-bottom: 0.4ex; margin-top: 0.5ex;">'
.join(' ',
map { my $k =$_;
# $s->logRec('*1*',$_,$avg->{$_});
my $vl =$ah ? $ah->{$k} ||$s->udispq($avg->{$k}->{arole} ||$k) : $s->udispq($avg->{$k}->{arole} ||$k);
my $vt =($ah && $ah->{$k} || $s->udispq($avg->{$k}->{arole} ||$k))
.' <' .($avg->{$k}->{arole} ||$k) .'>';
!$avg->{$k}->{arole}
? ()
: $s->htmlMQH(-label=>" $vl "
, -title=>$vt
.($avg->{$k}->{count} ? ', ' .$avg->{$k}->{count} : '')
.($acn && defined($avg->{$k}->{severity}) && ($avg->{$k}->{severity} ne '')
? ', ^' .($acn->{$avg->{$k}->{severity}} ||$avg->{$k}->{severity})
: '')
,%xpar
,$qpk ? %$qpk : ()
,-qurole=>'actors', -quname=>$avg->{$k}->{arole}
,-urm=>$avg->{$k}->{utime} ||''
,-style=>'background-color: '
.($ac->{$avg->{$k}->{severity}}||$ac->{''})
)
} sort { !$ah ? $s->udispq($a||'') cmp $s->udispq($b||'')
: !$ah->{$a} ? 1
: !$ah->{$b} ? -1
: (lc($ah->{$a||''}||'') cmp lc($ah->{$b||''}||''))
} keys %$avg)
."</div>\n"))
.'<div style="margin-bottom: 0.4ex; margin-top: 0.5ex;">'
.(!%$avp
? ''
:(join('',
map { my $k =$_;
# $s->logRec('***',$k,$avp->{$k});
my $vl = $k eq 'auser' ? $s->udispq($s->user)
: $k eq 'auser+' ? '+'
: '?';
my $vt =$k =~/^auser(\+*)/
? $s->udispq($s->user) .' <' .$s->user .'>' .($1 ||'')
: '?';
$s->htmlMQH(-label=>$vl
, -title=>$vt
.($avp->{$k}->{count} ? ', ' .$avp->{$k}->{count} : '')
.($acn && defined($avp->{$k}->{severity}) && ($avp->{$k}->{severity} ne '')
? ', ^' .($acn->{$avp->{$k}->{severity}} ||$avp->{$k}->{severity})
: '')
,%xpar
, $qpk ? %$qpk : ()
, $k eq 'auser'
? (-qwhere=>'[[' .$s->dbi->quote($s->user) .' IN(hdesk.auser,hdesk.puser)]]')
: $k eq 'auser+'
? (-qwhere=>'[[' .$s->dbi->quote($s->user) .' IN(hdesk.auser,hdesk.puser,hdesk.cuser,hdesk.uuser)]]')
: (-qurole=>'actor', -quname=>$avp->{$k}->{auser})
,-urm=>$avp->{$k}->{utime} ||''
,-style=>'background-color: '
.$ac->{$avp->{$k}->{severity}}||$ac->{''}
)} grep {$avp->{$_}} qw (auser auser+))
.' '))
.(!%$avc
? ''
:(join(' ',
map { my $k =$_;
# $s->logRec('***',$k,$avc->{$k});
my $vl = $k eq 'self' ? $s->lng(0,'orole')
: $k eq 'svc' ? $s->lng(0,'arole')
: $k eq 'req' ? $s->lng(0,'users')
: $k eq 'act' ? ($ah && $ah->{lc($avc->{$k}->{arole})} ||$s->udispq($avc->{$k}->{arole}))
: $k eq 'mgr' ? $s->lng(0,'mrole')
: '?';
my $vt =($ah && $ah->{lc($avc->{$k}->{arole})}
||$s->udispq($avc->{$k}->{arole})) ." - $vl";
$s->htmlMQH(-label=>length($vl) ==1 ? $vl : " $vl "
, -title=>$vt
.($avc->{$k}->{count} ? ', ' .$avc->{$k}->{count} : '')
.($acn && defined($avc->{$k}->{severity}) && ($avc->{$k}->{severity} ne '')
? ', ^' .($acn->{$avc->{$k}->{severity}} ||$avc->{$k}->{severity})
: '')
,%xpar
, $qpk ? %$qpk : ()
, $k eq 'self'
? (-qwhere=>'[[hdesk.arole=hdesk.prole]]',-qurole=>'actors', -quname=>$avc->{$k}->{arole})
: $k eq 'svc'
? (-qwhere=>'[[hdesk.arole<>hdesk.prole]]',-qurole=>'actors', -quname=>$avc->{$k}->{arole})
: $k eq 'req'
? (-qwhere=>'[[hdesk.arole<>hdesk.prole]]',-qurole=>'principals', -quname=>$avc->{$k}->{arole})
: $k eq 'act'
? (-qurole=>'actors', -quname=>$avc->{$k}->{arole})
: $k eq 'mgr'
? (-qurole=>'manager', -quname=>$avc->{$k}->{arole})
: (-qurole=>'actors', -quname=>$avc->{$k}->{arole})
,-urm=>$avc->{$k}->{utime} ||''
,-style=>'background-color: '
.$ac->{$avc->{$k}->{severity}}||$ac->{''}
)} grep {$avc->{$_}} qw (act svc self req mgr))
.' '))
.(!%$avu
? ''
:(join(' ',
map { my $k =$_;
# $s->logRec('***',$k,$avu->{$k});
my $vl =$s->udispq($k);
my $vt =$vl;
$vl =$vl =~/^([^\s]+)/ ? $1 : $vl;
$s->htmlMQH(-label=>" $vl "
, -title=>"$vt <$k>"
.($avu->{$k}->{count} ? ', ' .$avu->{$k}->{count} : '')
.($acn && defined($avu->{$k}->{severity}) && ($avu->{$k}->{severity} ne '')
? ', ^' .($acn->{$avu->{$k}->{severity}} ||$avu->{$k}->{severity})
: '')
,%xpar
,-qkey=>{'auser'=>$avu->{$k}->{auser}
, $qpk ? %{$qpk->{-qkey}} : ()
}
,-qurole=>'actors'
,-quname=>$avu->{$k}->{arole}
,-urm=>$avu->{$k}->{utime} ||''
,-style=>'background-color: '
.$ac->{$avu->{$k}->{severity}}||$ac->{''}
)
} sort { lc($s->udispq($a)) cmp lc($s->udispq($b))
} keys %$avu)
.' '))
. "</div>\n"
.$mc;
}
##############################
# Setup Script
##############################
#__END__
#
# Connect as root to mysql, once creating database and user:
#{$_->{-dbi} =undef; $_->{-dbiarg} =['DBI:mysql:mysql','root','password']; $_->dbi; <STDIN>}
#
# Reconnect as operational user, creating or upgrading tables:
#{$_->{-dbi} =undef; $_->{-dbiarg} =$_->{-dbiargpv}; $_->dbi; <STDIN>}
#
# Reindex database:
#{$s->recReindex(1)}
#
#