/**
* @ApiDoc(
* section="Bundle/Package Manager",
* description="Uninstalls a bundle"
* )
*
* Removes relevant data and object's data. Executes also the uninstall script.
* Removes database values, some files etc.
*
* @Rest\QueryParam(name="bundle", requirements=".+", strict=true, description="The bundle name")
* @Rest\QueryParam(name="removeFiles", requirements=".+", default="true", description="If the orm should be updated")
* @Rest\QueryParam(name="ormUpdate", requirements=".+", default="false", description="If the orm should be updated")
*
* @Rest\Post("/admin/system/bundle/manager/install")
*
* @param string $bundle
* @param bool $ormUpdate
* @param bool $removeFiles
*
* @throws BundleNotFoundException
* @return bool
*/
public function uninstallAction($bundle, $ormUpdate = null, $removeFiles = null)
{
$ormUpdate = filter_var($ormUpdate, FILTER_VALIDATE_BOOLEAN);
$removeFiles = filter_var($removeFiles, FILTER_VALIDATE_BOOLEAN);
Manager::prepareName($bundle);
$fs = $this->localFilesystem;
$path = $this->jarves->getBundleDir($bundle);
if (!$path) {
throw new \Jarves\Exceptions\BundleNotFoundException();
}
$hasPropelModels = $fs->has($path . 'Resources/config/model.xml');
$this->firePackageManager($bundle, 'uninstall');
$this->deactivateAction($bundle);
//fire update propel orm
if ($ormUpdate && $hasPropelModels) {
//update propel
if ($ormUpdate) {
$this->jarves->getEventDispatcher()->dispatch('core/bundle/schema-update', $bundle);
}
}
//remove files
if (filter_var($removeFiles, FILTER_VALIDATE_BOOLEAN)) {
$fs->delete($path);
if (0 === strpos($path, $this->getComposerVendorDir())) {
$path = explode('/', $path);
$composerName = $path[1] . '/' . $path[2];
$this->uninstallComposerAction($composerName);
}
}
return true;
}