Example #1
0
 private function init()
 {
     $conn = $this->container->get('doctrine.dbal.default_connection');
     /** @var \ZikulaKernel $kernel */
     $kernel = $this->container->get('kernel');
     $res = $conn->executeQuery("SELECT name FROM modules WHERE name = 'ZikulaExtensionsModule'");
     $result = $res->fetch();
     if ($result) {
         // nothing to do, already converted.
         return '';
     }
     // remove event handlers that were replaced by DependencyInjection
     $conn->executeQuery("DELETE FROM module_vars WHERE modname = '/EventHandlers' AND name IN ('Extensions', 'Users', 'Search', 'Settings')");
     // remove old Errors module from modules table (uninstall and delete)
     $conn->executeQuery("DELETE FROM modules WHERE name = 'Errors'");
     // rename modules in tables: modules, module_vars, group_perms
     $oldModuleNames = array('Admin', 'Blocks', 'Categories', 'Extensions', 'Groups', 'Mailer', 'PageLock', 'Permissions', 'Search', 'SecurityCenter', 'Settings', 'Theme', 'Users');
     foreach ($oldModuleNames as $module) {
         $conn->executeQuery("UPDATE modules SET name = 'Zikula{$module}Module', directory = 'Zikula/Module/{$module}Module' WHERE name = '{$module}'");
         $conn->executeQuery("UPDATE module_vars SET modname = 'Zikula{$module}Module' WHERE modname = '{$module}'");
         $strlen = strlen($module) + 1;
         $conn->executeQuery("UPDATE group_perms SET component = CONCAT('Zikula{$module}Module', SUBSTRING(component, {$strlen})) WHERE component LIKE '{$module}%'");
     }
     // rename themes in tables: themes
     $oldThemeNames = array('Andreas08', 'Atom', 'SeaBreeze', 'Mobile', 'Printer');
     foreach ($oldThemeNames as $theme) {
         $conn->executeQuery("UPDATE themes SET name = 'Zikula{$theme}Theme', directory = 'Zikula/Theme/{$theme}Theme' WHERE name = '{$theme}'");
     }
     $conn->executeQuery("UPDATE themes SET name = 'ZikulaRssTheme', directory = 'Zikula/Theme/RssTheme' WHERE name = 'RSS'");
     // update 'Users' -> 'ZikulaUsersModule' in all the hook tables
     $sqls = array();
     $sqls[] = "UPDATE hook_area SET owner = 'ZikulaUsersModule' WHERE owner = 'Users'";
     $sqls[] = "UPDATE hook_binding SET sowner = 'ZikulaUsersModule' WHERE sowner = 'Users'";
     $sqls[] = "UPDATE hook_runtime SET sowner = 'ZikulaUsersModule' WHERE sowner = 'Users'";
     $sqls[] = "UPDATE hook_subscriber SET owner = 'ZikulaUsersModule' WHERE owner = 'Users'";
     foreach ($sqls as $sql) {
         $conn->executeQuery($sql);
     }
     // update default theme name
     $conn->executeQuery("UPDATE module_vars SET value = 's:20:\"ZikulaAndreas08Theme\";' WHERE modname = 'ZConfig' AND name = 'Default_Theme'");
     // confirm custom module urls are valid with new routes, reset if not
     $modules = $conn->fetchAll("SELECT * FROM modules");
     foreach ($modules as $module) {
         $path = realpath($kernel->getRootDir() . '/../' . $module['url']);
         if (is_dir($path)) {
             $meta = \Zikula\Module\ExtensionsModule\Util::getVersionMeta($module['name']);
             $conn->executeQuery("UPDATE modules SET url = '{$meta['url']}' WHERE id = {$modules['id']}");
         }
     }
     // ensure data in modules:capabilities is valid
     $conn->executeQuery("UPDATE `modules` SET `capabilities`='a:0:{}' WHERE `capabilities`=''");
     // install Bundles table
     $boot = new \Zikula\Bundle\CoreBundle\Bundle\Bootstrap();
     $helper = new \Zikula\Bundle\CoreBundle\Bundle\Helper\BootstrapHelper($boot->getConnection($kernel));
     $helper->createSchema();
     $helper->load();
     $bundles = array();
     // this neatly autoloads
     $boot->getPersistedBundles($kernel, $bundles);
 }
Example #2
0
 /**
  * Regenerates the theme list
  * @return bool true
  * @throws \Exception
  */
 public static function regenerate()
 {
     $boot = new \Zikula\Bundle\CoreBundle\Bundle\Bootstrap();
     $helper = new \Zikula\Bundle\CoreBundle\Bundle\Helper\BootstrapHelper($boot->getConnection(ServiceUtil::getManager()->get('kernel')));
     // sync the filesystem and the bundles table
     $helper->load();
     // Get all themes on filesystem
     $filethemes = array();
     $scanner = new Scanner();
     $scanner->scan(array('themes'), 4);
     $newThemes = $scanner->getThemesMetaData();
     foreach ($newThemes as $name => $theme) {
         foreach ($theme->getPsr0() as $ns => $path) {
             ZLoader::addPrefix($ns, $path);
         }
         foreach ($theme->getPsr4() as $ns => $path) {
             ZLoader::addPrefixPsr4($ns, $path);
         }
         $class = $theme->getClass();
         /** @var $bundle \Zikula\Core\AbstractTheme */
         $bundle = new $class();
         $class = $bundle->getVersionClass();
         $version = new $class($bundle);
         $version['name'] = $bundle->getName();
         $array = $version->toArray();
         unset($array['id']);
         $directory = explode('/', $bundle->getRelativePath());
         array_shift($directory);
         $array['directory'] = implode('/', $directory);
         // loads the gettext domain for theme
         ZLanguage::bindThemeDomain($bundle->getName());
         $array['type'] = 3;
         $array['state'] = 1;
         $array['contact'] = 3;
         $array['xhtml'] = 1;
         $filethemes[$bundle->getName()] = $array;
     }
     $dirArray = FileUtil::getFiles('themes', false, true, null, 'd');
     foreach ($dirArray as $dir) {
         // Work out the theme type
         if (file_exists("themes/{$dir}/version.php")) {
             $themetype = 3;
             // set defaults
             $themeversion['name'] = preg_replace('/_/', ' ', $dir);
             $themeversion['displayname'] = preg_replace('/_/', ' ', $dir);
             $themeversion['version'] = '0';
             $themeversion['description'] = '';
             include "themes/{$dir}/version.php";
         } else {
             // anything else isn't a theme
             continue;
         }
         $filethemes[$themeversion['name']] = array('directory' => $dir, 'name' => $themeversion['name'], 'type' => 3, 'displayname' => isset($themeversion['displayname']) ? $themeversion['displayname'] : $themeversion['name'], 'version' => isset($themeversion['version']) ? $themeversion['version'] : '1.0.0', 'description' => isset($themeversion['description']) ? $themeversion['description'] : $themeversion['displayname'], 'admin' => isset($themeversion['admin']) ? (int) $themeversion['admin'] : '0', 'user' => isset($themeversion['user']) ? (int) $themeversion['user'] : '******', 'system' => isset($themeversion['system']) ? (int) $themeversion['system'] : '0', 'state' => isset($themeversion['state']) ? $themeversion['state'] : ThemeUtil::STATE_ACTIVE, 'contact' => isset($themeversion['contact']) ? $themeversion['contact'] : '', 'xhtml' => isset($themeversion['xhtml']) ? (int) $themeversion['xhtml'] : 1);
         unset($themeversion);
         unset($themetype);
     }
     $sm = ServiceUtil::getManager();
     $entityManager = $sm->get('doctrine.entitymanager');
     $dbthemes = array();
     $themeEntities = $entityManager->getRepository('ZikulaThemeModule:ThemeEntity')->findAll();
     foreach ($themeEntities as $entity) {
         $entity = $entity->toArray();
         $dbthemes[$entity['name']] = $entity;
     }
     // See if we have lost any themes since last generation
     foreach ($dbthemes as $name => $themeinfo) {
         if (empty($filethemes[$name])) {
             // delete a running configuration
             try {
                 ModUtil::apiFunc('ZikulaThemeModule', 'admin', 'deleterunningconfig', array('themename' => $name));
             } catch (\Exception $e) {
                 if (\System::isInstalling()) {
                     // silent fail when installing or upgrading
                 } else {
                     throw $e;
                 }
             }
             // delete item from db
             $item = $entityManager->getRepository('ZikulaThemeModule:ThemeEntity')->findOneBy(array('name' => $name));
             $entityManager->remove($item);
             unset($dbthemes[$name]);
         }
     }
     // See if we have gained any themes since last generation,
     // or if any current themes have been upgraded
     foreach ($filethemes as $name => $themeinfo) {
         if (empty($dbthemes[$name])) {
             // new theme
             $themeinfo['state'] = ThemeUtil::STATE_ACTIVE;
             // add item to db
             $item = new ThemeEntity();
             $item->merge($themeinfo);
             $entityManager->persist($item);
         }
     }
     // see if any themes have changed
     foreach ($filethemes as $name => $themeinfo) {
         if (isset($dbthemes[$name])) {
             if ($themeinfo['directory'] != $dbthemes[$name]['directory'] || $themeinfo['type'] != $dbthemes[$name]['type'] || $themeinfo['version'] != $dbthemes[$name]['version'] || $themeinfo['admin'] != $dbthemes[$name]['admin'] || $themeinfo['user'] != $dbthemes[$name]['user'] || $themeinfo['system'] != $dbthemes[$name]['system'] || $themeinfo['state'] != $dbthemes[$name]['state'] || $themeinfo['contact'] != $dbthemes[$name]['contact'] || $themeinfo['xhtml'] != $dbthemes[$name]['xhtml']) {
                 $themeinfo['id'] = $dbthemes[$name]['id'];
                 // update item
                 /** @var $item ThemeEntity */
                 $item = $entityManager->getRepository('ZikulaThemeModule:ThemeEntity')->find($themeinfo['id']);
                 $item->merge($themeinfo);
             }
         }
     }
     $entityManager->flush();
     return true;
 }