function oa_files_find_document in Open Atrium Files 7.2
Find the document that may correspond to a given file.
Parameters
$file: The file object to find.
1 call to oa_files_find_document()
- oa_files_upload_create_documents_form in ./
oa_files.module - Form callback; Create multiple documents.
File
- ./
oa_files.module, line 493
Code
function oa_files_find_document($file, $gid = NULL, $sid = NULL) {
$uri = strtolower($file->uri);
$uri_ext = substr($uri, strrpos($uri, '.'));
$uri_sans_ext = substr($uri, 0, strrpos($uri, '.'));
$uri_after_underscore = substr($uri_sans_ext, strrpos($uri_sans_ext, '_') + 1);
$uri_before_underscore = substr($uri_sans_ext, 0, strrpos($uri_sans_ext, '_'));
$test_alt = $uri_before_underscore && strlen($uri_after_underscore) && is_numeric($uri_after_underscore);
// This is not a renamed file, no existing document matches.
if (!$test_alt) {
return FALSE;
}
// We want to find all files on document with the same uri or prefix.
$query = db_select('file_managed', 'f');
$query
->innerJoin('field_data_field_oa_media', 'm', 'm.field_oa_media_fid = f.fid AND m.entity_type = :type', array(
':type' => 'node',
));
$query
->fields('m', array(
'delta',
'language',
));
$query
->addField('f', 'uri');
$query
->addField('m', 'entity_id', 'nid');
$query
->innerJoin('node', 'n', 'n.nid = m.entity_id');
$query
->condition('n.type', 'oa_wiki_page');
$query
->condition(db_or()
->condition('f.uri', db_like($uri), 'LIKE')
->condition('f.uri', db_like($uri_before_underscore) . '%', 'LIKE'));
$query
->orderBy('f.fid', 'ASC');
if ($gid) {
$query
->innerJoin('og_membership', 'om', 'm.entity_id = om.etid AND om.entity_type = :type AND om.group_type = :type AND om.gid = :id', array(
':type' => 'node',
':id' => $gid,
));
if ($sid) {
$query
->innerJoin('field_data_oa_section_ref', 'sf', 'm.entity_id = sf.entity_id AND sf.entity_type = :type AND sf.oa_section_ref_target_id = :id', array(
':type' => 'node',
':id' => $sid,
));
}
}
if ($rows = $query
->execute()
->fetchAll()) {
foreach ($rows as $row) {
// Test if the db one is [uri].[ext] or [uri]_[numeric].[ext].
$row_uri = strtolower($row->uri);
$db_uri_ext = substr($row_uri, strrpos($row_uri, '.'));
$db_uri_sans_ext = substr($row_uri, 0, strrpos($row_uri, '.'));
$db_uri_after_underscore = NULL;
if ($pos = strrpos($db_uri_sans_ext, '_')) {
$db_uri_before_underscore = substr($db_uri_sans_ext, 0, $pos);
$db_uri_after_underscore = substr($db_uri_sans_ext, strrpos($db_uri_sans_ext, '_') + 1);
}
if ($db_uri_after_underscore !== '0' && !$db_uri_after_underscore || !is_numeric($db_uri_after_underscore)) {
$db_uri_before_underscore = $db_uri_sans_ext;
$db_uri_after_underscore = FALSE;
}
if ($db_uri_before_underscore == $uri_before_underscore && $db_uri_ext == $uri_ext && (!$db_uri_after_underscore || is_numeric($db_uri_after_underscore))) {
if (($node = node_load($row->nid)) && $node->type == 'oa_wiki_page' && node_access('update', $node)) {
$node->oa_files_row = $row;
return $node;
}
}
}
}
return FALSE;
}