/** * Resolves path in complex component (socialnetwork) and find target file or folder. * @param \CComponentEngine $engine Component engine. * @param array $pageCandidates Page candidates. * @param array &$variables Output variables. * @return int|string */ public function resolveSocNetPathComponentEngine(\CComponentEngine $engine, $pageCandidates, &$variables) { $component = $engine->getComponent(); if (!$component) { list($pageId, $variables) = each($pageCandidates); return $pageId; } $storage = null; foreach ($pageCandidates as $pageId => $variablesTmp) { if (!empty($variablesTmp["PATH"]) && is_string($variablesTmp["PATH"])) { $storage = $this->getStorageByVariables($variablesTmp); if (!$storage) { return ''; } $variables = array_merge($variablesTmp, $this->resolvePathToFolder($storage, $variablesTmp["PATH"])); if (empty($variables['FOLDER_ID'])) { return ''; } return $pageId; } elseif (!empty($variablesTmp["FILE_PATH"]) && is_string($variablesTmp["FILE_PATH"])) { $storage = $this->getStorageByVariables($variablesTmp); if (!$storage) { return ''; } $variables = array_merge($variablesTmp, $this->resolvePathToFile($storage, $variablesTmp["FILE_PATH"])); if (empty($variables['FILE_ID'])) { return ''; } return $pageId; } elseif (!empty($variablesTmp["TRASH_PATH"]) && is_string($variablesTmp["TRASH_PATH"])) { $storage = $this->getStorageByVariables($variablesTmp); if (!$storage) { return ''; } $variables = array_merge($variablesTmp, $this->resolvePathToTrashFolder($storage, $variablesTmp["TRASH_PATH"])); if (empty($variables['FOLDER_ID'])) { return ''; } return $pageId; } elseif (!empty($variablesTmp["TRASH_FILE_PATH"]) && is_string($variablesTmp["TRASH_FILE_PATH"])) { $storage = $this->getStorageByVariables($variablesTmp); if (!$storage) { return ''; } $variables = array_merge($variablesTmp, $this->resolvePathToTrashFile($storage, $variablesTmp["TRASH_FILE_PATH"])); if (empty($variables['FILE_ID'])) { return ''; } return $pageId; } } list($pageId, $variables) = each($pageCandidates); return $pageId; }