#!/usr/bin/perl

#use utf8;
use strict;
use CGI;

use Opals::Template qw(
    tmpl_read
    tmpl_write
);
use Opals::Constant;

use Time::HiRes qw(time);
use JSON;
my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;
my $input = $cgi->Vars();
my $header="Content-type: text/plain\n\n";
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'util/file.tmpl',
            reqPermission   => 'pref_edit',
        }
);

my $fileName    =sprintf("%s",time) ;
$fileName =~ s/\.//g;

my $uploadFileName  ='';
my $fileData        ='';
my $titleFile       =$input->{'name'}||'';

if($input->{'image'} ne ''){
    $uploadFileName='image';
}
elsif($input->{'upfile'} ne ''){
    $uploadFileName='upfile';
}
my $forPortal= $input->{'forPortal'};
my $fileExtension='';
my $fRealName='';
if($uploadFileName ne ''){
    $fRealName     = $input->{$uploadFileName};
    $fileExtension = $input->{$uploadFileName};
       $fileExtension =~ s/.*\.([\w\-]+)$/$1/;
       $fileExtension = lc($fileExtension);
    my $fileHandle = $cgi->upload($uploadFileName);

        $fileData = '';
        while (<$fileHandle>) {
            $fileData .= $_;
        }
}
my $response="";
my $rv = 0;
my $mimeType='';
my $http_host= $ENV{'HTTP_HOST'};
($rv,$mimeType) =saveFile($dbh, $fileName,$fRealName, $fileExtension, $fileData) if($fileData ne '' );

if($fileData && $fileData ne '' && $rv){  
    my $fileIcon='shim.png';
    $fileIcon= FILE_ICON->{$fileExtension} if(FILE_ICON->{$fileExtension});
    if($forPortal=='1'){
        $header="Content-type: text/html\n\n";
        $response="<script type='text/javascript'>top.\$('.mce-btn.mce-open').parent().find('.mce-textbox').val('/bin/util/loadfile?fileName=$fileName').closest('.mce-window').find('.mce-primary').click();</script>"
    }
    else{
        $response=to_json({status=>'UPLOADED', 
                           image_url=>"/bin/util/loadfile?fileName=$fileName",
                           file_url    =>"/bin/util/loadfile?fileName=$fileName",
                           file_icon   =>$fileIcon,
                           fRealName   =>$fRealName,
                           mimeType    =>$mimeType,
                           titleFile   =>$titleFile,
                           http_host   =>$http_host});
                    
    }
 }
else{
    $response='{"status":"No file was submitted"}';
}
print $header, $response ;
    

################################################################################


sub saveFile {
    my ($dbh,  $fileName, $fRealName,$fileExtension, $fileData) = @_;
    my $mimeTypeList = listMimeTypes();
    my $fileTypeList = listFileTypes();
   
    my $mimeType=$mimeTypeList->{$fileExtension};
    my $fileType=$fileTypeList->{$fileExtension};

    if (!$mimeType || $mimeType eq '' ) {
        return 0;
    }

    my $sth = $dbh->prepare(<<_STH_);
insert into  opl_file
set     mimeType = ?,
        fileData = ?,
        fileType=?,
        fileName=?,
        fRealName=?
_STH_

    $sth->execute($mimeType, $fileData, $fileType, $fileName,$fRealName);
    $sth->finish;

    return (1,$mimeType);
}
############################################################


sub useDefaultFile {
    my ($dbh, $fileType, $fileName) = @_;
    my $sth = $dbh->prepare(<<_STH_);
update  opl_file
set     mimeType = '',
        fileData = ''
where   fileType = ? &&
        fileName = ?
_STH_

    $sth->execute($fileType, $fileName);
    $sth->finish;
}
############################################################


sub listMimeTypes {
    return {

'ai'    =>    'application/postscript',
'aif'   =>    'audio/x-aiff',
'aifc'  =>    'audio/x-aiff',
'aiff'  =>    'audio/x-aiff',
'asc'   =>    'text/plain',
'atom'  =>    'application/atom+xml',
'au'    =>    'audio/basic',
'avi'   =>    'video/x-msvideo',
'bcpio' =>    'application/x-bcpio',
'bin'   =>    'application/octet-stream',
'bmp'   =>    'image/bmp',
'cdf'   =>    'application/x-netcdf',
'cgm'   =>    'image/cgm',
'class' =>    'application/octet-stream',
'cpio'  =>    'application/x-cpio',
'cpt'   =>    'application/mac-compactpro',
'csh'   =>    'application/x-csh',
'css'   =>    'text/css',
'csv'   =>    'text/csv',
'csv'   =>    'application/csv',
'dcr'   =>    'application/x-director',
'dif'   =>    'video/x-dv',
'dir'   =>    'application/x-director',
'djv'   =>    'image/vnd.djvu',
'djvu'  =>    'image/vnd.djvu',
'dll'   =>    'application/octet-stream',
'dmg'   =>    'application/octet-stream',
'dms'   =>    'application/octet-stream',
'doc'   =>    'application/msword',
'docx'   =>   'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'dtd'   =>    'application/xml-dtd',
'dv'    =>    'video/x-dv',
'dvi'   =>    'application/x-dvi',
'dxr'   =>    'application/x-director',
'eps'   =>    'application/postscript',
'etx'   =>    'text/x-setext',
'exe'   =>    'application/octet-stream',
'ez'    =>    'application/andrew-inset',
'gif'   =>    'image/gif',
'gram'  =>    'application/srgs',
'grxml' =>    'application/srgs+xml',
'gtar'  =>    'application/x-gtar',
'hdf'   =>    'application/x-hdf',
'hqx'   =>    'application/mac-binhex40',
'htm'   =>    'text/html',
'html'  =>    'text/html',
'ice'   =>    'x-conference/x-cooltalk',
'ico'   =>    'image/x-icon',
'ics'   =>    'text/calendar',
'ief'   =>    'image/ief',
'ifb'   =>    'text/calendar',
'iges'  =>    'model/iges',
'igs'   =>    'model/iges',
'jnlp'  =>    'application/x-java-jnlp-file',
'jp2'   =>    'image/jp2',
'jpe'   =>    'image/jpeg',
'jpeg'  =>    'image/jpeg',
'jpg'   =>    'image/jpeg',
'js'    =>    'application/x-javascript',
'kar'   =>    'audio/midi',
'latex' =>    'application/x-latex',
'lha'   =>    'application/octet-stream',
'lzh'   =>    'application/octet-stream',
'm3u'   =>    'audio/x-mpegurl',
'm4a'   =>    'audio/mp4a-latm',
'm4b'   =>    'audio/mp4a-latm',
'm4p'   =>    'audio/mp4a-latm',
'm4u'   =>    'video/vnd.mpegurl',
'm4v'   =>    'video/x-m4v',
'mac'   =>    'image/x-macpaint',
'man'   =>    'application/x-troff-man',
'mathml' =>    'application/mathml+xml',
'me'    =>     'application/x-troff-me',
'mesh'  =>     'model/mesh',
'mid'   =>     'audio/midi',
'midi'  =>     'audio/midi',
'mif'   =>     'application/vnd.mif',
'mov'   =>     'video/quicktime',
'movie' =>     'video/x-sgi-movie',
'mp2'   =>     'audio/mpeg',
'mp3'   =>     'audio/mpeg',
'mp4'   =>     'video/mp4',
'mpe'   =>     'video/mpeg',
'mpeg'  =>     'video/mpeg',
'mpg'   =>     'video/mpeg',
'mpga'  =>     'audio/mpeg',
'ms'    =>     'application/x-troff-ms',
'msh'   =>     'model/mesh',
'mxu'   =>     'video/vnd.mpegurl',
'nc'    =>     'application/x-netcdf',
'oda'   =>     'application/oda',
'ogg'   =>     'application/ogg',
'pbm'   =>     'image/x-portable-bitmap',
'pct'   =>     'image/pict',
'pdb'   =>     'chemical/x-pdb',
'pdf'   =>     'application/pdf',
'pgm'   =>     'image/x-portable-graymap',
'pgn'   =>     'application/x-chess-pgn',
'pic'   =>     'image/pict',
'pict'  =>     'image/pict',
'png'   =>     'image/png',
'pnm'   =>     'image/x-portable-anymap',
'pnt'   =>     'image/x-macpaint',
'pntg'  =>     'image/x-macpaint',
'ppm'   =>     'image/x-portable-pixmap',
'ppt'   =>     'application/vnd.ms-powerpoint',
'pptx'  =>     'application/vnd.openxmlformats-officedocument.presentationml.presentation',
'pps'   =>     'application/vnd.ms-powerpoint',
'ppsx'  =>     'application/vnd.ms-powerpoint',
'ps'    =>     'application/postscript',
'qt'    =>     'video/quicktime',
'qti'   =>     'image/x-quicktime',
'qtif'  =>     'image/x-quicktime',
'ra'    =>     'audio/x-pn-realaudio',
'ram'   =>     'audio/x-pn-realaudio',
'ras'   =>     'image/x-cmu-raster',
'rdf'   =>     'application/rdf+xml',
'rgb'   =>     'image/x-rgb',
'rm'    =>     'application/vnd.rn-realmedia',
'roff'  =>     'application/x-troff',
'rtf'   =>     'text/rtf',
'rtx'   =>     'text/richtext',
'sgm'   =>     'text/sgml',
'sgml'  =>     'text/sgml',
'sh'    =>     'application/x-sh',
'shar'  =>     'application/x-shar',
'silo'  =>     'model/mesh',
'sit'   =>     'application/x-stuffit',
'skd'   =>     'application/x-koan',
'skm'   =>     'application/x-koan',
'skp'   =>     'application/x-koan',
'skt'   =>     'application/x-koan',
'smi'   =>     'application/smil',
'smil'  =>     'application/smil',
'snd'   =>     'audio/basic',
'so'    =>	   'application/octet-stream',
'spl'   =>     'application/x-futuresplash',
'src'   =>     'application/x-wais-source',
'sv4cpio'=>    'application/x-sv4cpio',
'sv4crc' =>    'application/x-sv4crc',
'svg'   =>     'image/svg+xml',
'swf'   =>     'application/x-shockwave-flash',
't'     =>     'application/x-troff',
'tar'   =>     'application/x-tar',
'tcl'   =>     'application/x-tcl',
'tex'   =>     'application/x-tex',
'texi'  =>     'application/x-texinfo',
'texinfo' =>   'application/x-texinfo',
'tif'   =>     'image/tiff',
'tiff'  =>     'image/tiff',
'tr'    =>     'application/x-troff',
'tsv'   =>     'text/tab-separated-values',
'txt'   =>     'text/plain',
'ustar' =>     'application/x-ustar',
'vcd'   =>     'application/x-cdlink',
'vrml'  =>     'model/vrml',
'vxml'  =>     'application/voicexml+xml',
'wav'   =>     'audio/x-wav',
'wbmp'  =>     'image/vnd.wap.wbmp',
'wbmxl' =>     'application/vnd.wap.wbxml',
'wml'   =>     'text/vnd.wap.wml',
'wmlc'  =>     'application/vnd.wap.wmlc',
'wmls'  =>     'text/vnd.wap.wmlscript',
'wmlsc' =>     'application/vnd.wap.wmlscriptc',
'wrl'   =>     'model/vrml',
'xbm'   =>     'image/x-xbitmap',
'xht'   =>     'application/xhtml+xml',
'xhtml' =>     'application/xhtml+xml',
'xls'   =>     'application/vnd.ms-excel',
'xlsx'  =>     'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'xml'   =>     'application/xml',
'xpm'   =>     'image/x-xpixmap',
'xsl'   =>     'application/xml',
'xslt'  =>     'application/xslt+xml',
'xul'   =>     'application/vnd.mozilla.xul+xml',
'xwd'   =>     'image/x-xwindowdump',
'xyz'   =>     'chemical/x-xyz',
'zip'   =>     'application/zip' 
    };
}



sub listFileTypes {
    return {

'ai'    =>    'postscript',
'aif'   =>    'audio',
'aifc'  =>    'audio',
'aiff'  =>    'audio',
'asc'   =>    'text',
'atom'  =>    'atom',
'au'    =>    'audio',
'avi'   =>    'video',
'bcpio' =>    'bcpio',
'bin'   =>    'octet-stream',
'bmp'   =>    'image',
'cdf'   =>    'application',
'cgm'   =>    'image/cgm',
'class' =>    'application',
'cpio'  =>    'application',
'cpt'   =>    'application',
'csh'   =>    'application',
'css'   =>    'css',
'csv'   =>    'csv',
'csv'   =>    'application',
'dcr'   =>    'application',
'dif'   =>    'video',
'dir'   =>    'application',
'djv'   =>    'image',
'djvu'  =>    'image',
'dll'   =>    'application',
'dmg'   =>    'application',
'dms'   =>    'application',
'doc'   =>    'msword',
'docx'   =>    'msword',
'dtd'   =>    'dtd',
'dv'    =>    'video',
'dvi'   =>    'dvi',
'dxr'   =>    'application',
'eps'   =>    'postscript',
'etx'   =>    'setext',
'exe'   =>    'application',
'ez'    =>    'application',
'gif'   =>    'image',
'gram'  =>    'application',
'grxml' =>    'application',
'gtar'  =>    'application',
'hdf'   =>    'application',
'hqx'   =>    'application',
'htm'   =>    'html',
'html'  =>    'html',
'ice'   =>    'x-conference',
'ico'   =>    'image',
'ics'   =>    'calendar',
'ief'   =>    'image',
'ifb'   =>    'calendar',
'iges'  =>    'model',
'igs'   =>    'model',
'jnlp'  =>    'applicatione',
'jp2'   =>    'image',
'jpe'   =>    'image',
'jpeg'  =>    'image',
'jpg'   =>    'image',
'js'    =>    'javascript',
'kar'   =>    'audio',
'latex' =>    'latex',
'lha'   =>    'application',
'lzh'   =>    'application',
'm3u'   =>    'audio',
'm4a'   =>    'audio',
'm4b'   =>    'audio',
'm4p'   =>    'audio',
'm4u'   =>    'video',
'm4v'   =>    'video',
'mac'   =>    'image',
'man'   =>    'application',
'mathml' =>    'application',
'me'    =>     'application',
'mesh'  =>     'model',
'mid'   =>     'audio',
'midi'  =>     'audio',
'mif'   =>     'application',
'mov'   =>     'video',
'movie' =>     'video',
'mp2'   =>     'audio',
'mp3'   =>     'audio',
'mp4'   =>     'video',
'mpe'   =>     'video',
'mpeg'  =>     'video',
'mpg'   =>     'video',
'mpga'  =>     'audio',
'ms'    =>     'application',
'msh'   =>     'model',
'mxu'   =>     'video',
'nc'    =>     'application',
'oda'   =>     'application',
'ogg'   =>     'application',
'pbm'   =>     'image',
'pct'   =>     'image',
'pdb'   =>     'chemical',
'pdf'   =>     'application',
'pgm'   =>     'image',
'pgn'   =>     'application',
'pic'   =>     'image',
'pict'  =>     'image',
'png'   =>     'image',
'pnm'   =>     'image',
'pnt'   =>     'image',
'pntg'  =>     'image',
'ppm'   =>     'image',
'ppt'   =>     'application',
'pptx'  =>     'application',
'pps'   =>     'application',
'ps'    =>     'application',
'qt'    =>     'video',
'qti'   =>     'image',
'qtif'  =>     'image',
'ra'    =>     'audio',
'ram'   =>     'audio',
'ras'   =>     'image',
'rdf'   =>     'application',
'rgb'   =>     'image',
'rm'    =>     'application',
'roff'  =>     'application',
'rtf'   =>     'text',
'rtx'   =>     'text',
'sgm'   =>     'text',
'sgml'  =>     'text',
'sh'    =>     'application',
'shar'  =>     'application',
'silo'  =>     'model',
'sit'   =>     'application',
'skd'   =>     'application',
'skm'   =>     'application',
'skp'   =>     'application',
'skt'   =>     'application',
'smi'   =>     'application',
'smil'  =>     'application',
'snd'   =>     'audio',
'so'    =>	   'application',
'spl'   =>     'application',
'src'   =>     'application',
'sv4cpio'=>    'application',
'sv4crc' =>    'application',
'svg'   =>     'image',
'swf'   =>     'application',
't'     =>     'application',
'tar'   =>     'application',
'tcl'   =>     'application',
'tex'   =>     'application',
'texi'  =>     'application',
'texinfo' =>   'application',
'tif'   =>     'image',
'tiff'  =>     'image',
'tr'    =>     'application',
'tsv'   =>     'text',
'txt'   =>     'text',
'ustar' =>     'application',
'vcd'   =>     'application',
'vrml'  =>     'model',
'vxml'  =>     'application',
'wav'   =>     'audio',
'wbmp'  =>     'image',
'wbmxl' =>     'application',
'wml'   =>     'text',
'wmlc'  =>     'application',
'wmls'  =>     'text',
'wmlsc' =>     'application',
'wrl'   =>     'model',
'xbm'   =>     'image',
'xht'   =>     'application',
'xhtml' =>     'application',
'xls'   =>     'application',
'xlsx'   =>    'application',
'xml'   =>     'application',
'xpm'   =>     'image',
'xsl'   =>     'application',
'xslt'  =>     'application',
'xul'   =>     'application',
'xwd'   =>     'image',
'xyz'   =>     'chemical',
'zip'   =>     'application' 
    };
}
