public function clearMemory() { accessControlPeer::clearInstancePool(); BatchJobPeer::clearInstancePool(); BulkUploadResultPeer::clearInstancePool(); categoryPeer::clearInstancePool(); EmailIngestionProfilePeer::clearInstancePool(); entryPeer::clearInstancePool(); FileSyncPeer::clearInstancePool(); flavorAssetPeer::clearInstancePool(); flavorParamsConversionProfilePeer::clearInstancePool(); flavorParamsOutputPeer::clearInstancePool(); flavorParamsPeer::clearInstancePool(); kshowPeer::clearInstancePool(); mediaInfoPeer::clearInstancePool(); moderationFlagPeer::clearInstancePool(); moderationPeer::clearInstancePool(); notificationPeer::clearInstancePool(); roughcutEntryPeer::clearInstancePool(); SchedulerConfigPeer::clearInstancePool(); SchedulerPeer::clearInstancePool(); SchedulerStatusPeer::clearInstancePool(); SchedulerWorkerPeer::clearInstancePool(); StorageProfilePeer::clearInstancePool(); syndicationFeedPeer::clearInstancePool(); TrackEntryPeer::clearInstancePool(); uiConfPeer::clearInstancePool(); UploadTokenPeer::clearInstancePool(); // TODO clear default filters // TODO call all memory cleaner plugins if (function_exists('gc_collect_cycles')) { // php 5.3 and above gc_collect_cycles(); } }
public function executeImpl($partner_id, $subp_id, $puser_id, $partner_prefix, $puser_kuser) { $limit = $this->getP("page_size", 20); $limit = min($limit, 100); $page = $this->getP("page", 1); $offset = ($page - 1) * $limit; $c = new Criteria(); $c->addAnd(BatchJobPeer::PARTNER_ID, $partner_id); $c->addAnd(BatchJobPeer::JOB_TYPE, BatchJobType::BULKUPLOAD); $c->addDescendingOrderByColumn(BatchJobPeer::ID); $count = BatchJobPeer::doCount($c); $c->setLimit($limit); $c->setOffset($offset); $jobs = BatchJobPeer::doSelect($c); $obj = array(); foreach ($jobs as $job) { $jobData = $job->getData(); if (!$jobData instanceof kBulkUploadJobData) { continue; } $bulkResults = BulkUploadResultPeer::retrieveWithEntryByBulkUploadId($job->getId()); $obj[] = array("uploadedBy" => $jobData->getUploadedBy(), "uploadedOn" => $job->getCreatedAt(null), "numOfEntries" => count($bulkResults), "status" => $job->getStatus(), "error" => $job->getStatus() == BatchJob::BATCHJOB_STATUS_FAILED ? $job->getMessage() : '', "logFileUrl" => requestUtils::getCdnHost() . "/index.php/extwidget/bulkuploadfile/id/{$job->getId()}/pid/{$job->getPartnerId()}/type/log", "csvFileUrl" => requestUtils::getCdnHost() . "/index.php/extwidget/bulkuploadfile/id/{$job->getId()}/pid/{$job->getPartnerId()}/type/csv"); } $this->addMsg("count", $count); $this->addMsg("page_size", $limit); $this->addMsg("page", $page); $this->addMsg("bulk_uploads", $obj); }
public function execute() { $jobId = $this->getRequestParameter("id"); $partnerId = $this->getRequestParameter("pid"); $type = $this->getRequestParameter("type"); $c = new Criteria(); $c->addAnd(BatchJobPeer::ID, $jobId); $c->addAnd(BatchJobPeer::PARTNER_ID, $partnerId); $c->addAnd(BatchJobPeer::JOB_TYPE, BatchJobType::BULKUPLOAD); $batchJob = BatchJobPeer::doSelectOne($c); if (!$batchJob) { die("File not found"); } header("Content-Type: text/plain; charset=UTF-8"); if ($type == "log") { $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($jobId); if (!count($bulkUploadResults)) { $syncKey = $batchJob->getSyncKey(BatchJob::FILE_SYNC_BATCHJOB_SUB_TYPE_BULKUPLOADLOG); if (kFileSyncUtils::file_exists($syncKey, true)) { $content = kFileSyncUtils::file_get_contents($syncKey, true); echo $content; die; } die("Log file is not ready"); } $STDOUT = fopen('php://output', 'w'); $data = $batchJob->getData(); foreach ($bulkUploadResults as $bulkUploadResult) { $values = array($bulkUploadResult->getTitle(), $bulkUploadResult->getDescription(), $bulkUploadResult->getTags(), $bulkUploadResult->getUrl(), $bulkUploadResult->getContentType()); if ($data instanceof kBulkUploadJobData && $data->getCsvVersion() > kBulkUploadJobData::BULK_UPLOAD_CSV_VERSION_V1) { $values[] = $bulkUploadResult->getConversionProfileId(); $values[] = $bulkUploadResult->getAccessControlProfileId(); $values[] = $bulkUploadResult->getCategory(); $values[] = $bulkUploadResult->getScheduleStartDate('Y-m-d\\TH:i:s'); $values[] = $bulkUploadResult->getScheduleEndDate('Y-m-d\\TH:i:s'); $values[] = $bulkUploadResult->getThumbnailUrl(); $values[] = $bulkUploadResult->getPartnerData(); } $values[] = $bulkUploadResult->getEntryId(); $values[] = $bulkUploadResult->getEntryStatus(); $values[] = $bulkUploadResult->getErrorDescription(); fputcsv($STDOUT, $values); } fclose($STDOUT); } else { $syncKey = $batchJob->getSyncKey(BatchJob::FILE_SYNC_BATCHJOB_SUB_TYPE_BULKUPLOADCSV); if (kFileSyncUtils::file_exists($syncKey, true)) { $content = kFileSyncUtils::file_get_contents($syncKey, true); echo $content; die; } else { die("File not found"); } } die; // no template needed }
/** * Builds a Criteria object containing the primary key for this object. * * Unlike buildCriteria() this method includes the primary key values regardless * of whether or not they have been modified. * * @return Criteria The Criteria object containing value(s) for primary key(s). */ public function buildPkeyCriteria() { $criteria = new Criteria(BulkUploadResultPeer::DATABASE_NAME); $criteria->add(BulkUploadResultPeer::ID, $this->id); if ($this->alreadyInSave && count($this->modifiedColumns) == 2 && $this->isColumnModified(BulkUploadResultPeer::UPDATED_AT)) { $theModifiedColumn = null; foreach ($this->modifiedColumns as $modifiedColumn) { if ($modifiedColumn != BulkUploadResultPeer::UPDATED_AT) { $theModifiedColumn = $modifiedColumn; } } $atomicColumns = BulkUploadResultPeer::getAtomicColumns(); if (in_array($theModifiedColumn, $atomicColumns)) { $criteria->add($theModifiedColumn, $this->getByName($theModifiedColumn, BasePeer::TYPE_COLNAME), Criteria::NOT_EQUAL); } } return $criteria; }
/** * Retrieve multiple objects by pkey. * * @param array $pks List of primary keys * @param PropelPDO $con the connection to use * @throws PropelException Any exceptions caught during processing will be * rethrown wrapped into a PropelException. */ public static function retrieveByPKs($pks, PropelPDO $con = null) { $objs = null; if (empty($pks)) { $objs = array(); } else { $criteria = new Criteria(BulkUploadResultPeer::DATABASE_NAME); $criteria->add(BulkUploadResultPeer::ID, $pks, Criteria::IN); $objs = BulkUploadResultPeer::doSelect($criteria, $con); } return $objs; }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob */ public static function writeBulkUploadLogFile($batchJob) { if ($batchJob->getJobSubType() && $batchJob->getJobSubType() != self::getBulkUploadTypeCoreValue(BulkUploadCsvType::CSV)) { return; } header("Content-Type: text/plain; charset=UTF-8"); $criteria = new Criteria(); $criteria->add(BulkUploadResultPeer::BULK_UPLOAD_JOB_ID, $batchJob->getId()); $criteria->addAscendingOrderByColumn(BulkUploadResultPeer::LINE_INDEX); $criteria->setLimit(100); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); if (!count($bulkUploadResults)) { die("Log file is not ready"); } $STDOUT = fopen('php://output', 'w'); $data = $batchJob->getData(); /* @var $data kBulkUploadJobData */ //Add header row to the output CSV only if partner level permission for it exists $partnerId = kCurrentContext::$partner_id ? kCurrentContext::$partner_id : kCurrentContext::$ks_partner_id; if (PermissionPeer::isValidForPartner(self::FEATURE_CSV_HEADER_ROW, $partnerId)) { $headerRow = $data->getColumns(); $headerRow[] = "resultStatus"; $headerRow[] = "objectId"; $headerRow[] = "objectStatus"; $headerRow[] = "errorDescription"; fputcsv($STDOUT, $headerRow); } $handledResults = 0; while (count($bulkUploadResults)) { $handledResults += count($bulkUploadResults); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $values = str_getcsv($bulkUploadResult->getRowData()); // switch ($bulkUploadResult->getObjectType()) // { // case BulkUploadObjectType::ENTRY: // $values = self::writeEntryBulkUploadResults($bulkUploadResult, $data); // break; // case BulkUploadObjectType::CATEGORY: // $values = self::writeCategoryBulkUploadResults($bulkUploadResult, $data); // break; // case BulkUploadObjectType::CATEGORY_USER: // $values = self::writeCategoryUserBulkUploadResults($bulkUploadResult, $data); // break; // case BulkUploadObjectType::USER: // $values = self::writeUserBulkUploadResults($bulkUploadResult, $data); // break; // default: // // break; // } $values[] = $bulkUploadResult->getStatus(); $values[] = $bulkUploadResult->getObjectId(); $values[] = $bulkUploadResult->getObjectStatus(); $values[] = preg_replace('/[\\n\\r\\t]/', ' ', $bulkUploadResult->getErrorDescription()); fputcsv($STDOUT, $values); } if (count($bulkUploadResults) < $criteria->getLimit()) { break; } kMemoryManager::clearMemory(); $criteria->setOffset($handledResults); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); } fclose($STDOUT); kFile::closeDbConnections(); exit; }
protected static function addBulkUploadResultDescription($entryId, $bulkUploadId, $description) { $bulkUploadResult = BulkUploadResultPeer::retrieveByEntryId($entryId, $bulkUploadId); if (!$bulkUploadResult) { KalturaLog::err("Bulk upload results not found for entry [{$entryId}]"); return; } $msg = $bulkUploadResult->getErrorDescription(); if ($msg) { $msg .= "\n"; } $msg .= $description; $bulkUploadResult->setErrorDescription($msg); $bulkUploadResult->save(); }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob * @return SimpleXMLElement */ public static function getBulkUploadMrssXml($batchJob) { $actionsMap = array(BulkUploadAction::ADD => 'add', BulkUploadAction::UPDATE => 'update', BulkUploadAction::DELETE => 'delete'); $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($batchJob->getId()); if (!count($bulkUploadResults)) { return null; } header("Content-Type: text/xml; charset=UTF-8"); $data = $batchJob->getData(); $xmlElement = new SimpleXMLElement('<mrss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'); $xmlElement->addAttribute('version', '2.0'); // $xmlElement->addAttribute('xmlns:content', 'http://www.w3.org/2001/XMLSchema-instance'); // $xmlElement->addAttribute('xmlns', 'http://' . kConf::get('www_host') . '/' . SchemaType::SYNDICATION); // $xmlElement->addAttribute('xsi:noNamespaceSchemaLocation', 'http://' . kConf::get('cdn_host') . '/api_v3/service/schema/action/serve/type/' . SchemaType::SYNDICATION); $channel = $xmlElement->addChild('channel'); // insert all entries to instance pool $pks = array(); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $pks[] = $bulkUploadResult->getEntryId(); } entryPeer::retrieveByPKs($pks); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $item = $channel->addChild('item'); $result = $item->addChild('result'); $result->addChild('errorDescription', self::stringToSafeXml($bulkUploadResult->getErrorDescription())); // $result->addChild('entryStatus', self::stringToSafeXml($bulkUploadResult->getEntryStatus())); // $result->addChild('entryStatusName', self::stringToSafeXml($title)); $action = isset($actionsMap[$bulkUploadResult->getAction()]) ? $actionsMap[$bulkUploadResult->getAction()] : $actionsMap[BulkUploadAction::ADD]; $item->addChild('action', $action); $entry = $bulkUploadResult->getObject(); if (!$entry) { continue; } kMrssManager::getEntryMrssXml($entry, $item); } return $xmlElement; }
/** * Add description of an error to the BulkUploadResult of the object in question * @param BaseObject $object * @param string $bulkUploadId * @param string $description */ protected static function addBulkUploadResultDescription(BaseObject $object, $bulkUploadId, $description) { $objectPeerClass = get_class($object->getPeer()); $objectType = strtoupper(constant("{$objectPeerClass}::OM_CLASS")); if ($objectType == 'KUSER') { $objectType = 'USER'; } $bulkUploadResult = BulkUploadResultPeer::retrieveByObjectId($object->getId(), constant("BulkUploadObjectType::{$objectType}"), $bulkUploadId); if (!$bulkUploadResult) { KalturaLog::err("Bulk upload results not found for object [{$object->getId()}]"); return; } $msg = $bulkUploadResult->getErrorDescription(); if ($msg) { $msg .= "\n"; } $msg .= $description; $bulkUploadResult->setErrorDescription($msg); $bulkUploadResult->save(); }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob */ public static function writeBulkUploadLogFile($batchJob) { if ($batchJob->getJobSubType() && $batchJob->getJobSubType() != self::getBulkUploadTypeCoreValue(BulkUploadFilterType::FILTER)) { return; } //TODO: header("Content-Type: text/plain; charset=UTF-8"); $criteria = new Criteria(); $criteria->add(BulkUploadResultPeer::BULK_UPLOAD_JOB_ID, $batchJob->getId()); $criteria->addAscendingOrderByColumn(BulkUploadResultPeer::LINE_INDEX); $criteria->setLimit(100); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); if (!count($bulkUploadResults)) { die("Log file is not ready"); } $STDOUT = fopen('php://output', 'w'); $data = $batchJob->getData(); /* @var $data kBulkUploadFilterJobData */ $handledResults = 0; while (count($bulkUploadResults)) { $handledResults += count($bulkUploadResults); foreach ($bulkUploadResults as $bulkUploadResult) { $values = array(); $values['bulkUploadResultStatus'] = $bulkUploadResult->getStatus(); $values['objectId'] = $bulkUploadResult->getObjectId(); $values['objectStatus'] = $bulkUploadResult->getObjectStatus(); $values['errorDescription'] = preg_replace('/[\\n\\r\\t]/', ' ', $bulkUploadResult->getErrorDescription()); fwrite($STDOUT, print_r($values, true)); } if (count($bulkUploadResults) < $criteria->getLimit()) { break; } kMemoryManager::clearMemory(); $criteria->setOffset($handledResults); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); } fclose($STDOUT); kFile::closeDbConnections(); exit; }
/** * batch updateBulkUploadResults action adds KalturaBulkUploadResult to the DB * * @action updateBulkUploadResults * @param int $bulkUploadJobId The id of the bulk upload job * @return int the number of unclosed entries */ function updateBulkUploadResultsAction($bulkUploadJobId) { $closedStatuses = array(KalturaEntryStatus::ERROR_IMPORTING, KalturaEntryStatus::ERROR_CONVERTING, KalturaEntryStatus::READY, KalturaEntryStatus::DELETED); $unclosedEntries = array(); $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($bulkUploadJobId); $bulkUpload = BatchJobPeer::retrieveByPK($bulkUploadJobId); if ($bulkUpload) { $data = $bulkUpload->getData(); if ($data && $data instanceof kBulkUploadJobData) { $data->setNumOfEntries(count($bulkUploadResults)); $bulkUpload->setData($data); $bulkUpload->save(); } } foreach ($bulkUploadResults as $bulkUploadResult) { $status = $bulkUploadResult->updateStatusFromEntry(); if (in_array($bulkUploadResult->getEntryStatus(), $closedStatuses)) { $this->updateEntryThumbnail($bulkUploadResult); continue; } if (in_array($status, $closedStatuses)) { continue; } $unclosedEntries[$bulkUploadResult->getEntryId()] = $status; } return count($unclosedEntries); }
/** * batch updateBulkUploadResults action adds KalturaBulkUploadResult to the DB * * @action updateBulkUploadResults * @param int $bulkUploadJobId The id of the bulk upload job * @return int the number of unclosed entries */ function updateBulkUploadResultsAction($bulkUploadJobId) { $unclosedEntriesCount = 0; $errorObjects = 0; $unclosedEntries = array(); $criteria = new Criteria(); $criteria->add(BulkUploadResultPeer::BULK_UPLOAD_JOB_ID, $bulkUploadJobId); $criteria->addAscendingOrderByColumn(BulkUploadResultPeer::LINE_INDEX); $criteria->setLimit(100); $bulkUpload = BatchJobPeer::retrieveByPK($bulkUploadJobId); if ($bulkUpload) { $handledResults = 0; $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); while (count($bulkUploadResults)) { $handledResults += count($bulkUploadResults); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $status = $bulkUploadResult->updateStatusFromObject(); if ($status == BulkUploadResultStatus::IN_PROGRESS) { $unclosedEntriesCount++; } if ($status == BulkUploadResultStatus::ERROR) { $errorObjects++; } } if (count($bulkUploadResults) < $criteria->getLimit()) { break; } kMemoryManager::clearMemory(); $criteria->setOffset($handledResults); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); } $data = $bulkUpload->getData(); if ($data && $data instanceof kBulkUploadJobData) { //TODO: find some better alternative, find out why the bulk upload result which reports error is // returning objectId "null" for failed entry assets, rather than the entryId to which they pertain. //$data->setNumOfEntries(BulkUploadResultPeer::countWithEntryByBulkUploadId($bulkUploadJobId)); $data->setNumOfObjects(BulkUploadResultPeer::countWithObjectTypeByBulkUploadId($bulkUploadJobId, $data->getBulkUploadObjectType())); $data->setNumOfErrorObjects($errorObjects); $bulkUpload->setData($data); $bulkUpload->save(); } } return $unclosedEntriesCount; }
public static function clearMemory() { accessControlPeer::clearInstancePool(); kuserPeer::clearInstancePool(); kshowPeer::clearInstancePool(); entryPeer::clearInstancePool(); // kvotePeer::clearInstancePool(); // commentPeer::clearInstancePool(); // flagPeer::clearInstancePool(); // favoritePeer::clearInstancePool(); // KshowKuserPeer::clearInstancePool(); // MailJobPeer::clearInstancePool(); SchedulerPeer::clearInstancePool(); SchedulerWorkerPeer::clearInstancePool(); SchedulerStatusPeer::clearInstancePool(); SchedulerConfigPeer::clearInstancePool(); ControlPanelCommandPeer::clearInstancePool(); BatchJobPeer::clearInstancePool(); // PriorityGroupPeer::clearInstancePool(); BulkUploadResultPeer::clearInstancePool(); // blockedEmailPeer::clearInstancePool(); // conversionPeer::clearInstancePool(); // flickrTokenPeer::clearInstancePool(); PuserKuserPeer::clearInstancePool(); // PuserRolePeer::clearInstancePool(); PartnerPeer::clearInstancePool(); // WidgetLogPeer::clearInstancePool(); // adminKuserPeer::clearInstancePool(); // notificationPeer::clearInstancePool(); moderationPeer::clearInstancePool(); moderationFlagPeer::clearInstancePool(); roughcutEntryPeer::clearInstancePool(); // widgetPeer::clearInstancePool(); uiConfPeer::clearInstancePool(); // PartnerStatsPeer::clearInstancePool(); // PartnerActivityPeer::clearInstancePool(); ConversionProfilePeer::clearInstancePool(); // ConversionParamsPeer::clearInstancePool(); // KceInstallationErrorPeer::clearInstancePool(); FileSyncPeer::clearInstancePool(); accessControlPeer::clearInstancePool(); mediaInfoPeer::clearInstancePool(); assetParamsPeer::clearInstancePool(); assetParamsOutputPeer::clearInstancePool(); assetPeer::clearInstancePool(); conversionProfile2Peer::clearInstancePool(); flavorParamsConversionProfilePeer::clearInstancePool(); categoryPeer::clearInstancePool(); syndicationFeedPeer::clearInstancePool(); TrackEntryPeer::clearInstancePool(); // SystemUserPeer::clearInstancePool(); StorageProfilePeer::clearInstancePool(); // EmailIngestionProfilePeer::clearInstancePool(); UploadTokenPeer::clearInstancePool(); // invalidSessionPeer::clearInstancePool(); DynamicEnumPeer::clearInstancePool(); UserLoginDataPeer::clearInstancePool(); PermissionPeer::clearInstancePool(); UserRolePeer::clearInstancePool(); PermissionItemPeer::clearInstancePool(); PermissionToPermissionItemPeer::clearInstancePool(); KuserToUserRolePeer::clearInstancePool(); $pluginInstances = KalturaPluginManager::getPluginInstances('IKalturaMemoryCleaner'); foreach ($pluginInstances as $pluginInstance) { $pluginInstance->cleanMemory(); } if (function_exists('gc_collect_cycles')) { // php 5.3 and above gc_collect_cycles(); } }
} if (isset($argv[3])) { $c->addAnd(BulkUploadResultPeer::UPDATED_AT, $argv[3], Criteria::GREATER_EQUAL); } $c->addAscendingOrderByColumn(BulkUploadResultPeer::UPDATED_AT); $c->setLimit($countLimitEachLoop); $bulkUploadResults = BulkUploadResultPeer::doSelect($c, $con); while ($bulkUploadResults && count($bulkUploadResults)) { foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $bulkUploadResult->putInCustomData("title", $bulkUploadResult->getTitle()); $bulkUploadResult->putInCustomData("description", $bulkUploadResult->getDescription()); $bulkUploadResult->putInCustomData("tags", $bulkUploadResult->getTags()); $bulkUploadResult->putInCustomData("category", $bulkUploadResult->getCategory()); $bulkUploadResult->putInCustomData("content_type", $bulkUploadResult->getContentType()); $bulkUploadResult->putInCustomData("conversion_profile_id", $bulkUploadResult->getConversionProfileId()); $bulkUploadResult->putInCustomData("access_control_profile_id", $bulkUploadResult->getAccessControlProfileId()); $bulkUploadResult->putInCustomData("url", $bulkUploadResult->getUrl()); $bulkUploadResult->putInCustomData("entry_status", $bulkUploadResult->getEntryStatus()); $bulkUploadResult->putInCustomData("thumbnail_url", $bulkUploadResult->getThumbnailUrl()); $bulkUploadResult->putInCustomData("thumbnail_saved", $bulkUploadResult->getThumbnailSaved()); $bulkUploadResult->putInCustomData("schedule_end_date", $bulkUploadResult->getScheduleEndDate()); $bulkUploadResult->putInCustomData("schedule_start_date", $bulkUploadResult->getScheduleStartDate()); $bulkUploadResult->save(); var_dump("Last handled id: " . $bulkUploadResult->getId()); } $countLimitEachLoop += $countLimitEachLoop; $c->setOffset($countLimitEachLoop); $bulkUploadResults = BulkUploadResultPeer::doSelect($c, $con); usleep(100); }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob * @param bool $addHeaderRow flag signifying whether the header row should be added to the CSV. Default value is false. */ public static function writeBulkUploadLogFile($batchJob, $addHeaderRow = false) { if ($batchJob->getJobSubType() != null && $batchJob->getJobSubType() != self::getBulkUploadTypeCoreValue(BulkUploadCsvType::CSV)) { return; } header("Content-Type: text/plain; charset=UTF-8"); $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($batchJob->getId()); if (!count($bulkUploadResults)) { die("Log file is not ready"); } $STDOUT = fopen('php://output', 'w'); $data = $batchJob->getData(); /* @var $data kBulkUploadJobData */ //Add header row to the output CSV if ($addHeaderRow) { $headerRow = self::getHeaderRow($data->getBulkUploadObjectType()); $headerRow[] = "action"; $headerRow[] = "resultStatus"; $headerRow[] = "objectId"; $headerRow[] = "objectStatus"; $headerRow[] = "errorDescription"; fputcsv($STDOUT, $headerRow); } foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ switch ($bulkUploadResult->getObjectType()) { case BulkUploadObjectType::ENTRY: $values = self::writeEntryBulkUploadResults($bulkUploadResult, $data); break; case BulkUploadObjectType::CATEGORY: $values = self::writeCategoryBulkUploadResults($bulkUploadResult, $data); break; case BulkUploadObjectType::CATEGORY_USER: $values = self::writeCategoryUserBulkUploadResults($bulkUploadResult, $data); break; case BulkUploadObjectType::USER: $values = self::writeUserBulkUploadResults($bulkUploadResult, $data); break; default: break; } $values[] = $bulkUploadResult->getAction(); $values[] = $bulkUploadResult->getStatus(); $values[] = $bulkUploadResult->getObjectId(); $values[] = $bulkUploadResult->getObjectStatus(); $values[] = preg_replace('/[\\n\\r\\t]/', ' ', $bulkUploadResult->getErrorDescription()); fputcsv($STDOUT, $values); } fclose($STDOUT); kFile::closeDbConnections(); exit; }
/** * batch updateBulkUploadResults action adds KalturaBulkUploadResult to the DB * * @action updateBulkUploadResults * @param int $bulkUploadJobId The id of the bulk upload job * @return int the number of unclosed entries */ function updateBulkUploadResultsAction($bulkUploadJobId) { $unclosedEntriesCount = 0; $errorObjects = 0; $unclosedEntries = array(); $bulkUploadResults = BulkUploadResultPeer::retrieveByBulkUploadId($bulkUploadJobId); $bulkUpload = BatchJobPeer::retrieveByPK($bulkUploadJobId); if ($bulkUpload) { foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $status = $bulkUploadResult->updateStatusFromObject(); if ($status == BulkUploadResultStatus::IN_PROGRESS) { $unclosedEntriesCount++; } if ($status == BulkUploadResultStatus::ERROR) { $errorObjects++; } } $data = $bulkUpload->getData(); if ($data && $data instanceof kBulkUploadJobData) { //TODO: find some better alternative, find out why the bulk upload result which reports error is // returning objectId "null" for failed entry assets, rather than the entryId to which they pertain. //$data->setNumOfEntries(BulkUploadResultPeer::countWithEntryByBulkUploadId($bulkUploadJobId)); $data->setNumOfObjects(BulkUploadResultPeer::countWithObjectTypeByBulkUploadId($bulkUploadJobId, $data->getBulkUploadObjectType())); $data->setNumOfErrorObjects($errorObjects); $bulkUpload->setData($data); $bulkUpload->save(); } } return $unclosedEntriesCount; }
/** * Returns the log file for bulk upload job * @param BatchJob $batchJob bulk upload batchjob * @return SimpleXMLElement */ public static function getBulkUploadMrssXml($batchJob) { $actionsMap = array(BulkUploadAction::ADD => 'add', BulkUploadAction::UPDATE => 'update', BulkUploadAction::DELETE => 'delete'); $criteria = new Criteria(); $criteria->add(BulkUploadResultPeer::BULK_UPLOAD_JOB_ID, $batchJob->getId()); $criteria->addAscendingOrderByColumn(BulkUploadResultPeer::LINE_INDEX); $criteria->setLimit(100); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); if (!count($bulkUploadResults)) { return null; } header("Content-Type: text/xml; charset=UTF-8"); $data = $batchJob->getData(); $xmlElement = new SimpleXMLElement('<mrss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'); $xmlElement->addAttribute('version', '2.0'); $channel = $xmlElement->addChild('channel'); $handledResults = 0; while (count($bulkUploadResults)) { $handledResults += count($bulkUploadResults); // insert all entries to instance pool $pks = array(); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $pks[] = $bulkUploadResult->getEntryId(); } entryPeer::retrieveByPKs($pks); foreach ($bulkUploadResults as $bulkUploadResult) { /* @var $bulkUploadResult BulkUploadResult */ $item = $channel->addChild('item'); $result = $item->addChild('result'); $result->addChild('errorDescription', self::stringToSafeXml($bulkUploadResult->getErrorDescription())); // $result->addChild('entryStatus', self::stringToSafeXml($bulkUploadResult->getEntryStatus())); // $result->addChild('entryStatusName', self::stringToSafeXml($title)); $action = isset($actionsMap[$bulkUploadResult->getAction()]) ? $actionsMap[$bulkUploadResult->getAction()] : $actionsMap[BulkUploadAction::ADD]; $item->addChild('action', $action); $entry = $bulkUploadResult->getObject(); if (!$entry) { continue; } kMrssManager::getEntryMrssXml($entry, $item); } if (count($bulkUploadResults) < $criteria->getLimit()) { break; } kMemoryManager::clearMemory(); $criteria->setOffset($handledResults); $bulkUploadResults = BulkUploadResultPeer::doSelect($criteria); } return $xmlElement; }
/** * Populates the object using an array. * * This is particularly useful when populating an object from one of the * request arrays (e.g. $_POST). This method goes through the column * names, checking to see whether a matching key exists in populated * array. If so the setByName() method is called for that column. * * You can specify the key type of the array by additionally passing one * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME, * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM. * The default key type is the column's phpname (e.g. 'AuthorId') * * @param array $arr An array to populate the object from. * @param string $keyType The type of keys the array uses. * @return void */ public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME) { $keys = BulkUploadResultPeer::getFieldNames($keyType); if (array_key_exists($keys[0], $arr)) { $this->setId($arr[$keys[0]]); } if (array_key_exists($keys[1], $arr)) { $this->setCreatedAt($arr[$keys[1]]); } if (array_key_exists($keys[2], $arr)) { $this->setUpdatedAt($arr[$keys[2]]); } if (array_key_exists($keys[3], $arr)) { $this->setBulkUploadJobId($arr[$keys[3]]); } if (array_key_exists($keys[4], $arr)) { $this->setLineIndex($arr[$keys[4]]); } if (array_key_exists($keys[5], $arr)) { $this->setPartnerId($arr[$keys[5]]); } if (array_key_exists($keys[6], $arr)) { $this->setEntryId($arr[$keys[6]]); } if (array_key_exists($keys[7], $arr)) { $this->setEntryStatus($arr[$keys[7]]); } if (array_key_exists($keys[8], $arr)) { $this->setRowData($arr[$keys[8]]); } if (array_key_exists($keys[9], $arr)) { $this->setTitle($arr[$keys[9]]); } if (array_key_exists($keys[10], $arr)) { $this->setDescription($arr[$keys[10]]); } if (array_key_exists($keys[11], $arr)) { $this->setTags($arr[$keys[11]]); } if (array_key_exists($keys[12], $arr)) { $this->setUrl($arr[$keys[12]]); } if (array_key_exists($keys[13], $arr)) { $this->setContentType($arr[$keys[13]]); } if (array_key_exists($keys[14], $arr)) { $this->setConversionProfileId($arr[$keys[14]]); } if (array_key_exists($keys[15], $arr)) { $this->setAccessControlProfileId($arr[$keys[15]]); } if (array_key_exists($keys[16], $arr)) { $this->setCategory($arr[$keys[16]]); } if (array_key_exists($keys[17], $arr)) { $this->setScheduleStartDate($arr[$keys[17]]); } if (array_key_exists($keys[18], $arr)) { $this->setScheduleEndDate($arr[$keys[18]]); } if (array_key_exists($keys[19], $arr)) { $this->setThumbnailUrl($arr[$keys[19]]); } if (array_key_exists($keys[20], $arr)) { $this->setThumbnailSaved($arr[$keys[20]]); } if (array_key_exists($keys[21], $arr)) { $this->setPartnerData($arr[$keys[21]]); } if (array_key_exists($keys[22], $arr)) { $this->setErrorDescription($arr[$keys[22]]); } if (array_key_exists($keys[23], $arr)) { $this->setPluginsData($arr[$keys[23]]); } }