Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # import data to easyprofile from xlsx file - by Anak | anak@cpan.org - 22.08.2014 - GNU GPL v2
- use strict;
- use warnings;
- use feature 'say','switch';
- use Data::Dumper;
- use DBI;
- use JSON;
- use Spreadsheet::XLSX;
- our $version='0.5';
- my $xlsxDocument='doc.xlsx';
- my $excel=Spreadsheet::XLSX->new($xlsxDocument);
- my $json=JSON->new->allow_nonref;
- my $dbh=dbConnect('user','pass','dbname','localhost');
- my $dbTable='lw5pv_jsn_fields';
- foreach my $sheet (@{$excel->{Worksheet}}) {
- foreach my $row(1..$sheet->{MaxRow}) {
- my $regione=$sheet->{Cells}[$row][0]->{Val};
- #my $provincia=$sheet->{Cells}[$row][11]->{Val};
- #$provincia=$sheet->{Cells}[$row][1]->{Val} if $provincia eq '';
- my $provincia=$sheet->{Cells}[$row][1]->{Val};
- #my $siglaProvincia=$sheet->{Cells}[$row][12]->{Val};
- #$siglaProvincia=$sheet->{Cells}[$row][2]->{Val} if $siglaProvincia eq '';
- my $siglaProvincia=$sheet->{Cells}[$row][2]->{Val};
- my $comune=$sheet->{Cells}[$row][4]->{Val};
- my $codiceComune=$sheet->{Cells}[$row][3]->{Val};
- my $istituto=$sheet->{Cells}[$row][9]->{Val}.' '.$sheet->{Cells}[$row][6]->{Val};
- my $codiceIstituto=$sheet->{Cells}[$row][5]->{Val};
- $regione =~ s/ |'|"//g;
- $provincia =~ s/ |'|"//g;
- $comune =~ s/ |'|"//g;
- $istituto =~ s/ |'|"//g;
- say 'Regione: '.$regione;
- say 'Provincia: '.$provincia;
- say 'Comune: '.$comune;
- say 'Istituto: '.$istituto;
- my ($idRecordRegione, $aliasRegione)=fromDb(
- 'regione',
- $regione,
- ''
- );
- my ($idRecordProvincia, $aliasProvincia)=fromDb(
- 'provincia',
- $regione,
- $idRecordRegione,
- $provincia,
- $siglaProvincia,
- $aliasRegione
- );
- my ($idRecordComune, $aliasComune)=fromDb(
- 'comune',
- $provincia,
- $idRecordProvincia,
- $comune,
- $codiceComune,
- $aliasRegione.'/'.$aliasProvincia
- );
- my ($idRecordIstituto, $aliasIstituto)=fromDb(
- 'istituto',
- $comune,
- $idRecordComune,
- $istituto,
- $codiceIstituto,
- $aliasRegione.'/'.$aliasProvincia.'/'.$aliasComune
- )
- }
- }
- say '--> Importazione completata con successo';
- exit;
- sub fromDb {
- my $target=shift;
- my ($idRecord,$path,$jsonData);
- my $alias='';
- $path='insegnante_scuola_pubblica';
- given ($target) {
- when ('regione') {
- my $regione=shift;
- my $title='Regione';
- $path.='/regione';
- ($idRecord,$alias)=editRecord($title, $regione, $regione, $path, '')
- }
- when ('provincia') {
- my ($regione, $idRecordRegione, $provincia, $siglaProvincia,$aliasRegione)=@_;
- my $title='Province_'.$regione;
- 'target provincia - idRecordRegione='.$idRecordRegione;
- $path.='/'.$aliasRegione;
- ($idRecord,$alias)=editRecord($title, $provincia, $siglaProvincia, $path, $idRecordRegione)
- }
- when ('comune') {
- my ($provincia, $idRecordProvincia, $comune, $codiceComune,$aliasProvincia)=@_;
- my $title='Comuni_'.$provincia;
- 'target comune - idRecordprovincia='.$idRecordProvincia;
- $path.='/'.$aliasProvincia;
- ($idRecord,$alias)=editRecord($title, $comune, $codiceComune, $path, $idRecordProvincia)
- }
- when ('istituto') {
- my ($comune, $idRecordComune, $istituto, $codiceIstituto,$aliasComune)=@_;
- my $title='Scuole_'.$comune;
- 'target istituto - idRecordComune='.$idRecordComune;
- $path.='/'.$aliasComune;
- ($idRecord,$alias)=editRecord($title, $istituto, $codiceIstituto, $path, $idRecordComune)
- }
- }
- return ($idRecord,$alias)
- }
- sub editRecord {
- my $title=shift;
- my $optionName=shift;
- my $optionValue=shift;
- my $path=shift;
- my $idSelectParent=shift;
- (my $alias=$title) =~ s/ /_/g;
- #verifica esistenza select
- my ($idRecord,$jsonData)=$dbh->selectrow_array(
- 'SELECT id, params
- FROM '.$dbTable.'
- WHERE title=\''.$title.'\''
- );
- if ($idRecord) {
- # la select esiste, verifica se inserire $optionName
- my $param=$json->decode($jsonData);
- if ($param->{'select_options'} !~ /$optionName/) {
- # fare query update previo inserimento in params della regione $valueCell
- #say '--> OPTION PROVINCIA inserimento di '.$optionName;
- $param->{'select_options'}.="\n".$optionValue.'|'.$optionName;
- $jsonData=$json->encode($param);
- dbUpdate ($jsonData,$idRecord)
- }
- } else {
- my $parentGroup=12; # gruppo insegnante scuola pubblica
- my $level=2; # profondità rispetto al nodo origine
- my $edit=1;
- my $param=setJsonParam();
- $param->{'select_options'}.="\n".$optionValue.'|'.$optionName;
- $jsonData=$json->encode($param);
- $idRecord=dbInsert($parentGroup, $level, $path, $title, $alias, $edit, $jsonData);
- # set del param del parent!!! non dell'attuale, i dati che passo mi occorrono per leggerne i valori e modificarlo tramite update
- if ($idSelectParent ne '') {
- setDipendence($idSelectParent,$title)
- } # regione ha solo child
- }
- say "ALIAS ".$alias;
- return ($idRecord,$alias)
- }
- sub dbInsert {
- my ($parent, $level, $path, $title, $alias, $edit, $params)=@_;
- my $sth = $dbh->prepare("
- INSERT INTO ".$dbTable." (
- parent_id,
- level,
- path,
- title,
- alias,
- published,
- type,
- core,
- required,
- profile,
- edit,
- register,
- search,
- checked_out,
- checked_out_time,
- access,
- accessview,
- params,
- created_user_id,
- version
- )
- VALUES (?,?,?,?,?,'1','selectlist','0','1','1',?,'1','0','0','0000-00-00 00:00:00','1','1',?,'42','1')
- ") or die $_;
- $sth->execute($parent, $level, $path, $title, $alias, $edit, $params) or die $_;
- my $idRecord=$sth->{mysql_insertid};
- say 'IDRECORD '.$idRecord;
- $dbh->do("ALTER TABLE lw5pv_jsn_users ADD $alias VARCHAR(255) NULL");
- $dbh->commit;
- return $idRecord
- }
- sub dbUpdate {
- my ($jsonData,$idRecord)=@_;
- my $sth=$dbh->prepare('
- UPDATE '.$dbTable.'
- SET params=?
- WHERE id=?
- ') or die $_;
- $sth->execute($jsonData,$idRecord) or die $dbh->errstr;
- $dbh->commit
- }
- sub dbConnect {
- my ($dbUser,$dbPass,$dbName,$dbHost)=@_;
- my $dsn="DBI:mysql:database=$dbName;host=$dbHost";
- my $dbh=DBI->connect(
- $dsn,
- $dbUser,
- $dbPass,
- {RaiseError => 1}
- ) or die DBI->errstr;
- $dbh->{AutoCommit}=0;
- return $dbh
- }
- sub setDipendence {
- my $idSelectParent=shift; # record da modificare
- my $title=shift; # sua option da modificare
- # 1 fai la select e preleva il valore della colonna params del record parent
- my $jsonData=$dbh->selectrow_array(
- 'SELECT params
- FROM '.$dbTable.'
- WHERE id=\''.$idSelectParent.'\''
- );
- # 2 converti da json ad hash il valore della colonna params
- my $param=$json->decode($jsonData);
- # 3 identifica il valore $optionValue della option parent (che ha il nome $title)
- my @optionName=split(/_/,$title);
- my $optionName=pop(@optionName);
- my $optionValue;
- my @paramOption=split(/\n/,$param->{'select_options'});
- foreach my $option(@paramOption) {
- if ($option =~ /\|/) {# se esiste il separatore usato dall'applicazione per la coppia value|name
- my @optionDb=split(/\|/,$option);
- if ($optionName eq $optionDb[1]) {
- $optionValue=$optionDb[0];
- last
- }
- }
- }
- # 4 verifica quante condizioni sono già state inserite nella select e aggiungi un valore con la condizione di dipendenza della select child
- # usare la prima uguale a zero, se sono tutte diverse da 0, aggiunge una (l'indice ce lo hai)
- my ($conditionCounter,$okCondition)=('',0);
- for (grep /^condition_operator*/, sort(keys($param))) {
- if ($param->{$_} == 0) {
- #say $_.'-'.$param->{$_};
- $okCondition=1;
- last
- }
- $conditionCounter++
- }
- if (! $okCondition) {
- $conditionCounter++
- }
- $param->{'condition_operator'.$conditionCounter}='1'; # uguale a...
- $param->{'condition_field'.$conditionCounter}='_custom'; # un valore di una sua option
- $param->{'condition_custom'.$conditionCounter}=$optionValue; # con valore.
- $param->{'condition_hide'.$conditionCounter}=[$title]; # nome della select dipendente
- $param->{'condition_action'.$conditionCounter}='show'; # azione (mostrala se la condizione è verificata)
- say 'TARGET OPTION NAME '.$title;
- # 5 effettua update della cella param in mysql dopo aver riconvertito in json i dati
- $jsonData=$json->encode($param);
- dbUpdate ($jsonData,$idSelectParent);
- }
- sub setJsonParam {
- my $param={
- hidetitle => '0',
- privacy => '0',
- privacy_default => '0',
- condition_operator => '0',
- condition_field => '_custom',
- condition_custom => '',
- condition_hide => '',
- condition_action => 'show',
- condition_operator1 => '0',
- condition_field1 => '_custom',
- condition_custom1 => '',
- condition_action1 => 'hide',
- condition_operator2 => '0',
- condition_field2 => '_custom',
- condition_custom2 => '',
- condition_action2 => 'hide',
- condition_operator3 => '0',
- condition_field3 => '_custom',
- condition_custom3 => '',
- condition_action3 => 'hide',
- condition_operator4 => '0',
- condition_field4 => '_custom',
- condition_custom4 => '',
- condition_action4 => 'hide',
- condition_operator5 => '0',
- condition_field5 => '_custom',
- condition_custom5 => '',
- condition_action5 => 'hide',
- condition_operator6 => '0',
- condition_field6 => '_custom',
- condition_custom6 => '',
- condition_action6 => 'hide',
- condition_operator7 => '0',
- condition_field7 => '_custom',
- condition_custom7 => '',
- condition_action7 => 'hide',
- condition_operator8 => '0',
- condition_field8 => '_custom',
- condition_custom8 => '',
- condition_action8 => 'hide',
- condition_operator9 => '0',
- condition_field9 => '_custom',
- condition_custom9 => '',
- condition_action9 => 'hide',
- checkbox_defaultvalue => '',
- checkbox_options => '',
- checkbox_inline => '0',
- date_default => '',
- date_format => 'Y-m-d',
- date_type => '0',
- date_viewmode => 'days',
- date_span => '0',
- date_span_year => '0',
- date_span_month => '0',
- date_span_day => '0',
- email_defaultvalue => '',
- email_placeholder => '',
- filetype_ext => 'pdf|zip|doc|docx',
- filetype_label => '',
- gmap_showmap => '1',
- gmap_radius => '10',
- gmap_unit => 'Km',
- hide_defaultvalue => '',
- image_width => '200',
- image_height => '200',
- image_thumbwidth => '75',
- image_thumbheight => '75',
- image_defaultvalue => '',
- image_alt => '',
- image_class => '',
- image_cropwebcam => '0',
- link_defaultvalue => '',
- link_placeholder => '',
- link_maxlength => '255',
- numeric_defaultvalue => '',
- numeric_max => '999999',
- numeric_min => '0',
- numeric_step => '1',
- phone_defaultvalue => '',
- phone_placeholder => '',
- radio_defaultvalue => '',
- radio_options => '',
- radio_inline => '0',
- select_defaultvalue => '',
- select_options => '',
- select_multiple => '0',
- select_dbopttable => '',
- select_dboptvalue => '',
- select_dbopttext => '',
- select_dboptwhere => '',
- text_defaultvalue => '',
- text_placeholder => '',
- text_maxlength => '255',
- text_regex => '',
- text_customregex => '',
- text_readonly => '0',
- textarea_defaultvalue => '',
- textarea_type => 'textarea',
- video_defaultvalue => '',
- video_placeholder => '',
- video_maxlength => '255'
- };
- return $param
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement