/** * Registers the object in search engine. * * @note Transaction unsafe. If you call several transaction unsafe methods you must enclose * the calls within a db transaction; thus within db->begin and db->commit. * * @param int $objectID Id of the object. * @param int $version Operation collection passes this default param. Not used in the method * @param bool $isMoved true if node is being moved */ public static function registerSearchObject($objectID, $version = null, $isMoved = false) { $objectID = (int) $objectID; eZDebug::createAccumulatorGroup('search_total', 'Search Total'); $ini = eZINI::instance('site.ini'); $insertPendingAction = false; $object = null; switch ($ini->variable('SearchSettings', 'DelayedIndexing')) { case 'enabled': $insertPendingAction = true; break; case 'classbased': $classList = $ini->variable('SearchSettings', 'DelayedIndexingClassList'); $object = eZContentObject::fetch($objectID); if (is_array($classList) && in_array($object->attribute('class_identifier'), $classList)) { $insertPendingAction = true; } } if ($insertPendingAction) { $action = $isMoved ? 'index_moved_node' : 'index_object'; eZDB::instance()->query("INSERT INTO ezpending_actions( action, param ) VALUES ( '{$action}', '{$objectID}' )"); return; } if ($object === null) { $object = eZContentObject::fetch($objectID); } // Register the object in the search engine. $needCommit = eZSearch::needCommit(); if (eZSearch::needRemoveWithUpdate()) { eZDebug::accumulatorStart('remove_object', 'search_total', 'remove object'); eZSearch::removeObjectById($objectID); eZDebug::accumulatorStop('remove_object'); } eZDebug::accumulatorStart('add_object', 'search_total', 'add object'); if (!eZSearch::addObject($object, $needCommit)) { eZDebug::writeError("Failed adding object ID {$object->attribute('id')} in the search engine", __METHOD__); } eZDebug::accumulatorStop('add_object'); }
/** * Archives the current object and removes assigned nodes * * Transaction unsafe. If you call several transaction unsafe methods you must enclose * the calls within a db transaction; thus within db->begin and db->commit. * * @param int $nodeID */ function removeThis( $nodeID = null ) { $delID = $this->ID; // Who deletes which content should be logged. eZAudit::writeAudit( 'content-delete', array( 'Object ID' => $delID, 'Content Name' => $this->attribute( 'name' ), 'Comment' => 'Setted archived status for the current object: eZContentObject::remove()' ) ); $nodes = $this->attribute( 'assigned_nodes' ); if ( $nodeID === null or count( $nodes ) <= 1 ) { $db = eZDB::instance(); $db->begin(); $mainNodeKey = false; foreach ( $nodes as $key => $node ) { if ( $node->attribute( 'main_node_id' ) == $node->attribute( 'node_id' ) ) { $mainNodeKey = $key; } else { $node->removeThis(); } } if ( $mainNodeKey !== false ) { $nodes[$mainNodeKey]->removeNodeFromTree( true ); } $this->setAttribute( 'status', eZContentObject::STATUS_ARCHIVED ); eZSearch::removeObjectById( $delID ); $this->store(); eZContentObject::fixReverseRelations( $delID, 'trash' ); // Delete stored attribute from other tables $db->commit(); } else if ( $nodeID !== null ) { $node = eZContentObjectTreeNode::fetch( $nodeID , false ); if ( is_object( $node ) ) { if ( $node->attribute( 'main_node_id' ) == $nodeID ) { $db = eZDB::instance(); $db->begin(); foreach ( $additionalNodes as $additionalNode ) { if ( $additionalNode->attribute( 'node_id' ) != $node->attribute( 'main_node_id' ) ) { $additionalNode->remove(); } } $node->removeNodeFromTree( true ); $this->setAttribute( 'status', eZContentObject::STATUS_ARCHIVED ); eZSearch::removeObjectById( $delID ); $this->store(); eZContentObject::fixReverseRelations( $delID, 'trash' ); $db->commit(); } else { eZContentObjectTreeNode::removeNode( $nodeID ); } } } else { eZContentObjectTreeNode::removeNode( $nodeID ); } }
$cli->output($cli->stylize('bold', 'Updating object attributes')); if (is_array($IDs) and count($IDs) > 0) { foreach ($IDs as $id) { $cli->output('Updating object attribute: id - ' . $id['id'] . ' & version - ' . $id['version']); $objectAttribute = eZContentObjectAttribute::fetch($id['id'], $id['version']); $textString = $objectAttribute->attribute('data_text'); $textArray = explode('***', $textString); $objectAttribute->setAttribute('data_type_string', 'sckenhancedselection'); $objectAttribute->DataTypeString = 'sckenhancedselection'; $objectAttribute->setAttribute('data_text', serialize($textArray)); $objectAttribute->store(); $objectAttribute->updateSortKey(); $object = $objectAttribute->attribute('object'); $class = $object->attribute('content_class'); // Reset the name $object->setName($class->contentObjectName($object)); // Update the nodes $nodes = $object->attribute('assigned_nodes'); foreach ($nodes as $node) { eZContentOperationCollection::publishNode($node->attribute('parent_node_id'), $object->attribute('id'), $object->attribute('current_version'), $object->attribute('main_node_id')); } eZSearch::removeObjectById($object->attribute('id')); eZSearch::addObject($object); unset($objectAttribute, $object, $class, $node); } } else { $cli->output('No object attributes to update!'); } $cli->output(); $cli->output('Done.'); $script->shutdown();