There are lots of questions and requests that asking about the feature at the title of this article. I successfully made the modification regarding this, and now it works properly in client-side of osTicket v1.6 RC5.
- First of all, download this file, extract it, there is one file inside named multifile.js, then copy it into your root directory of your osTicket, and also to your \scp\ sub directory.
-
Open your \include\client\open.inc.php file, and find this code:
102 103 104 105 106 107
<tr> <td>Attachment:</td> <td> <input type="file" name="attachment"><font class="error"> <?=$errors['attachment']?></font> </td> </tr>then replace with this following code:
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
<tr> <td>Attachment:</td> <td> <!-- <input type="file" name="attachment"><font class="error"> <?=$errors['attachment']?></font> --> <input id="my_file_element" type="file" name="file_1" ><font class="error"> <?=$errors['file_1']?></font> </td> <tr> <td>Files:</td> <td> <!-- This is where the output will appear --> <script type="text/javascript" src="multifile.js"></script> <div id="files_list"></div> <script> <!-- Create an instance of the multiSelector class, pass it the output target and the max number of files --> var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 0 ); <!-- Pass in the file element --> multi_selector.addElement( document.getElementById( 'my_file_element' ) ); </script> </td> </tr> -
Open your \include\class.ticket.php file, and find this code:
823 824
//online based attached files. function uploadAttachment($file,$refid,$type){
before the first line of that code above, please insert this following code:
822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847
//online based attached files. function insertAttachment($ft,$fn,$fs,$refid,$type){ global $cfg; if(!$ft || !$refid || !$type) return 0; $dir=$cfg->getUploadDir(); $rand=Misc::randCode(16); $fn=Format::file_name($fn); $filename=rtrim($dir,'/').'/'.$rand.'_'.$fn; if(move_uploaded_file($ft,$filename)){ $sql ='INSERT INTO '.TICKET_ATTACHMENT_TABLE.' SET created=NOW() '. ',ticket_id='.db_input($this->getId()). ',ref_id='.db_input($refid). ',ref_type='.db_input($type). ',file_size='.db_input($fs). ',file_name='.db_input($fn). ',file_key='.db_input($rand); if(db_query($sql) && ($id=db_insert_id())) return $id; //DB insert failed!--remove the file.. @unlink($filename); } return 0; }
Find again this code:
1241 1242 1243 1244 1245 1246 1247
//Upload attachments...web based. if($_FILES['attachment']['name'] && $cfg->allowOnlineAttachments() && $msgid) { if(!$cfg->allowAttachmentsOnlogin() || ($cfg->allowAttachmentsOnlogin() && ($thisclient && $thisclient->isValid()))) { $ticket->uploadAttachment($_FILES['attachment'],$msgid,'M'); //TODO: recover from upload issues? } }
after the last line of that code, please insert this following code:
1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288
$totalsize=0; foreach($_FILES as $file) { if ($file['name']!='') { if(!$cfg->canUploadFileType($file['name'])) { $errors['file_1'] .= 'Invalid file type [ '.$file['name'].' ].<br />'; } } if(!$cfg->allowOnlineAttachments()) { $errors['file_1'] .= 'File [ '.$file['name'].' ] rejected.<br />'; } $totalsize = $totalsize + $file['size']; } if($totalsize>$cfg->getMaxFileSize()) { $errors['file_1'] .= 'File is too big ('.$totalsize.' bytes). Max '.$cfg->getMaxFileSize().' bytes allowed.<br />'; } $uploaded = ''; foreach($_FILES as $file) { if ($file['name'] != NULL ) { if(!$cfg->canUploadFileType($file['name'])) { $error = '<b>Error</b> '.$file['type'].' File type '.$file['name'].' ignored.'; echo $error; } else { $dir=$cfg->getUploadDir(); $rand=Misc::randCode(16); $file['name']=Format::file_name($file['name']); $upload_file=rtrim($dir,'/').'/'.$rand.'_'.$file['name']; if (file_exists($upload_file)) { $error = '<b>Error</b> '.$file['name'].' - already exist.'; echo $error; } elseif ($ticket->insertAttachment($file['tmp_name'],$file['name'],$file['size'],$msgid,'M')!=0) { $uploaded = '<b>Uploaded</b> '.$file['name'].'.'; echo $uploaded; } else { $error = '<b>Error</b> Upload failed '.$file['name'].' - Try again.'; echo $error; } } } }
-
Open your \include\client\viewticket.inc.php file, and find this code:
131 132 133 134
<div align="left"> Attach File<br><input type="file" name="attachment" id="attachment" size=30px value="<?=$info['attachment']?>" /> <font class="error"> <?=$errors['attachment']?></font> </div>then replace with this following code:
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
<!-- <div align="left"> Attach File<br><input type="file" name="attachment" id="attachment" size=30px value="<?=$info['attachment']?>" /> <font class="error"> <?=$errors['attachment']?></font> </div> --> <div align="left"> Attachment:<br /> <input id="my_file_element" type="file" name="file_1" ><font class="error"> <?=$errors['file_1']?></font> <br />Files: <!-- This is where the output will appear --> <script type="text/javascript" src="multifile.js"></script> <div id="files_list"></div> <script> <!-- Create an instance of the multiSelector class, pass it the output target and the max number of files --> var multi_selector = new MultiSelector( document.getElementById( 'files_list' ), 0 ); <!-- Pass in the file element --> multi_selector.addElement( document.getElementById( 'my_file_element' ) ); </script> -
Open your tickets.php file, and find this code:
58 59
$errors['attachment']='File is too big. Max '.$cfg->getMaxFileSize().' bytes allowed'; }
after the last line of that code, please insert this following code:
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
$totalsize=0; foreach($_FILES as $file) { if ($file['name']!='') { if(!$cfg->canUploadFileType($file['name'])) { $errors['file_1'] .= 'Invalid file type [ '.$file['name'].' ].<br />'; } } if(!$cfg->allowOnlineAttachments()) { $errors['file_1'] .= 'File [ '.$file['name'].' ] rejected.<br />'; } $totalsize = $totalsize + $file['size']; } if($totalsize>$cfg->getMaxFileSize()) { $errors['file_1'] .= 'File is too big ('.$totalsize.' bytes). Max '.$cfg->getMaxFileSize().' bytes allowed.<br />'; }
Find again this code:
78 79
if($_FILES['attachment']['name'] && $cfg->canUploadFiles() && $cfg->allowOnlineAttachments()) $ticket->uploadAttachment($_FILES['attachment'],$msgid,'M');
after the last line of that code above, please insert this following code:
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
$uploaded = ''; foreach($_FILES as $file) { if ($file['name'] != NULL ) { if(!$cfg->canUploadFileType($file['name'])) { $error = '<b>Error</b> '.$file['type'].' File type '.$file['name'].' ignored.<br />'; echo $error; } else { $dir=$cfg->getUploadDir(); $rand=Misc::randCode(16); $file['name']=Format::file_name($file['name']); $upload_file=rtrim($dir,'/').'/'.$rand.'_'.$file['name']; if (file_exists($upload_file)) { $error = '<b>Error</b> '.$file['name'].' - already exist.<br />'; echo $error; } elseif ($ticket->insertAttachment($file['tmp_name'],$file['name'],$file['size'],$msgid,'M')!=0) { $uploaded = '<b>Uploaded</b> '.$file['name'].'.<br />'; echo $uploaded; } else { $error = '<b>Error</b> Upload failed '.$file['name'].' - Try again.'; echo $error; } } } }
-
Open your open.php file, and find this code:
23
//Ticket::create...checks for errors..then replace with this following code:
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
//Ticket::create...checks for errors.. $totalsize=0; foreach($_FILES as $file) { if ($file['name']!='') { if(!$cfg->canUploadFileType($file['name'])) { $errors['file_1'] .= 'Invalid file type [ '.$file['name'].' ].<br />'; } } if(!$cfg->allowOnlineAttachments()) { $errors['file_1'] .= 'File [ '.$file['name'].' ] rejected.<br />'; } $totalsize = $totalsize + $file['size']; } if($totalsize>$cfg->getMaxFileSize()) { $errors['file_1'] .= 'File is too big ('.$totalsize.' bytes). Max '.$cfg->getMaxFileSize().' bytes allowed.<br />'; }
That’s all. Enjoy the code, everyone!

Hello,
Thanks for this good post !!!
Works fine for client, and I tried to modified also for staff with no success !
Could you also put code for staff please ?
thanks again for this good job
Best regards.
@frenchy
You’re welcome. Glad it works at yours.
Honestly, I have already created the same way on the staff-side. Unfortunately, the result is no success, too. I just wondered the causes why it does not work on the staff-side whereas on the client-side it works. Should you find the solution on the staff-side, please let us know. Thanks.
I am getting blank page when doing 3 rd point Open your \include\class.ticket.php
My osticket is not opening at all
Please help me
@bhupal
The blank page generally occurs if there is wrong syntax or the modification code you applied to the file has not done correctly. Make sure you have followed the instruction carefully, as the others have successfully implemented it. Good luck!
ok thanks it is working Excellent mod
Glad to know it works for you!
did there is a solution when replying by staff
Not yet, bhupal.
Hello,
What about now? Do you had time to create this mod but for Stuff?
hay there. having trouble implementing this, eg it is not working. page loads but i dont see any of the buttons to add the attachment
Nice Code….
It works super in client side,
Kindly post the code for staff side also.
Which will be very useful
THank U
@Piotr
Not yet.
@andy
Please re-check your modification code, as the others have successfully implemented it.
@Balaji
I hope so, unfortunately I cannot promise you when.
Thanks, man! Your MODs are super!!!
If you ever come to Ukraine – let me know by E-mail – I’ll buy you lots of beer!!!))))
Best regards!
Thanks a million Masino!
All the best from the Netherlands
Hi. Your mod works great for client. But its not working in staff are. can you please tell me how to do that.
I tried it at my local server and its working but same code on the hosting its not working.
No luck on hosting
Is there any code for use fckeditor or any other editor to work with OSticket
hi,
great work for client side, but not working on staff side. Do you have any solution for staff side? If you have please let us know. I am also trying
Hi,
You have one example that use in newticket and reply tickets to add multiples attached files?
Many Thanks
Mauro
Dear Masino,
Would You be so kind and write what has been done (discovered) when You work over Staff-Side MOD?
I have posted a query in ‘[MOD] Multiple Attachments for Client-Side’ to find out that still there are people interested in with this functionality.
Cheers,
Lucas