function classifyFile($classification_data, $email, $parsedEmail, $validWS, $mantainWs = true, $csv = '')
 {
     if (!is_array($classification_data)) {
         $classification_data = array();
     }
     if (!isset($parsedEmail["Attachments"])) {
         throw new Exception(lang('no attachments found for email'));
     }
     for ($c = 0; $c < count($classification_data); $c++) {
         if (isset($classification_data["att_" . $c]) && $classification_data["att_" . $c]) {
             $att = $parsedEmail["Attachments"][$c];
             $fName = str_starts_with($att["FileName"], "=?") ? iconv_mime_decode($att["FileName"], 0, "UTF-8") : utf8_safe($att["FileName"]);
             if (trim($fName) == "" && strlen($att["FileName"]) > 0) {
                 $fName = utf8_encode($att["FileName"]);
             }
             try {
                 $file = ProjectFiles::findOne(array('conditions' => "`filename` = " . DB::escape($fName) . " AND `mail_id` = " . $email->getId()));
                 DB::beginWork();
                 if ($file == null) {
                     $fileIsNew = true;
                     $file = new ProjectFile();
                     $file->setFilename($fName);
                     $file->setIsVisible(true);
                     $file->setIsPrivate(false);
                     $file->setIsImportant(false);
                     $file->setCommentsEnabled(true);
                     $file->setAnonymousCommentsEnabled(false);
                     $file->setMailId($email->getId());
                     $file->save();
                 } else {
                     $fileIsNew = false;
                 }
                 if (!$mantainWs && !$fileIsNew) {
                     $file->removeFromWorkspaces(logged_user()->getWorkspacesQuery());
                 }
                 foreach ($validWS as $w) {
                     if (!$file->hasWorkspace($w)) {
                         $file->addToWorkspace($w);
                     }
                 }
                 $file->setTagsFromCSV($csv);
                 $enc = array_var($parsedMail, 'Encoding', 'UTF-8');
                 $ext = utf8_substr($fName, strrpos($fName, '.') + 1, utf8_strlen($fName, $enc), $enc);
                 $mime_type = '';
                 if (Mime_Types::instance()->has_type($att["content-type"])) {
                     $mime_type = $att["content-type"];
                     //mime type is listed & valid
                 } else {
                     $mime_type = Mime_Types::instance()->get_type($ext);
                     //Attempt to infer mime type
                 }
                 if ($fileIsNew) {
                     $tempFileName = ROOT . "/tmp/" . logged_user()->getId() . "x" . gen_id();
                     $fh = fopen($tempFileName, 'w') or die("Can't open file");
                     fwrite($fh, $att["Data"]);
                     fclose($fh);
                     $fileToSave = array("name" => $fName, "type" => $mime_type, "tmp_name" => $tempFileName, "error" => 0, "size" => filesize($tempFileName));
                     $revision = $file->handleUploadedFile($fileToSave, true, lang('attachment from email', $email->getSubject()));
                     // handle uploaded file
                     $email->linkObject($file);
                     ApplicationLogs::createLog($file, $email->getWorkspaces(), ApplicationLogs::ACTION_ADD);
                 }
                 DB::commit();
                 // Error...
             } catch (Exception $e) {
                 DB::rollback();
                 flash_error($e->getMessage());
                 ajx_current("empty");
             }
             if (isset($tempFileName) && is_file($tempFileName)) {
                 unlink($tempFileName);
             }
         }
     }
 }
 private function upload_document_image($url, $filename, $img_num, $tags = '')
 {
     $file_dt = array();
     $file_content = file_get_contents(html_entity_decode($url));
     $extension = get_file_extension($url);
     if (strpos($extension, "c=files") !== FALSE) {
         $extension = "jpg";
     }
     $name = $filename . "-img-{$img_num}.{$extension}";
     $description = lang("this file is included in document", $filename);
     $tmp_name = ROOT . "/tmp/" . gen_id() . $extension;
     file_put_contents($tmp_name, $file_content);
     $file_dt['name'] = $name;
     $file_dt['size'] = strlen($file_content);
     $file_dt['type'] = Mime_Types::instance()->get_type($extension);
     $file_dt['tmp_name'] = $tmp_name;
     $file = ProjectFiles::getByFilename($name);
     if ($file) {
         $file->delete();
     }
     $file = new ProjectFile();
     $file->setIsVisible(true);
     $file->setIsPrivate(false);
     $file->setIsImportant(false);
     $file->setCommentsEnabled(true);
     $file->setAnonymousCommentsEnabled(false);
     $file->setFilename($name);
     $file->setDescription($description);
     $file->setArchivedById(logged_user()->getId());
     $file->setArchivedOn(DateTimeValueLib::now());
     $file->save();
     $file->setTagsFromCSV($tags);
     $file->handleUploadedFile($file_dt, true, $description);
     $file->addToWorkspace(active_or_personal_project());
     $ws = $file->getWorkspaces();
     ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_ADD);
     unlink($tmp_name);
     return $file->getId();
 }
Exemplo n.º 3
0
 function uploadFile($username, $password, $workspaces, $tags, $generate_rev, $filename, $description, $do_checkin, $data)
 {
     $result = array('status' => true, 'errorid' => 0, 'message' => '');
     if ($this->loginUser($username, $password)) {
         try {
             DB::beginWork();
             $file = null;
             $files = ProjectFiles::getAllByFilename($filename, logged_user()->getWorkspacesQuery());
             if (is_array($files) && count($files) > 0) {
                 if ($generate_rev) {
                     $file = ProjectFiles::findById($files[0]->getId());
                     if ($file->isCheckedOut()) {
                         if (!$file->canCheckin(logged_user())) {
                             $result['status'] = false;
                             $result['errorid'] = 1004;
                             $result['message'] = lang('no access permissions');
                         }
                         $file->setCheckedOutById(0);
                     } else {
                         // Check for edit permissions
                         if (!$file->canEdit(logged_user())) {
                             $result['status'] = false;
                             $result['errorid'] = 1004;
                             $result['message'] = lang('no access permissions');
                         }
                     }
                 }
             }
             if ($result['status']) {
                 $enteredWS = Projects::findByCSVIds($workspaces);
                 $validWS = array();
                 foreach ($enteredWS as $ws) {
                     if (ProjectFile::canAdd(logged_user(), $ws)) {
                         $validWS[] = $ws;
                     }
                 }
                 if (count($validWS) == 0) {
                     $result['status'] = false;
                     $result['errorid'] = 1005;
                     $result['message'] = 'Invalid workspaces given. Check access permissions.';
                 } else {
                     $make_revision_comment = $file != null;
                     if ($file == null) {
                         $file = new ProjectFile();
                         $file->setFilename($filename);
                         $file->setIsVisible(true);
                         $file->setIsPrivate(false);
                         $file->setIsImportant(false);
                         $file->setCommentsEnabled(true);
                         $file->setAnonymousCommentsEnabled(false);
                         $file->setCreatedOn(new DateTimeValue(time()));
                         $file->setDescription($description);
                     }
                     $file_dt['name'] = $file->getFilename();
                     $file_dt['size'] = strlen($data);
                     $file_dt['tmp_name'] = ROOT . DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . rand();
                     $extension = trim(get_file_extension($file->getFilename()));
                     $file_dt['type'] = Mime_Types::instance()->get_type($extension);
                     if (!trim($file_dt['type'])) {
                         $file_dt['type'] = 'text/html';
                     }
                     $handle = fopen($file_dt['tmp_name'], "w");
                     fwrite($handle, $data, $file_dt['size']);
                     fclose($handle);
                     $file->save();
                     $revision = $file->handleUploadedFile($file_dt, true, $make_revision_comment ? $description : '');
                     $file->setTagsFromCSV($tags);
                     foreach ($validWS as $w) {
                         $file->addToWorkspace($w);
                     }
                     foreach ($validWS as $w) {
                         ApplicationLogs::createLog($file, $w, ApplicationLogs::ACTION_ADD);
                     }
                     DB::commit();
                     $result['message'] = 'd' . str_pad($file->getId(), 3, '0', STR_PAD_LEFT) . 'r' . $file->getRevisionNumber();
                     if (!$do_checkin) {
                         $this->checkoutFile($username, $password, $file->getId());
                     }
                 }
             }
         } catch (Exception $e) {
             DB::rollback();
             $result['message'] = $e->getMessage();
             $result['errorid'] = 1003;
             $result['status'] = false;
             // If we uploaded the file remove it from repository
             if (isset($revision) && $revision instanceof ProjectFileRevision && FileRepository::isInRepository($revision->getRepositoryId())) {
                 FileRepository::deleteFile($revision->getRepositoryId());
             }
         }
     } else {
         $result['status'] = false;
         $result['errorid'] = 1002;
         $result['message'] = lang('invalid login data');
     }
     return $this->result_to_xml($result, 'result');
 }