function wikiplugin_profile( $data, $params ) { require_once 'lib/profilelib/profilelib.php'; require_once 'lib/profilelib/installlib.php'; global $tiki_p_admin; if ( $tiki_p_admin != 'y' ) { return '__' . tra('Profile plugin only available to administrators') . '__'; } $params = array_merge(array('domain' => 'profiles.tiki.org'), $params); if ( !isset( $params['name'] ) ) { return 'Missing parameter __name__'; } $profile = Tiki_Profile::fromNames($params['domain'], $params['name']); if ( $profile ) { $installer = new Tiki_Profile_Installer; try { if ( $installer->isInstalled($profile) ) { if ( $_POST['reinstall'] == "{$params['domain']}/{$params['name']}" ) { $installer->forget($profile); $installer->install($profile); header('Location: ' . $_SERVER['REQUEST_URI']); exit; } } else { if ( $_POST['install'] == "{$params['domain']}/{$params['name']}" ) { $installer->install($profile); header('Location: ' . $_SERVER['REQUEST_URI']); exit; } } } catch( Exception $e ) { return '__' . $e->getMessage() . '__'; } global $smarty; $smarty->assign('profile_is_installed', $installer->isInstalled($profile)); $smarty->assign('profile_key', "{$params['domain']}/{$params['name']}"); return '~np~' . $smarty->fetch('wiki-plugins/wikiplugin_profile.tpl') . '~/np~'; } else { return '__' . tr('Profile %0/%1 not found', $params['domain'], $params['name']) . '__'; } }
protected function execute(InputInterface $input, OutputInterface $output) { $profileName = $input->getArgument('profile'); $repository = $input->getArgument('repository'); $force = $input->getOption('force'); $profile = \Tiki_Profile::fromNames($repository, $profileName); if (!$profile) { $output->writeln('<error>Profile not found.</error>'); return; } $tikilib = \TikiLib::lib('tiki'); $installer = new \Tiki_Profile_Installer(); $isInstalled = $installer->isInstalled($profile); if ($isInstalled && $force) { $installer->forget($profile); $isInstalled = false; } if (!$isInstalled) { $transaction = $tikilib->begin(); if ($installer->install($profile)) { $transaction->commit(); $output->writeln('Profile applied.'); } else { $output->writeln("<error>Installation failed:</error>"); foreach ($installer->getFeedback() as $error) { $output->writeln("<error>{$error}</error>"); } } } else { $output->writeln('<info>Profile was already applied. Nothing happened.</info>'); } }
protected function execute(InputInterface $input, OutputInterface $output) { $addon_utilities = new \TikiAddons_Utilities(); $addonName = $input->getArgument('addon'); if (strpos($addonName, '/') !== false && strpos($addonName, '_') === false) { $package = $addonName; $folder = str_replace('/', '_', $addonName); } else { $package = str_replace('_', '/', $addonName); $folder = $addonName; } $repository = 'file://addons/' . $folder . '/profiles'; $reapply = $input->getOption('reapply'); $ignoredepends = $input->getOption('ignoredepends'); if (empty(glob(TIKI_PATH . '/addons/' . $folder . '/profiles/*.yml'))) { $output->writeln("<error>No profiles found.</error>"); return false; } if (!$ignoredepends) { $addon_utilities->checkDependencies($folder); } $addons = \TikiAddons::getInstalled(); $tikilib = \TikiLib::lib('tiki'); $installer = new \Tiki_Profile_Installer(); foreach (glob(TIKI_PATH . '/addons/' . $folder . '/profiles/*.yml') as $file) { $profileName = str_replace('.yml', '', basename($file)); $profile = \Tiki_Profile::fromNames($repository, $profileName); if (!$profile) { $output->writeln("<error>Profile {$profileName} not found.</error>"); continue; } $isInstalled = $installer->isInstalled($profile); if ($isInstalled && $reapply) { $installer->forget($profile); $isInstalled = false; } if (!$isInstalled) { $transaction = $tikilib->begin(); if ($installer->install($profile)) { $addon_utilities->updateProfile($folder, $addons[$package]->version, $profileName); $transaction->commit(); $output->writeln("Profile {$profileName} applied."); } else { $output->writeln("<error>Profile {$profileName} installation failed:</error>"); foreach ($installer->getFeedback() as $error) { $output->writeln("<error>{$error}</error>"); } } } else { $output->writeln("<info>Profile {$profileName} was already applied. Nothing happened.</info>"); } } }
protected function execute(InputInterface $input, OutputInterface $output) { $profileName = $input->getArgument('profile'); $repository = $input->getArgument('repository'); $profile = \Tiki_Profile::fromNames($repository, $profileName); if (!$profile) { $output->writeln('<error>Profile not found.</error>'); return; } $tikilib = \TikiLib::lib('tiki'); $installer = new \Tiki_Profile_Installer(); $isInstalled = $installer->isInstalled($profile); if ($isInstalled) { $transaction = $tikilib->begin(); $installer->forget($profile); $transaction->commit(); $output->writeln('Profile forgotten.'); } else { $output->writeln('<info>Profile was not installed or did not create any objects.</info>'); } }
protected function execute(InputInterface $input, OutputInterface $output) { $addon_utilities = new \TikiAddons_Utilities(); $addonName = $input->getArgument('addon'); if (strpos($addonName, '/') !== false && strpos($addonName, '_') === false) { $package = $addonName; $folder = str_replace('/', '_', $addonName); } else { $package = str_replace('_', '/', $addonName); $folder = $addonName; } $repository = 'file://addons/' . $folder . '/profiles'; $ignoredepends = $input->getOption('ignoredepends'); $confirm = $input->getOption('confirm'); if (empty(glob(TIKI_PATH . '/addons/' . $folder . '/profiles/*.yml'))) { $output->writeln("<error>No profiles found.</error>"); return; } if (!$ignoredepends) { $addon_utilities->checkDependencies($folder); } $upgradeInfo = json_decode(file_get_contents(TIKI_PATH . '/addons/' . $folder . '/upgrade.json')); $validVersions = array(); foreach ($upgradeInfo as $version => $info) { $validVersions[] = $version; } $config = null; $lastVersionInstalled = $addon_utilities->getLastVersionInstalled($folder); $reapplyProfiles = array(); $forgetProfiles = array(); $removeItems = array(); foreach ($validVersions as $v) { if ($addon_utilities->checkVersionMatch($lastVersionInstalled, $v)) { $config = $upgradeInfo->{$v}; $removeItems = $config->remove; $forgetProfiles = $config->forget; $reapplyProfiles = $config->reapply; break; } } $addons = \TikiAddons::getInstalled(); if (!$config) { if (strnatcmp($lastVersionInstalled, $addons[$package]->version) <= 0) { $output->writeln("<error>Currently installed version ({$lastVersionInstalled}) is already up to date.</error>"); } else { $output->writeln("<error>No valid versions currently installed to upgrade found.</error>"); } return false; } $installedProfiles = $addon_utilities->getInstalledProfiles($folder); $installedProfileNames = array_keys($installedProfiles); $willRemove = false; foreach ($removeItems as $remove) { if (empty($remove->profile)) { $profile = ''; } else { $profile = $remove->profile; } $objectId = $addon_utilities->getObjectId($folder, $remove->ref, $profile); $objectType = $remove->type; if ($objectId) { if ($confirm) { $addon_utilities->removeObject($objectId, $objectType); $output->writeln("{$objectType} '{$objectId}' has been deleted."); } else { $output->writeln("<info>{$objectType} '{$objectId}' will be deleted.</info>"); } $willRemove = true; } } $tikilib = \TikiLib::lib('tiki'); $installer = new \Tiki_Profile_Installer(); // First forget profiles that need to be forgotten foreach ($forgetProfiles as $toForget) { if (in_array($toForget, $installedProfileNames)) { if ($confirm || !$willRemove) { $addon_utilities->forgetProfileAllVersions($folder, $toForget); $profile = \Tiki_Profile::fromNames($repository, $toForget); if (!$profile) { $output->writeln("<error>Profile {$toForget} not found.</error>"); } else { $installer->forget($profile); } } else { $output->writeln("<info>The installed profile {$toForget} will be forgotten.</info>"); } } } if (!$confirm && $willRemove) { $output->writeln("<error>There will be NO undo, and all data in the above objects will be deleted as part of the upgrade.</error>"); $output->writeln("<info>Use the --confirm option to proceed with removal and upgrade.</info>"); } if ($confirm || !$willRemove) { // Finally install profiles foreach (glob(TIKI_PATH . '/addons/' . $folder . '/profiles/*.yml') as $file) { $profileName = str_replace('.yml', '', basename($file)); $profile = \Tiki_Profile::fromNames($repository, $profileName); if (in_array($profileName, $reapplyProfiles)) { $reapply = true; } else { $reapply = false; } if (!$profile) { $output->writeln("<error>Profile {$profileName} not found.</error>"); continue; } $isInstalled = $installer->isInstalled($profile); if ($isInstalled && $reapply) { $installer->forget($profile); $isInstalled = false; } if (!$isInstalled) { $transaction = $tikilib->begin(); if ($installer->install($profile)) { $addon_utilities->updateProfile($folder, $addons[$package]->version, $profileName); $transaction->commit(); $output->writeln("Profile {$profileName} applied."); } else { $output->writeln("<error>Profile {$profileName} installation failed:</error>"); foreach ($installer->getFeedback() as $error) { $output->writeln("<error>{$error}</error>"); } } } else { $output->writeln("<info>Profile {$profileName} was already applied. Nothing happened.</info>"); } } } }
} catch (Exception $e) { $error = $e->getMessage(); $sequencable = false; } $dependencies = array(); $userInput = array(); $installed = false; $url = ''; $feedback = ''; if ($profile !== false) { foreach ($deps as $d) { $dependencies[] = $d->pageUrl; $userInput = array_merge($userInput, $d->getRequiredInput()); } $parsed = $parserlib->parse_data($profile->pageContent); $installed = $installer->isInstalled($profile); $url = $profile->url; $feedback = $profile->getFeedback(); } echo json_encode(array('dependencies' => $dependencies, 'userInput' => $userInput, 'installable' => $sequencable, 'error' => $error, 'content' => $parsed, 'already' => $installed, 'url' => $url, 'feedback' => $feedback)); exit; } // }}} } if (isset($_GET['list'])) { $params = array_merge(array('repository' => '', 'categories' => '', 'profile' => ''), $_GET); $smarty->assign('categories', $params['categories']); $smarty->assign('profile', $params['profile']); $smarty->assign('repository', $params['repository']); if (isset($_GET['preloadlist']) && $params['repository']) { $list->refreshCache($params['repository']);
public function action_import_profile($input) { $tikilib = TikiLib::lib('tiki'); $perms = Perms::get(); if (!$perms->admin) { throw new Services_Exception_Denied(tr('Reserved for administrators')); } unset($success); $confirm = $input->confirm->int(); if ($confirm) { $transaction = $tikilib->begin(); $installer = new Tiki_Profile_Installer(); $yaml = $input->yaml->string(); $name = "tracker_import:" . md5($yaml); $profile = Tiki_Profile::fromString('{CODE(caption="yaml")}' . "\n" . $yaml . "\n" . '{CODE}', $name); if ($installer->isInstallable($profile) == true) { if ($installer->isInstalled($profile) == true) { $installer->forget($profile); } $installer->install($profile); $feedback = $installer->getFeedback(); $transaction->commit(); return $feedback; $success = 1; } else { return false; } } return array('title' => tr('Import Tracker From Profile/YAML'), 'modal' => $input->modal->int()); }
protected function execute(InputInterface $input, OutputInterface $output) { $addon_utilities = new \TikiAddons_Utilities(); $addonName = $input->getArgument('addon'); if (strpos($addonName, '/') !== false && strpos($addonName, '_') === false) { $package = $addonName; $folder = str_replace('/', '_', $addonName); } else { $package = str_replace('_', '/', $addonName); $folder = $addonName; } $repository = 'file://addons/' . $folder . '/profiles'; $confirm = $input->getOption('confirm'); $uninstallInfo = json_decode(file_get_contents(TIKI_PATH . '/addons/' . $folder . '/uninstall.json')); $removeItems = $uninstallInfo->remove; $willRemove = false; foreach ($removeItems as $remove) { if (empty($remove->profile)) { $profile = ''; } else { $profile = $remove->profile; } if (empty($remove->domain)) { $domain = ''; } else { $domain = $remove->domain; } $objectId = $addon_utilities->getObjectId($folder, $remove->ref, $profile, $domain); if (is_array($objectId)) { $objectIds = $objectId; } else { $objectIds = [$objectId]; } foreach ($objectIds as $objectId) { $objectType = $remove->type; if ($objectId) { if ($confirm) { $addon_utilities->removeObject($objectId, $objectType); $output->writeln("{$objectType} '{$objectId}' has been deleted."); } else { $output->writeln("<info>{$objectType} '{$objectId}' will be deleted.</info>"); } $willRemove = true; } } } $installedProfiles = $addon_utilities->getInstalledProfiles($folder); if (!$confirm && ($willRemove || !empty($installedProfiles))) { $output->writeln("<error>There will be NO undo, and all data in the above objects will be deleted.</error>"); $output->writeln("<info>Use the --confirm option to proceed with removal.</info>"); } elseif (!$willRemove) { $output->writeln("<info>It looks like the objects for this addon have been removed already.</info>"); } if (empty($installedProfiles)) { $output->writeln("<info>It looks like the profiles for this addon have been removed from addon registry already.</info>"); } $tikilib = \TikiLib::lib('tiki'); $installer = new \Tiki_Profile_Installer(); if ($confirm) { foreach (array_keys($installedProfiles) as $profileName) { $profile = \Tiki_Profile::fromNames($repository, $profileName); if (!$profile) { $output->writeln("<error>Profile {$profileName} not found.</error>"); continue; } $isInstalled = $installer->isInstalled($profile); if ($isInstalled) { $transaction = $tikilib->begin(); $installer->forget($profile); $transaction->commit(); $output->writeln("Profile {$profileName} forgotten."); } else { $output->writeln("<info>Profile {$profileName} was not installed or did not create any objects.</info>"); } $addon_utilities->forgetProfileAllVersions($folder, $profileName); $output->writeln("Profile {$profileName} forgotten from addon registry."); } } }
$error = ''; try { if (!($deps = $installer->getInstallOrder($profile))) { $deps = $profile->getRequiredProfiles(true); $deps[] = $profile; $sequencable = false; } else { $sequencable = true; } } catch (Exception $e) { $error = $e->getMessage(); $sequencable = false; } $dependencies = array(); foreach ($deps as $d) { if (!$installer->isInstalled($d)) { $dependencies[] = $d->pageUrl; } } $parsed = $tikilib->parse_data($profile->pageContent); $installed = $installer->isInstalled($profile); echo json_encode(array('dependencies' => $dependencies, 'installable' => $sequencable, 'error' => $error, 'content' => $parsed, 'already' => $installed, 'url' => $profile->url)); exit; } // }}} } if (isset($_GET['list'])) { // {{{ $params = array_merge(array('repository' => '', 'category' => '', 'profile' => ''), $_GET); $smarty->assign('category', $params['category']); $smarty->assign('profile', $params['profile']);
public function action_import_profile($input) { global $tikilib, $access; $access->check_permission('tiki_p_admin'); $transaction = $tikilib->begin(); $installer = new Tiki_Profile_Installer(); $yaml = $input->yaml->string(); $name = "tracker_import:" . md5($yaml); $profile = Tiki_Profile::fromString('{CODE(caption="yaml")}' . "\n" . $yaml . "\n" . '{CODE}', $name); if ($installer->isInstallable($profile) == true) { if ($installer->isInstalled($profile) == true) { $installer->forget($profile); } $installer->install($profile); $feedback = $installer->getFeedback(); $transaction->commit(); return $feedback; } else { return false; } }