/** 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); } }
/** * 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>'; } } }