id, $file->realname); } unset($existing); $existing = remositoryRepository::doSQLget("SELECT id, realname FROM #__downloads_files WHERE containerid = $container->id", 'remositoryMiniFile'); $existingfiles = array(); foreach ($existing as $file) { $existingfiles[] = $file->realname; } unset($existing); $directory = new remositoryDirectory($path); $files = $directory->listFiles(); $newfile = new remositoryFile (); $newfile->containerid = $container->id; $newfile->memoContainer($container); $newfile->published = 1; $newfile->submittedby = $submitter; foreach ($filedata as $key=>$data) $newfile->$key = $data; $chosenicon = $newfile->icon; // Extensions are prechecked $newfile->validate(false); foreach ($files as $file) { @set_time_limit(25); $ext = remositoryAbstract::lastPart($file,'.'); if ($extensions != '*' AND !in_array($ext, $extensions)) continue; if (in_array($file, $existingfiles)) continue; $filepath = $path.$file; $physical = new remositoryPhysicalFile (); $physical->setData($filepath, 0, 0, 0, false); $newfile->id = 0; $newfile->filetitle = ''; $newfile->icon = $chosenicon; $newfile->storePhysicalFile ($physical, $extensiontitle, false); if ($delete) @unlink($filepath); } unset($existing, $files, $newfile); if ($recurse) { $directories = $directory->listFiles('','dir'); foreach ($directories as $newdir) { $dirpath = $path.$newdir; $children = $container->getChildren(false); foreach ($children as $child) { if ($newdir == $child->name OR $newdir == basename($child->filepath)) { $folder =& $child; break; } } if (!isset($folder)) { $folder = new RemositoryContainer (); $folder->parentid = $container->id; $folder->name = $newdir; $folder->plaintext = $container->plaintext; if ($container->filepath) $folder->filepath = $container->filepath.$newdir.'/'; $folder->published = 1; $folder->saveValues(); $this->savePermissions($folder, $permissions); } // Create new directory if necessary, including for existing, to remedy any missing directories if possible if ($folder->filepath AND !file_exists($folder->filepath))$newdir = new remositoryDirectory ($folder->filepath, true); if (1 < $recurse) $this->addOneLevel ($dirpath, $folder, $extensions, $extensiontitle, $delete, $recurse, $submitter, $filedata, $permissions); unset($folder); } } } public function saveNewFiles ($basedir, $containerid, $recurse, $extensionlist, $extensiontitle, $submitter, $filedata, $permissions, &$message, &$badfiles) { $interface = remositoryInterface::getInstance(); $dir = new remositoryDirectory($basedir); // Change for multiple repositories // if (!$dir->isDirectory()) $this->interface->redirect( "index2.php?option=com_remository&act=addstructure&repnum=".$this->repnum, _DOWN_STRUCT_NO_DIR ); if (!$dir->isDirectory()) { $message = _DOWN_STRUCT_NO_DIR; return false; } $extensionlist = trim($extensionlist); if (!$extensionlist OR '*' == $extensionlist) { $extensions = '*'; $badfiles = $dir->findBadExtension($recurse); if (count($badfiles)) return false; } else { $extensions = explode(',', $extensionlist); $extensions = array_map('trim', $extensions); } $container = new remositoryContainer($containerid); if ($basedir AND $containerid) { $this->addOneLevel ($basedir, $container, $extensions, $extensiontitle, False, $recurse, $submitter, $filedata, $permissions); remositoryRepository::getInstance()->resetCounts(); } return true; } // Private function for tidiness private function savePermissions ($container, $defaults) { $authoriser = aliroAuthorisationAdmin::getInstance(); foreach ($defaults as $action=>$role) { $authoriser->permit ($role, 2, $action, 'remosFolder', $container->id); } } }