Exemplo n.º 1
0
 function uploadDocument($doc_name, $ws_id, $path)
 {
     if (str_starts_with($doc_name, "~")) {
         return;
     }
     try {
         DB::beginWork();
         $project = Projects::findById($ws_id);
         //$file = ProjectFiles::findOne(array("conditions" => "`filename` = '$doc_name'"));
         $files = ProjectFiles::getAllByFilename($doc_name, $ws_id);
         if (is_array($files) && count($files) > 0) {
             $file = $files[0];
         } else {
             $file = null;
         }
         if (!$file instanceof ProjectFile) {
             $file = new ProjectFile();
             $file->setFilename($doc_name);
             $file->setIsVisible(true);
             $file->setIsPrivate(false);
             $file->setIsImportant(false);
             $file->setCommentsEnabled(true);
             $file->setAnonymousCommentsEnabled(false);
             //$file->setCreatedOn(new DateTimeValue(time()) );
         }
         $sourcePath = $path . $doc_name;
         $handle = fopen($sourcePath, "r");
         $size = filesize($sourcePath);
         $file_content = fread($handle, $size);
         fclose($handle);
         $file_dt['name'] = $file->getFilename();
         $file_dt['size'] = strlen($file_content);
         $file_dt['tmp_name'] = $sourcePath;
         //TEMP_PATH . DIRECTORY_SEPARATOR . rand() ;
         $extension = trim(get_file_extension($sourcePath));
         $file_dt['type'] = Mime_Types::instance()->get_type($extension);
         if (!trim($file_dt['type'])) {
             $file_dt['type'] = 'text/html';
         }
         $file->save();
         $file->removeFromAllWorkspaces();
         $file->addToWorkspace($project);
         $old_revs = $file->getRevisions();
         foreach ($old_revs as $rev) {
             $rev->delete();
         }
         $revision = $file->handleUploadedFile($file_dt, true, '');
         $file_date = new DateTimeValue(filemtime($sourcePath));
         $revision->setCreatedOn($file_date);
         $revision->setUpdatedOn($file_date);
         $revision->save();
         $file->setCreatedOn($file_date);
         $file->setUpdatedOn($file_date);
         $file->save();
         $ws = $file->getWorkspaces();
         ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_ADD);
         ImportLogger::instance()->log("   File: {$doc_name} [{$ws_id}]");
         print "   File: {$doc_name} [{$ws_id}]\r\n";
         DB::commit();
     } catch (Exception $e) {
         DB::rollback();
         ImportLogger::instance()->logError("{$e}\r\n**************************************************");
         print "\r\n\r\nERROR: {$e}\r\n";
     }
 }
 function save_spreadsheet()
 {
     if (logged_user()->isGuest()) {
         flash_error(lang('no access permissions'));
         ajx_current("empty");
         return;
     }
     ajx_current("empty");
     $id = get_id();
     $file_content = array_var($_GET, "book");
     $name = trim(array_var($_GET, 'name', ''));
     if ($id > 0) {
         //edit spreadsheet
         if ($name == '') {
             $name = $file->getFilename();
         }
         try {
             $file = ProjectFiles::findById(get_id());
             if (!$file->canEdit(logged_user())) {
                 flash_error(lang('no access permissions'));
                 ajx_current("empty");
                 return;
             }
             // if
             DB::beginWork();
             $file->setFilename($name);
             $post_revision = true;
             $revision_comment = '';
             $file_dt['name'] = $name;
             $file_dt['size'] = strlen($file_content);
             $file_dt['type'] = 'sprd';
             $file_dt['tmp_name'] = ROOT . '/tmp/' . rand();
             $handler = fopen($file_dt['tmp_name'], 'w');
             fputs($handler, $file_content);
             fclose($handler);
             $file->save();
             $file->handleUploadedFile($file_dt, $post_revision, $revision_comment);
             $ws = $file->getWorkspaces();
             ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_EDIT);
             DB::commit();
             unlink($file_dt['tmp_name']);
             flash_success(lang('success save file', $file->getFilename()));
             ajx_add("overview-panel", "reload");
             ajx_extra_data(array("sprdID" => $file->getId()));
         } catch (Exception $e) {
             DB::rollback();
             unlink($file_dt['tmp_name']);
             tpl_assign('error', $e);
             flash_error(lang('error while saving'));
         }
         // try
     } else {
         //new spreadsheet
         if ($name == '') {
             $name = lang('new spreadsheet');
         }
         try {
             if (!ProjectFile::canAdd(logged_user(), active_or_personal_project())) {
                 flash_error(lang('no access permissions'));
                 $this->redirectToReferer(get_url('files'));
                 return;
             }
             // if
             // create the file object
             $file = new ProjectFile();
             $file->setFilename($name);
             $file->setIsVisible(true);
             $file->setIsPrivate(false);
             $file->setIsImportant(false);
             $file->setCommentsEnabled(true);
             $file->setAnonymousCommentsEnabled(false);
             //seteo esto para despues setear atributos
             $file_dt['name'] = $name;
             $file_dt['size'] = strlen($file_content);
             $file_dt['type'] = 'sprd';
             $file_dt['tmp_name'] = ROOT . '/tmp/' . rand();
             $handler = fopen($file_dt['tmp_name'], 'w');
             fputs($handler, $file_content);
             fclose($handler);
             $file->setCreatedOn(new DateTimeValue(time()));
             DB::beginWork();
             $file->save();
             $file->subscribeUser(logged_user());
             $file->addToWorkspace(active_or_personal_project());
             $revision = $file->handleUploadedFile($file_dt, true);
             // handle uploaded file
             $ws = $file->getWorkspaces();
             ApplicationLogs::createLog($file, $ws, ApplicationLogs::ACTION_ADD);
             DB::commit();
             unlink($file_dt['tmp_name']);
             flash_success(lang('success add file', $file->getFilename()));
             ajx_extra_data(array("sprdID" => $file->getId()));
         } catch (Exception $e) {
             DB::rollback();
             tpl_assign('error', $e);
             tpl_assign('file', new ProjectFile());
             // reset file
             unlink($file_dt['tmp_name']);
             // if we uploaded the file remove it from repository
             if (isset($revision) && $revision instanceof ProjectFileRevision && FileRepository::isInRepository($revision->getRepositoryId())) {
                 FileRepository::deleteFile($revision->getRepositoryId());
             }
             // if
             flash_error(lang('error while saving'));
         }
         // try
     }
     //new spreadsheet
 }