/** set up tests */
 public function setUp()
 {
     $this->setupDatabase(array('default'));
     $this->_models = array('User', 'Item', 'Bitstream');
     $this->_components = array('Export', 'Upload');
     $this->enabledModules = array('batchmake', 'api');
     $this->cwd = getcwd();
     parent::setUp();
     if (!isset($this->executeComponent)) {
         require_once BASE_PATH . '/modules/batchmake/controllers/components/ExecuteComponent.php';
         $this->executeComponent = new Batchmake_ExecuteComponent();
     }
     if (!isset($this->kwBatchmakeComponent)) {
         require_once BASE_PATH . '/modules/batchmake/controllers/components/KWBatchmakeComponent.php';
         require_once BASE_PATH . '/modules/batchmake/tests/library/ExecutorMock.php';
         $executor = new Batchmake_ExecutorMock();
         $this->kwBatchmakeComponent = new Batchmake_KWBatchmakeComponent($this->setupAndGetConfig(), $executor);
     }
     // upload a file for testing of the exports
     $tmpDir = $this->getTempDirectory() . '/' . $this->testTmpDir;
     // use UploadComponent
     require_once BASE_PATH . '/core/controllers/components/UploadComponent.php';
     $uploadComponent = new UploadComponent();
     // notifier is required in ItemRevisionModelBase::addBitstream, create a fake one
     Zend_Registry::set('notifier', new MIDAS_Notifier(false, null));
     // create a directory for testing the export component
     if (file_exists($tmpDir)) {
         if (!KWUtils::recursiveRemoveDirectory($tmpDir)) {
             throw new Zend_Exception($tmpDir . ' already exists and cannot be deleted.');
         }
     }
     if (!mkdir($tmpDir)) {
         throw new Zend_Exception('Cannot create directory: ' . $tmpDir);
     }
     chmod($tmpDir, 0777);
     // upload an item to user1's public folder
     $user1_public_path = $tmpDir . '/public.file';
     copy(BASE_PATH . '/tests/testfiles/search.png', $user1_public_path);
     $user1_public_fh = fopen($user1_public_path, 'a+');
     fwrite($user1_public_fh, 'content:user1_public');
     fclose($user1_public_fh);
     $user1_public_filename = 'public.file';
     $usersFile = $this->loadData('User', 'default');
     $userDao = $this->User->load($usersFile[0]->getKey());
     $user1_public_parent = '1001';
     $license = 0;
     $this->tmpItem = $uploadComponent->createUploadedItem($userDao, $user1_public_filename, $user1_public_path, $user1_public_parent, $license, '', true);
     parent::setUp();
 }
 public function deleteOld($filename)
 {
     parent::deleteOld($filename);
     if ($this->thumbnailScale) {
         parent::deleteOld($filename, $this->thumbnailPath);
     }
 }
Esempio n. 3
0
 /**
  * Helper function to upload items.
  *
  * @param type $userDao User who will upload items
  */
 public function uploadItems($userDao)
 {
     // use UploadComponent
     require_once BASE_PATH . '/core/controllers/components/UploadComponent.php';
     $uploadCompoenent = new UploadComponent();
     // notifier is required in ItemRevisionModelBase::addBitstream, create a fake one
     Zend_Registry::set('notifier', new MIDAS_Notifier(false, null));
     // create a directory for testing the export component
     $midas_exporttest_dir = $this->getTempDirectory() . '/exportTest';
     if (file_exists($midas_exporttest_dir)) {
         if (!KWUtils::recursiveRemoveDirectory($midas_exporttest_dir)) {
             throw new Zend_Exception($midas_exporttest_dir . ' has already existed and we cannot delete it.');
         }
     }
     if (!mkdir($midas_exporttest_dir)) {
         throw new Zend_Exception('Cannot create directory: ' . $midas_exporttest_dir);
     }
     chmod($midas_exporttest_dir, 0777);
     // upload an item to user1's public folder
     $user1_public_path = $midas_exporttest_dir . '/public.file';
     copy(BASE_PATH . '/tests/testfiles/search.png', $user1_public_path);
     $user1_public_fh = fopen($user1_public_path, 'a+');
     fwrite($user1_public_fh, 'content:user1_public');
     fclose($user1_public_fh);
     $user1_public_filename = 'public.file';
     $user1_public_parent = '1001';
     $license = 0;
     $uploadCompoenent->createUploadedItem($userDao, $user1_public_filename, $user1_public_path, $user1_public_parent, $license, '', true);
     // upload an item to user1's private folder
     $user1_private_path = $midas_exporttest_dir . '/private.png';
     copy(BASE_PATH . '/tests/testfiles/search.png', $user1_private_path);
     $user1_private_fh = fopen($user1_private_path, 'a+');
     fwrite($user1_private_fh, 'content:user1_private');
     fclose($user1_private_fh);
     $user1_private_filename = 'private.png';
     $user1_private_parent = '1002';
     $license = 0;
     $uploadCompoenent->createUploadedItem($userDao, $user1_private_filename, $user1_private_path, $user1_private_parent, $license, '', true);
 }
 function admin_edit($vendor_id = null)
 {
     $vendor_id = DECRYPT_DATA($vendor_id);
     $this->layout = 'backend/backend';
     $this->set("title_for_layout", EDIT_VENDOR);
     if (!empty($this->data)) {
         $data = $this->data;
         $data['Vendor']['id'] = DECRYPT_DATA($data['Vendor']['id']);
         $errors = $this->Vendor->validate_data($data);
         if (count($errors) == 0) {
             if ($this->data['Vendor']['image']['name'] != "") {
                 App::import("Component", "Upload");
                 $upload = new UploadComponent();
                 $allowed_ext = array('jpg', 'jpeg', 'gif', 'png', 'JPG', 'JPEG', 'GIF', 'PNG');
                 $path_info = pathinfo($this->data['Vendor']['image']['name']);
                 $file_extension = strtolower($path_info['extension']);
                 if (in_array($file_extension, $allowed_ext)) {
                     $file = $this->data['Vendor']['image'];
                     $thumb_directory_path = $this->create_directory("vendor_image_thumb");
                     $actual_directory_path = $this->create_directory("vendor_image_actual");
                     $filename = str_replace(array(" ", "."), "", md5(microtime())) . "." . $path_info['extension'];
                     $rules['type'] = 'resizecrop';
                     $rules['size'] = array(75, 50);
                     if (file_exists($thumb_directory_path . $data['Vendor']['previous_image'])) {
                         unlink($thumb_directory_path . $data['Vendor']['previous_image']);
                     }
                     if (file_exists($actual_directory_path . $data['Vendor']['previous_image'])) {
                         unlink($actual_directory_path . $data['Vendor']['previous_image']);
                     }
                     $file_name = $upload->upload($file, $thumb_directory_path, $filename, $rules, $allowed_ext);
                     $file_name = $upload->upload($file, $actual_directory_path, $filename, null, $allowed_ext);
                     if ($file_name) {
                         unset($data['Vendor']['previous_image']);
                         $data['Vendor']['image'] = $filename;
                         if ($this->Vendor->save($data)) {
                             $this->Session->setFlash(RECORD_SAVE, 'message/green');
                             $this->redirect(array('controller' => "vendors", 'action' => 'list', 'admin' => true));
                         } else {
                             $this->Session->setFlash(RECORD_ERROR, 'message/red');
                             $this->redirect($this->referer());
                         }
                     }
                 } else {
                     $errors['image'][] = ERR_IMAGE_TYPE;
                 }
             } else {
                 unset($data['Vendor']['image']);
                 unset($data['Vendor']['previous_image']);
                 if ($this->Vendor->save($data)) {
                     $this->Session->setFlash(RECORD_SAVE, 'message/green');
                     $this->redirect(array("controller" => "vendors", "action" => "list", "admin" => true));
                 } else {
                     $this->Session->setFlash(RECORD_ERROR, 'message/red');
                     $this->redirect(array("controller" => "vendors", "action" => "edit", $this->data['Vendor']['id'], "admin" => true));
                 }
             }
         }
         $this->set("errors", $errors);
     } else {
         if (isset($vendor_id)) {
             if ($this->is_id_exist($vendor_id, "Vendor")) {
                 $this->Vendor->id = $vendor_id;
                 $data = $this->Vendor->read();
                 $data['Vendor']['id'] = ENCRYPT_DATA($data['Vendor']['id']);
                 $this->data = $data;
             } else {
                 $this->Session->setFlash(NOT_FOUND_ERROR, 'message/red');
                 $this->redirect(array("controller" => "products", 'action' => 'list', 'admin' => true));
                 exit;
             }
         }
     }
 }
 function admin_upload_coupon_csv()
 {
     $this->layout = "backend/product";
     $this->set("title_for_layout", UPLOAD_COUPON);
     App::import("Model", "Category");
     $this->Category = new Category();
     $fields = array("Category.id", "Category.title");
     $category_data = $this->Category->find("all", array("conditions" => array("Category.is_deleted" => 0), "order" => "Category.title asc", "fields" => $fields, "contain" => array("Product" => array("conditions" => array("Product.is_deleted" => 0), 'fields' => array("Product.id", "Product.title")))));
     $this->set("category_data", $category_data);
     if (!empty($this->data)) {
         $errors = array();
         if ($this->data['Coupon']['product_id'] != "" && $this->data['Coupon']['category_id'] != "" && $this->data['Coupon']['category_title'] != "" && $this->data['Coupon']['csv_file']['name'] != "") {
             App::import("Component", "Upload");
             $upload = new UploadComponent();
             $file = $this->data['Coupon']['csv_file'];
             $name = $this->data['Coupon']['csv_file']['name'];
             $path_info = pathinfo($this->data['Coupon']['csv_file']['name']);
             $file_extension = strtolower($path_info['extension']);
             if ($file_extension == 'csv') {
                 $directory_path = $this->create_directory("coupon_csv_upload");
                 $file_name = $upload->upload($file, $directory_path, $name, null, array($file_extension));
                 if ($file_name) {
                     $result = $this->Coupon->save_csv($directory_path . $name, $this->data);
                     if ($result) {
                         unlink($directory_path . $name);
                         $this->Session->setFlash(RECORD_SAVE, 'message/green');
                         $this->redirect(array("controller" => "coupons", "action" => "upload_coupon_csv", "admin" => true));
                     } else {
                         unlink($directory_path . $name);
                         $errors['Product'][] = WRONG_PRODUCT_CATEGORY;
                         $this->set("errors", $errors);
                     }
                 } else {
                     $errors['Product'][] = NOT_UPLODED_CSV;
                     $this->set("errors", $errors);
                 }
             } else {
                 $errors['Product'][] = ERR_COUPON_CSV;
                 $this->set("errors", $errors);
             }
         } else {
             if ($this->data['Coupon']['product_id'] == "" && $this->data['Coupon']['category_id'] == "") {
                 $errors['Product'][] = ERR_PRODUCT_CATEGORY_EMPTY;
             }
             if ($this->data['Coupon']['csv_file']['name'] == "") {
                 $errors['Product'][] = ERR_COUPON_CSV;
             }
         }
         $this->set("errors", $errors);
     }
 }
 /**
  * Function to create the items.
  *
  * @param int $collectionId
  * @param int $parentFolderid
  */
 private function _createFolderForItem($collectionId, $parentFolderid)
 {
     /** @var FolderModel $Folder */
     $Folder = MidasLoader::loadModel('Folder');
     /** @var ItemModel $Item */
     $Item = MidasLoader::loadModel('Item');
     /** @var ItemRevisionModel $ItemRevision */
     $ItemRevision = MidasLoader::loadModel('ItemRevision');
     /** @var GroupModel $Group */
     $Group = MidasLoader::loadModel('Group');
     /** @var AssetstoreModel $Assetstore */
     $Assetstore = MidasLoader::loadModel('Assetstore');
     /** @var FolderpolicygroupModel $Folderpolicygroup */
     $Folderpolicygroup = MidasLoader::loadModel('Folderpolicygroup');
     /** @var FolderpolicyuserModel $Folderpolicyuser */
     $Folderpolicyuser = MidasLoader::loadModel('Folderpolicyuser');
     /** @var ItempolicygroupModel $Itempolicygroup */
     $Itempolicygroup = MidasLoader::loadModel('Itempolicygroup');
     /** @var ItempolicyuserModel $Itempolicyuser */
     $Itempolicyuser = MidasLoader::loadModel('Itempolicyuser');
     /** @var UserModel $User */
     $User = MidasLoader::loadModel('User');
     $colquery = pg_query('SELECT i.item_id, mtitle.text_value AS title, mabstract.text_value AS abstract ' . 'FROM item AS i ' . 'LEFT JOIN metadatavalue AS mtitle ON (i.item_id = mtitle.item_id AND mtitle.metadata_field_id = 64) ' . 'LEFT JOIN metadatavalue AS mabstract ON (i.item_id = mabstract.item_id AND mabstract.metadata_field_id = 27) ' . 'WHERE i.owning_collection=' . $collectionId);
     while ($colquery_array = pg_fetch_array($colquery)) {
         $item_id = $colquery_array['item_id'];
         $title = $colquery_array['title'];
         // If title is empty we skip this item
         if (empty($title)) {
             continue;
         }
         $abstract = $colquery_array['abstract'];
         $folderDao = false;
         try {
             // Create the folder for the item
             $folderDao = $Folder->createFolder($title, $abstract, $parentFolderid);
             // Assign the policies to the folder as the same as the parent folder
             $folder = $Folder->load($parentFolderid);
             $policyGroup = $folder->getFolderpolicygroup();
             $policyUser = $folder->getFolderpolicyuser();
             foreach ($policyGroup as $policy) {
                 $group = $policy->getGroup();
                 $policyValue = $policy->getPolicy();
                 $Folderpolicygroup->createPolicy($group, $folderDao, $policyValue);
             }
             foreach ($policyUser as $policy) {
                 $user = $policy->getUser();
                 $policyValue = $policy->getPolicy();
                 $Folderpolicyuser->createPolicy($user, $folderDao, $policyValue);
             }
             // Add specific policies for users (not dealing with groups)
             $policyquery = pg_query('SELECT max(action_id) AS actionid, eperson.eperson_id, eperson.email
                             FROM resourcepolicy
                             LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
                              WHERE epersongroup_id IS NULL AND resource_type_id=' . MIDAS2_RESOURCE_ITEM . ' AND resource_id=' . $item_id . ' GROUP BY eperson.eperson_id, email');
             while ($policyquery_array = pg_fetch_array($policyquery)) {
                 $actionid = $policyquery_array['actionid'];
                 $email = $policyquery_array['email'];
                 if ($actionid > 1) {
                     $policyValue = MIDAS_POLICY_ADMIN;
                 } elseif ($actionid == 1) {
                     $policyValue = MIDAS_POLICY_WRITE;
                 } else {
                     $policyValue = MIDAS_POLICY_READ;
                 }
                 $userDao = $User->getByEmail($email);
                 $Folderpolicyuser->createPolicy($userDao, $folderDao, $policyValue);
             }
         } catch (Zend_Exception $e) {
             $this->getLogger()->info($e->getMessage());
             Zend_Debug::dump($e);
             // we continue
         }
         if ($folderDao) {
             // Create the item from the bitstreams
             $bitquery = pg_query('SELECT   b.bitstream_id, b.name, b.description, b.internal_id FROM bitstream AS b, item2bitstream AS i2b ' . 'WHERE i2b.bitstream_id = b.bitstream_id AND i2b.item_id=' . $item_id);
             while ($bitquery_array = pg_fetch_array($bitquery)) {
                 $filename = $bitquery_array['name'];
                 $itemdao = new ItemDao();
                 $itemdao->setName($filename);
                 // Get the number of downloads and set it
                 $itemstatsquery = pg_query('SELECT downloads from midas_resourcelog WHERE
                                   resource_id_type=' . MIDAS2_RESOURCE_ITEM . ' AND resource_id=' . $item_id);
                 $itemstats_array = pg_fetch_array($itemstatsquery);
                 if ($itemstats_array) {
                     $itemdao->setView($itemstats_array['downloads']);
                     $itemdao->setDownload($itemstats_array['downloads']);
                 }
                 $Item->save($itemdao);
                 // Just check if the group anonymous can access the item
                 $policyquery = pg_query('SELECT policy_id FROM resourcepolicy WHERE resource_type_id=' . MIDAS2_RESOURCE_ITEM . ' AND resource_id=' . $item_id . ' AND epersongroup_id=0');
                 if (pg_num_rows($policyquery) > 0) {
                     $anonymousGroup = $Group->load(MIDAS_GROUP_ANONYMOUS_KEY);
                     $Itempolicygroup->createPolicy($anonymousGroup, $itemdao, MIDAS_POLICY_READ);
                 }
                 // Add specific policies for users
                 $policyquery = pg_query('SELECT max(action_id) AS actionid, eperson.eperson_id, eperson.email
                               FROM resourcepolicy
                               LEFT JOIN eperson ON (eperson.eperson_id=resourcepolicy.eperson_id)
                                WHERE epersongroup_id IS NULL AND resource_type_id=' . MIDAS2_RESOURCE_ITEM . ' AND resource_id=' . $item_id . ' GROUP BY eperson.eperson_id, email');
                 while ($policyquery_array = pg_fetch_array($policyquery)) {
                     $actionid = $policyquery_array['actionid'];
                     $email = $policyquery_array['email'];
                     if ($actionid > 1) {
                         $policyValue = MIDAS_POLICY_ADMIN;
                     } elseif ($actionid == 1) {
                         $policyValue = MIDAS_POLICY_WRITE;
                     } else {
                         $policyValue = MIDAS_POLICY_READ;
                     }
                     $userDao = $User->getByEmail($email);
                     // Set the policy of the item
                     $Itempolicyuser->createPolicy($userDao, $itemdao, $policyValue);
                 }
                 // Add the item to the current directory
                 $Folder->addItem($folderDao, $itemdao);
                 // Create a revision for the item
                 $itemRevisionDao = new ItemRevisionDao();
                 $itemRevisionDao->setChanges('Initial revision');
                 $itemRevisionDao->setUser_id($this->userId);
                 $Item->addRevision($itemdao, $itemRevisionDao);
                 // Add the metadata
                 /** @var MetadataModel $MetadataModel */
                 $MetadataModel = MidasLoader::loadModel('Metadata');
                 //
                 $metadataquery = pg_query('SELECT metadata_field_id, text_value FROM metadatavalue WHERE item_id=' . $item_id);
                 while ($metadata_array = pg_fetch_array($metadataquery)) {
                     $text_value = $metadata_array['text_value'];
                     $metadata_field_id = $metadata_array['metadata_field_id'];
                     // Do not check 64 and 27 because they are stored as field and not metadata
                     // in MIDAS3
                     switch ($metadata_field_id) {
                         case 3:
                             $element = 'contributor';
                             $qualifier = 'author';
                             break;
                         case 11:
                             $element = 'date';
                             $qualifier = 'uploaded';
                             break;
                         case 14:
                             $element = 'date';
                             $qualifier = 'created';
                             break;
                         case 15:
                             $element = 'date';
                             $qualifier = 'issued';
                             break;
                         case 18:
                             $element = 'identifier';
                             $qualifier = 'citation';
                             break;
                         case 25:
                             $element = 'identifier';
                             $qualifier = 'uri';
                             break;
                         case 26:
                             $element = 'description';
                             $qualifier = 'general';
                             break;
                         case 28:
                             $element = 'description';
                             $qualifier = 'provenance';
                             break;
                         case 29:
                             $element = 'description';
                             $qualifier = 'sponsorship';
                             break;
                         case 39:
                             $element = 'description';
                             $qualifier = 'publisher';
                             break;
                         case 57:
                             $element = 'subject';
                             $qualifier = 'keyword';
                             break;
                         case 68:
                             $element = 'subject';
                             $qualifier = 'ocis';
                             break;
                         case 75:
                             $element = 'identifier';
                             $qualifier = 'pubmed';
                             break;
                         case 74:
                             $element = 'identifier';
                             $qualifier = 'doi';
                             break;
                         default:
                             $element = '';
                             $qualifier = '';
                     }
                     if ($element != '') {
                         $MetadataModel->addMetadataValue($itemRevisionDao, MIDAS_METADATA_TEXT, $element, $qualifier, $text_value);
                     }
                 }
                 // Add bitstreams to the revision
                 $bitstreamDao = new BitstreamDao();
                 $bitstreamDao->setName($filename);
                 // Compute the path from the internalid
                 // We are assuming only one assetstore
                 $internal_id = $bitquery_array['internal_id'];
                 $filepath = $this->midas2Assetstore . '/';
                 $filepath .= substr($internal_id, 0, 2) . '/';
                 $filepath .= substr($internal_id, 2, 2) . '/';
                 $filepath .= substr($internal_id, 4, 2) . '/';
                 $filepath .= $internal_id;
                 // Check that the file exists
                 if (file_exists($filepath)) {
                     // Upload the bitstream
                     $assetstoreDao = $Assetstore->load($this->assetstoreId);
                     $bitstreamDao->setPath($filepath);
                     $bitstreamDao->fillPropertiesFromPath();
                     $bitstreamDao->setAssetstoreId($this->assetstoreId);
                     $UploadComponent = new UploadComponent();
                     $UploadComponent->uploadBitstream($bitstreamDao, $assetstoreDao);
                     // Upload the bitstream if necessary (based on the assetstore type)
                     $ItemRevision->addBitstream($itemRevisionDao, $bitstreamDao);
                     unset($UploadComponent);
                 }
             }
         } else {
             echo 'Cannot create Folder for item: ' . $title . '<br>';
         }
     }
 }