/** * Fires the script in module/$module/package/$script.php and its events. * * @param string $bundle * @param string $script * * @throws BundleNotFoundException * @return bool */ protected function firePackageManager($bundleName, $script) { $bundle = $this->jarves->getBundle($bundleName); if ($bundle) { $namespace = $bundle->getNamespace(); } else { if (class_exists($bundleName)) { $reflection = new \ReflectionClass($bundleName); $namespace = $reflection->getNamespaceName(); } else { throw new BundleNotFoundException(sprintf('Bundle `%s` not found.', $bundleName)); } } $packageManagerClass = $namespace . '\\PackageManger'; if (class_exists($packageManagerClass)) { $packageManager = new $packageManagerClass($this->jarves); if ($packageManager instanceof ContainerAwareInterface) { $packageManager->setContainer($this->jarves->getContainer()); } if (method_exists($packageManager, $script)) { $packageManager->{$script}(); } else { $this->jarves->getLogger()->debug(sprintf('PackageManager of Bundle `%s` does not have the method `%s`', $bundle, $script)); } } else { $this->jarves->getLogger()->debug(sprintf('PackageManager class `%s` of Bundle `%s` does not exist', $packageManagerClass, $bundleName)); } return true; }
/** * @ApiDoc( * section="Bundle Editor", * description="Creates a new CRUD object window class" * ) * * @Rest\RequestParam(name="class", requirements=".*", strict=true, description="The PHP class name") * @Rest\RequestParam(name="bundle", requirements=".*", strict=true, description="The bundle name") * @Rest\RequestParam(name="force", requirements=".*", default="false", description="Overwrites existing") * * @Rest\Put("/admin/system/bundle/editor/window") * * @param ParamFetcher $paramFetcher * * @return bool * @throws FileAlreadyExistException */ public function createWindowAction(ParamFetcher $paramFetcher) { $class = $paramFetcher->get('class'); $bundle = $paramFetcher->get('bundle'); $force = filter_var($paramFetcher->get('force'), FILTER_VALIDATE_BOOLEAN); if (substr($class, 0, 1) != '\\') { $class = '\\' . $class; } if (class_exists($class) && !$force) { $reflection = new \ReflectionClass($class); throw new FileAlreadyExistException(sprintf('Class already exist in %s', $reflection->getFileName())); } $actualPath = str_replace('\\', '/', substr($class, 1)) . '.php'; $actualPath = $this->jarves->getBundleDir($bundle) . $actualPath; if (file_exists($actualPath) && !$force) { throw new FileAlreadyExistException(sprintf('File already exist, %s', $actualPath)); } $sourcecode = "<?php\n\n"; $bundle = $this->jarves->getBundle($bundle); $lSlash = strrpos($class, '\\'); $class2Name = $lSlash !== -1 ? substr($class, $lSlash + 1) : $class; $parentClass = '\\Jarves\\Admin\\ObjectCrud'; $namespace = ucfirst($bundle->getNamespace()) . substr($class, 0, $lSlash); if (substr($namespace, -1) == '\\') { $namespace = substr($namespace, 0, -1); } $sourcecode .= "namespace {$namespace};\n \n"; $sourcecode .= 'class ' . $class2Name . ' extends ' . $parentClass . " {\n\n"; $sourcecode .= "}\n"; $fs = $this->localFilesystem; $result = $fs->write($actualPath, $sourcecode); $this->reconfigureJarves(); return $result; }
/** * @ApiDoc( * section="Backend", * description="Prints the javascript file content of $bundle and $code." * ) * * @Rest\QueryParam(name="bundle", requirements=".+", strict=true, description="The bundle name") * @Rest\QueryParam(name="code", requirements=".+", strict=true, description="Slash separated entry point path") * @Rest\QueryParam(name="onLoad", requirements=".+", strict=true, description="onLoad id") * @Rest\Get("/admin/backend/custom-js") * * @param ParamFetcher $paramFetcher * * @return string javascript */ public function getCustomJsAction(ParamFetcher $paramFetcher) { $bundle = $paramFetcher->get('bundle'); $code = $paramFetcher->get('code'); $onLoad = $paramFetcher->get('onLoad'); $module = preg_replace('[^a-zA-Z0-9_-]', '', $bundle); $code = preg_replace('[^a-zA-Z0-9_-]', '', $code); $onLoad = preg_replace('[^a-zA-Z0-9_-]', '', $onLoad); $bundle = $this->jarves->getBundle($module); $file = $bundle->getPath() . '/Resources/public/admin/js/' . $code . '.js'; if (!file_exists($file)) { $content = "contentCantLoaded_" . $onLoad . "('{$file}');\n"; } else { $content = file_get_contents($file); $content .= "\n"; $content .= "contentLoaded_" . $onLoad . '();' . "\n"; } $response = new Response($content); $response->headers->set('Content-Type', 'text/javascript'); return $response; }