Esempio n. 1
0
 /**
  * @return Zend_Db_Table_Rowset
  */
 public function getJobs($task = null)
 {
     //new records do not have jobs:
     if (null === $this->id) {
         return array();
     }
     $model = new OpenSKOS_Db_Table_Jobs();
     $select = $model->select()->where('collection=?', $this->id)->where('finished IS NULL')->order('created desc')->order('started asc');
     if (null !== $task) {
         $select->where('task = ?', $task);
     }
     return $model->fetchAll($select);
 }
 /**
  * Gets an array map for all concept schemes which has a delet job started (and not completed yet) for them.
  * @return array array(conceptSchemeUuid => deleteJobUuid)
  */
 protected function _getConceptSchemesWithDeleteJob()
 {
     $model = new OpenSKOS_Db_Table_Jobs();
     $conceptDeleteJobs = $model->fetchAll($model->select()->where('task = ?', OpenSKOS_Db_Table_Row_Job::JOB_TASK_DELETE_CONCEPT_SCHEME)->where('status IS NULL')->where('finished IS NULL'));
     $conceptSchemesDeleteJobsMap = array();
     foreach ($conceptDeleteJobs as $conceptDeleteJob) {
         $params = $conceptDeleteJob->getParams();
         if (!isset($conceptSchemesDeleteJobsMap[$params['uuid']])) {
             $conceptSchemesDeleteJobsMap[$params['uuid']] = $conceptDeleteJob->id;
         }
     }
     return $conceptSchemesDeleteJobsMap;
 }
Esempio n. 3
0
 /**
  * Creates an openskos background job to export with the given settings to a file.
  * 
  * @return int The job id
  */
 public function exportWithBackgroundJob()
 {
     $user = OpenSKOS_Db_Table_Users::requireById($this->get('userId'));
     $tenant = OpenSKOS_Db_Table_Tenants::fromCode($user->tenant);
     $tenantCollections = $tenant->findDependentRowset('OpenSKOS_Db_Table_Collections');
     if (!$tenantCollections->count()) {
         throw new Zend_Exception('Current tenant does not have any collections. At least one is required.', 404);
     }
     // We use the first collection of the tenant for the export job,
     // because the collection is important for the jobs, but the export is not related to any specific collection.
     $firstTenantCollection = $tenantCollections->current();
     $model = new OpenSKOS_Db_Table_Jobs();
     $job = $model->fetchNew()->setFromArray(array('collection' => $firstTenantCollection->id, 'user' => $user->id, 'task' => OpenSKOS_Db_Table_Row_Job::JOB_TASK_EXPORT, 'parameters' => serialize($this->getSettings()), 'created' => new Zend_Db_Expr('NOW()')))->save();
     return $job;
 }
 public function importAction()
 {
     $this->_requireAccess('editor.collections', 'manage');
     $collection = $this->_getCollection();
     if ($collection->OAI_baseURL) {
         $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('Since this collection has an OAI Server as source, you can not upload files for import.'));
         $this->_helper->redirector('edit', null, null, array('collection' => $collection->code));
         return;
     }
     $form = $collection->getUploadForm();
     $formData = $this->_request->getPost();
     if ($form->isValid($formData)) {
         $upload = new Zend_File_Transfer_Adapter_Http();
         $path = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getOption('upload_path');
         $tenant_path = $path . '/' . $collection->tenant;
         if (!is_dir($tenant_path)) {
             if (!@mkdir($tenant_path, 0777, true)) {
                 $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('Failed to create upload folder'));
                 $this->_helper->redirector('edit', null, null, array('collection' => $collection->code));
                 return;
             }
         }
         try {
             $fileName = uniqid() . '_' . $_FILES['xml']['name'];
             $upload->addFilter('Rename', array('target' => $tenant_path . '/' . $fileName, 'overwrite' => false))->receive();
         } catch (Zend_File_Transfer_Exception $e) {
             $form->getElement('xml')->setErrors(array($e->getMessage()));
             return $this->_forward('edit');
         } catch (Zend_Filter_Exception $e) {
             $form->getElement('xml')->setErrors(array(_('A file with that name is already scheduled for import. Please delete the job if you want to import it again.')));
             return $this->_forward('edit');
         }
         $model = new OpenSKOS_Db_Table_Jobs();
         $fileinfo = $upload->getFileInfo('xml');
         $parameters = array('name' => $fileName, 'type' => $fileinfo['xml']['type'], 'size' => $fileinfo['xml']['size'], 'destination' => $fileinfo['xml']['destination'], 'deletebeforeimport' => (int) $formData['deletebeforeimport'] == 1, 'status' => $formData['status'], 'ignoreIncomingStatus' => (int) $formData['ignoreIncomingStatus'] == 1, 'lang' => $formData['lang'], 'toBeChecked' => (int) $formData['toBeChecked'] == 1, 'purge' => (int) $formData['purge'] == 1, 'onlyNewConcepts' => (int) $formData['onlyNewConcepts'] == 1, 'useUriAsIdentifier' => (int) $formData['useUriAsIdentifier'] == 1);
         $job = $model->fetchNew()->setFromArray(array('collection' => $collection->id, 'user' => Zend_Auth::getInstance()->getIdentity()->id, 'task' => OpenSKOS_Db_Table_Row_Job::JOB_TASK_IMPORT, 'parameters' => serialize($parameters), 'created' => new Zend_Db_Expr('NOW()')))->save();
     } else {
         return $this->_forward('edit');
     }
     $this->getHelper('FlashMessenger')->addMessage(_('An import job is scheduled'));
     $this->_helper->redirector('edit', null, null, array('collection' => $collection->code));
 }
Esempio n. 5
0
                 try {
                     $response = Api_Models_Concepts::factory()->getConcepts('uuid:' . $job->getParam('uuid'));
                     if (!isset($response['response']['docs']) || 1 !== count($response['response']['docs'])) {
                         throw new Zend_Exception('The requested concept scheme was not found');
                     }
                     $conceptScheme = new Editor_Models_ConceptScheme(new Api_Models_Concept(array_shift($response['response']['docs'])));
                     $conceptScheme->delete(true, $job['user']);
                     // Clears the schemes cache after the scheme is removed.
                     OpenSKOS_Cache::getCache()->remove(Editor_Models_ApiClient::CONCEPT_SCHEMES_CACHE_KEY);
                     $model = new OpenSKOS_Db_Table_Jobs();
                     // Gets new DB object to prevent connection time out.
                     $job = $model->find($job->id)->current();
                     // Gets new DB object to prevent connection time out.
                     $job->finish()->save();
                 } catch (Zend_Exception $e) {
                     $model = new OpenSKOS_Db_Table_Jobs();
                     // Gets new DB object to prevent connection time out.
                     $job = $model->find($job->id)->current();
                     // Gets new DB object to prevent connection time out.
                     fwrite(STDERR, $job->id . ': ' . $e->getMessage() . "\n");
                     $job->error($e->getMessage())->finish()->save();
                 }
                 break;
             default:
                 fwrite(STDERR, '@TODO: write handler for task=' . $job->task . "\n");
                 $job->error('No handler for this task')->finish()->save();
                 break;
         }
     }
 }
 break;
 /**
  * @return OpenSKOS_Db_Table_Row_Job
  */
 protected function _getJob($id = null)
 {
     if (null === $id) {
         if (null === ($id = $this->getRequest()->getParam('job'))) {
             $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('No job defined'));
             $this->_helper->redirector('index');
         }
     }
     $model = new OpenSKOS_Db_Table_Jobs();
     $job = $model->find($id)->current();
     if (null === $job) {
         $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('Job not found'));
         $this->_helper->redirector('index');
     }
     $collection = $job->getCollection();
     if (null === $collection) {
         $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('Collection not found'));
         $this->_helper->redirector('index');
     }
     if ($collection->tenant != $this->_tenant->code) {
         $this->getHelper('FlashMessenger')->setNamespace('error')->addMessage(_('You are not allowed to edit this job.'));
         $this->_helper->redirector('index');
     }
     return $job;
 }