/**
 *
 * @brief unlock item
 *
 * @param[in] $item_id item id
 */
function xoonips_admin_maintenance_item_unlock_item($item_id)
{
    // unlock item
    $index_handler =& xoonips_getormhandler('xoonips', 'index');
    $item_lock_handler =& xoonips_getormhandler('xoonips', 'item_lock');
    $item_basic_handler =& xoonips_getormhandler('xoonips', 'item_basic');
    $index_item_link_handler =& xoonips_getormhandler('xoonips', 'index_item_link');
    $event_log_handler =& xoonips_getormhandler('xoonips', 'event_log');
    if ($item_lock_handler->isLocked($item_id)) {
        $lock_type = $item_lock_handler->getLockType($item_id);
        if ($lock_type == XOONIPS_LOCK_TYPE_CERTIFY_REQUEST) {
            $index_item_links =& $index_item_link_handler->getObjects(new Criteria('item_id', $item_id));
            foreach ($index_item_links as $index_item_link) {
                if ($index_item_link->get('certify_state') == CERTIFY_REQUIRED) {
                    $index_id = $index_item_link->get('index_id');
                    $index = $index_handler->get($index_id);
                    if ($index->getVar('open_level', 'n') == OL_PUBLIC || $index->getVar('open_level', 'n') == OL_GROUP_ONLY) {
                        $item_basic_handler->unlockItemAndIndexes($item_id, $index_id);
                        $event_log_handler->recordRejectItemEvent($item_id, $index_id);
                        $index_item_link_handler->delete($index_item_link);
                        xoonips_notification_item_rejected($item_id, $index_id);
                    }
                }
            }
        } else {
            // TODO: unlock if transfer request
        }
    }
}
     if ($index_item_links === false) {
         // no item in tree
         continue;
     }
     foreach ($index_item_links as $index_item_link) {
         $item_id = $index_item_link->get('item_id');
         if ($item_lock_handler->isLocked($item_id)) {
             // item is not certified
             $uncertified++;
         } else {
             if ($index_item_link_handler->delete($index_item_link)) {
                 // succeed
                 $succeed++;
                 $event_log_handler->recordRejectItemEvent($item_id, $xid);
                 $modified_item_ids[$item_id] = $item_id;
                 xoonips_notification_item_rejected($item_id, $xid);
             } else {
                 // error occured
                 $failed++;
             }
         }
     }
     $results[] = array('id' => $xid, 'evenodd' => $evenodd, 'index' => $textutil->html_special_chars($treemap[$xid]), 'succeed' => $succeed, 'uncertified' => $uncertified, 'failed' => $failed);
     $evenodd = $evenodd == 'even' ? 'odd' : 'even';
 }
 // update item_status and item_basic. delete item_show
 foreach ($modified_item_ids as $item_id) {
     // update last_update
     $item_basic = $item_basic_handler->get($item_id);
     $item_basic->set('last_update_date', time());
     $item_basic_handler->insert($item_basic);