protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // Select $query->select($this->getState('list.select', 'a.id as id,' . 'a.title as title,' . 'a.name as name,' . 'a.folder as folder,' . 'a.type as type,' . 'a.storage as storage,' . 'a.storage_table as storage_table,' . 'a.storage_field as storage_field,' . 'a.storage_field2 as storage_field2,' . 'a.published as published,' . 'a.ordering as ordering,' . 'a.checked_out as checked_out,' . 'a.checked_out_time as checked_out_time')); // From $query->from('`#__cck_core_fields` AS a'); // Join Folder $query->select('c.title AS folder_title, c.color AS folder_color, c.introchar AS folder_introchar, c.colorchar AS folder_colorchar'); $query->join('LEFT', '#__cck_core_folders AS c ON c.id = a.folder'); $query->select('d.title AS folder_parent_title, d.id AS folder_parent'); $query->join('LEFT', '#__cck_core_folders AS d ON d.id = c.parent_id'); // Join User $query->select('u.name AS editor'); $query->join('LEFT', '#__users AS u ON u.id = a.checked_out'); // Filder Folder $folderId = $this->getState('filter.folder'); if (is_numeric($folderId)) { $folders = Helper_Folder::getBranch($folderId, ','); if ($folders) { $query->where('a.folder IN (' . $folders . ')'); } } // Filter State $published = $this->getState('filter.state', 1); if (is_numeric($published) && $published >= 0) { $query->where('a.published = ' . (int) $published); } // Filter Type $type = trim($this->getState('filter.type')); if (is_string($type) && $type != '') { $query->where('a.type = "' . (string) $type . '"'); } // Filter Search $location = $this->getState('filter.location'); $search = $this->getState('filter.search'); if (!empty($search)) { switch ($location) { case 'id': $where = strpos($search, ',') !== false ? 'a.id IN (' . $search . ')' : 'a.id = ' . (int) $search; $query->where($where); break; case 'folder_id': $where = strpos($search, ',') !== false ? 'a.folder IN (' . $search . ')' : 'a.folder = ' . (int) $search; $query->where($where); break; default: $search = $db->quote('%' . $db->escape($search, true) . '%'); $query->where('a.' . $location . ' LIKE ' . $search); break; } } // Group By $query->group('a.id'); // Order By $query->order($db->escape($this->state->get('list.ordering', 'a.title') . ' ' . $this->state->get('list.direction', 'ASC'))); return $query; }
protected function getListQuery() { $db = $this->getDbo(); $query = $db->getQuery(true); // Select $query->select($this->getState('list.select', 'a.id as id,' . 'a.title as title,' . 'a.name as name,' . 'a.color as color,' . 'a.introchar as introchar,' . 'a.colorchar as colorchar,' . 'a.depth as depth,' . 'a.lft as lft,' . 'a.rgt as rgt,' . 'a.featured as featured,' . 'a.home as home,' . 'a.published as published,' . 'a.checked_out as checked_out,' . 'a.checked_out_time as checked_out_time')); // From $query->from('`#__cck_core_folders` AS a'); // Join Parent $query->join('CROSS', '#__cck_core_folders AS parent'); // Join User $query->select('u.name AS editor'); $query->join('LEFT', '#__users AS u ON u.id = a.checked_out'); // Where $query->where('a.lft BETWEEN parent.lft AND parent.rgt'); // Filder Folder $folderId = $this->getState('filter.folder'); if (is_numeric($folderId)) { $folders = Helper_Folder::getBranch($folderId, ','); if ($folders) { $query->where('a.id IN (' . $folders . ')'); } } // Filter State $published = $this->getState('filter.state'); if (is_numeric($published) && $published >= 0) { $query->where('a.published = ' . (int) $published); } // Filter Depth $depth = $this->getState('filter.depth'); if (is_numeric($depth) && $depth > 0) { $query->where('a.depth <= ' . (int) $depth); } // Filter Search $location = $this->getState('filter.location'); $search = $this->getState('filter.search'); if (!empty($search)) { switch ($location) { case 'id': $where = strpos($search, ',') !== false ? 'a.id IN (' . $search . ')' : 'a.id = ' . (int) $search; $query->where($where); break; default: $search = $db->quote('%' . $db->escape($search, true) . '%'); $query->where('a.' . $location . ' LIKE ' . $search); break; } } // Group By $query->group('a.id'); // Order By $query->order($db->escape($this->state->get('list.ordering', 'lft') . ' ' . $this->state->get('list.direction', 'ASC'))); return $query; }
public function prepareExport($id = 0, $elements = array(), $dependencies = array(), $options = array()) { $config = JFactory::getConfig(); $tmp_path = $config->get('tmp_path'); $tmp_dir = uniqid('cck_'); $path = $tmp_path . '/' . $tmp_dir; $folders = isset($elements['subfolders']) ? Helper_Folder::getBranch($id, ',') : $id; $folders = JCckDatabase::loadObjectList('SELECT * FROM #__cck_core_folders WHERE id IN (' . (string) $folders . ') ORDER BY lft'); if (!@$folders[0]) { return; } $isApp = false; $isCck = false; $name = $folders[0]->name; if (!$name) { return; } // Core jimport('joomla.filesystem.file'); jimport('cck.base.install.export'); $data = array('root' => $path, 'root_content' => $path . '/content', 'root_elements' => $path . '/elements', 'root_extensions' => $path . '/extensions', 'root_sql' => $path . '/sql', 'root_category' => '', 'elements' => array(), 'db_prefix' => $config->get('dbprefix')); $extensions = array(0 => (object) array('type' => 'plugin', 'id' => 'plg_system_blank', 'group' => 'system', '_file' => 'plg_system_blank.zip')); $data['folders'] = JCckDatabase::loadObjectList('SELECT id, name, path FROM #__cck_core_folders WHERE lft', 'id'); $data['folders2'] = JCckDatabase::loadObjectList('SELECT id, name, path FROM #__cck_core_folders WHERE lft', 'name'); $data['plugins'] = CCK_Export::getCorePlugins(); $data['plugins']['cck_field_live']['stage'] = true; $data['processings'] = JCckDatabase::loadObjectList('SELECT * FROM #__cck_more_processings', 'id'); $data['processings2'] = JCckDatabase::loadObjectList('SELECT folder FROM #__cck_more_processings', 'folder'); $data['styles'] = JCckDatabase::loadObjectList('SELECT * FROM #__template_styles', 'id'); $data['tables'] = array_flip(JCckDatabase::loadColumn('SHOW TABLES')); $data['tables_excluded'] = CCK_Export::getCoreTables(); $data['variations'] = array('empty' => true, 'joomla' => true, 'seb_css3' => true, 'seb_css3b' => true); // Copyright if (JCckDatabase::loadResult('SELECT extension_id FROM #__extensions WHERE type = "component" AND element = "com_cck_packager"') > 0) { $params = JComponentHelper::getParams('com_cck_packager'); $copyright = $params->get('copyright'); } else { $copyright = ''; } CCK_Export::createDir($data['root_content']); CCK_Export::createDir($data['root_elements']); CCK_Export::createDir($data['root_extensions']); CCK_Export::createDir($data['root_sql']); if (isset($dependencies['categories'])) { $data['root_category'] = CCK_Export::exportRootCategory($folders['0'], $data, $extensions); } if (isset($dependencies['menu'])) { $data['root_menu'] = CCK_Export::exportMenus($dependencies['menu'], $data, $extensions); } foreach ($folders as $i => $folder) { if ($i == 0) { if ($folder->path && $folder->path != $folder->name) { $branch = explode('/', $folder->path); array_pop($branch); if (count($branch)) { $parent_id = 2; foreach ($branch as $k => $v) { $elem = JCckDatabase::loadObject('SELECT * FROM #__cck_core_folders WHERE name = "' . (string) $v . '" AND parent_id = ' . (int) $parent_id); $parent_id = $elem->id; CCK_Export::createDir($data['root_elements'] . '/folder' . 's'); CCK_Export::exportElement('folder', $elem, $data, $extensions, 0); } } } } CCK_Export::exportElements('folder', $folders, $data, $extensions, 0, $copyright); if (isset($elements['fields'])) { $fields = JCckDatabase::loadObjectList('SELECT a.* FROM #__cck_core_fields AS a WHERE a.folder = ' . (int) $folder->id); CCK_Export::exportElements('field', $fields, $data, $extensions, 500, $copyright); } if (isset($elements['templates'])) { $templates = JCckDatabase::loadObjectList('SELECT a.* FROM #__cck_core_templates AS a WHERE a.folder = ' . (int) $folder->id); CCK_Export::exportElements('template', $templates, $data, $extensions, 0, $copyright); } if (isset($elements['types'])) { $types = JCckDatabase::loadObjectList('SELECT a.* FROM #__cck_core_types AS a WHERE a.folder = ' . (int) $folder->id); if (count($types)) { $isApp = true; } CCK_Export::exportElements('type', $types, $data, $extensions, 0, $copyright); } if (isset($elements['searchs'])) { $searchs = JCckDatabase::loadObjectList('SELECT a.* FROM #__cck_core_searchs AS a WHERE a.folder = ' . (int) $folder->id); if (count($searchs)) { $isApp = true; } CCK_Export::exportElements('search', $searchs, $data, $extensions, 0, $copyright); } } if (count($data['elements']['tables'])) { CCK_Export::exportTables($data); } if (count($data['elements']['processings'])) { $isCck = true; CCK_Export::exportProcessings($data, $extensions); } // Name & Root if ($isApp) { $filename = 'app_cck_' . $name; } else { if ($isCck) { $filename = 'cck_' . $name; } else { $filename = $name; } if (isset($dependencies['categories']) && file_exists($data['root_content'] . '/joomla_category')) { $items = JFolder::files($data['root_content'] . '/joomla_category', '\\.xml$'); if (count($items) == 1 && isset($items[0]) && $data['root_category'] != '' && JFile::stripExt($items[0]) == $data['root_category']) { JFolder::delete($data['root_content'] . '/joomla_category'); } } } // Elements if ($copyright) { CCK_Export::update($data['root_elements'], $copyright); } // Xml $folders[0]->description = 'SEBLOD 3.x ' . $folders[0]->title . ' App - www.seblod.com'; $folders[0]->name = $filename; $folders[0]->title = 'pkg_' . $folders['0']->name; $manifest = NULL; $xml = CCK_Export::preparePackage($folders[0]); if (is_object($xml)) { $manifest = JPATH_ADMINISTRATOR . '/manifests/packages/pkg_' . $filename . '.xml'; if (is_file($manifest)) { if ($copyright) { CCK_Export::update($manifest, $copyright); } $manifest = JCckDev::fromXML($manifest); $tags = array('copyright', 'creationDate', 'description', 'packager', 'packageurl', 'version'); if (is_object($manifest)) { foreach ($tags as $tag) { if (isset($manifest->{$tag}) && isset($xml->{$tag}) && $manifest->{$tag} != $xml->{$tag}) { $xml->{$tag} = (string) $manifest->{$tag}; } } } } } // Filename $path_zip = $tmp_path . '/' . $filename; if (isset($options['filename_version']) && $options['filename_version']) { $path_zip .= '_' . (isset($manifest->version) ? $manifest->version : '1.0.0'); } if (isset($options['filename_date']) && $options['filename_date']) { $path_zip .= '_' . JFactory::getDate()->format('Y_m_d'); } $path_zip .= '.zip'; // Script if (is_file(JPATH_ADMINISTRATOR . '/manifests/packages/' . $name . '/pkg_script.php')) { if ($copyright) { CCK_Export::update(JPATH_ADMINISTRATOR . '/manifests/packages/' . $name . '/pkg_script.php', $copyright); } } // todo: else $script = $xml->addChild('scriptfile', 'pkg_script.php'); JFile::copy(JPATH_SITE . '/libraries/cck/development/apps/script.php', $path . '/pkg_script.php'); $buffer = JFile::read($path . '/pkg_script.php'); $buffer = str_replace('%class%', $filename, $buffer); JFile::write($path . '/pkg_script.php', $buffer); if ($copyright) { CCK_Export::update($path . '/pkg_script.php', $copyright); } // Extensions $files = $xml->addChild('files'); $files->addAttribute('folder', 'extensions'); $names = array(); foreach ($extensions as $ext) { $file = $files->addChild('file', $ext->_file); $names[$ext->_file] = ''; foreach ($ext as $k => $v) { if ($k != '_file') { $file->addAttribute($k, $v); } } } if (isset($manifest->files->file) && count($manifest->files->file)) { foreach ($manifest->files->file as $f) { $f_name = (string) $f; if (!isset($names[$f_name])) { $f_file = array('_' => $f_name); $f_client = (string) $f->attributes()->client; $f_id = (string) $f->attributes()->id; $f_type = (string) $f->attributes()->type; if ($f_type == 'template') { $f_file['lang_root'] = JPATH_SITE; $f_file['src'] = JPATH_SITE . '/templates/' . (strpos($f_id, 'tpl_') !== false && strpos($f_id, 'tpl_') == 0 ? substr($f_id, 4) : $f_id); $f_file['lang_src'] = $f_file['src'] . '/templateDetails.xml'; } else { // todo } if (is_array($f_file) && $f_file['src'] != '') { CCK_Export::exportFile($f_type, $data, $f_file, array(), $copyright); $file = $files->addChild('file', $f_name); $file->addAttribute('type', $f_type); $file->addAttribute('id', $f_id); $file->addAttribute('client', $f_client); } } } } // Languages $dest = CCK_Export::createDir($path . '/languages'); $languages = JCckDatabase::loadColumn('SELECT element FROM #__extensions WHERE type = "language" AND client_id = 0'); if (count($languages)) { $lang = $xml->addChild('languages'); $lang->addAttribute('folder', 'languages'); foreach ($languages as $language) { if (is_file(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.ini')) { $l = $lang->addChild('language', $language . '/' . $language . '.pkg_' . $filename . '.ini'); $l->addAttribute('tag', $language); CCK_Export::createDir($path . '/languages/' . $language); if ($copyright) { CCK_Export::update(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.ini', $copyright); } JFile::copy(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.ini', $dest . '/' . $language . '/' . $language . '.pkg_' . $filename . '.ini'); } if (is_file(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.sys.ini')) { $l = $lang->addChild('language', $language . '/' . $language . '.pkg_' . $filename . '.sys.ini'); $l->addAttribute('tag', $language); CCK_Export::createDir($path . '/languages/' . $language); if ($copyright) { CCK_Export::update(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.sys.ini', $copyright); } JFile::copy(JPATH_SITE . '/language/' . $language . '/' . $language . '.pkg_' . $filename . '.sys.ini', $dest . '/' . $language . '/' . $language . '.pkg_' . $filename . '.sys.ini'); } } } // Media if (file_exists(JPATH_SITE . '/media/cck/apps/' . $name)) { JFolder::copy(JPATH_SITE . '/media/cck/apps/' . $name, $path . '/media'); } // Manifest JFile::copy(JPATH_LIBRARIES . '/cck/base/install/_plg_system_blank.zip', $path . '/extensions/plg_system_blank.zip'); if (is_object($manifest) && isset($manifest->updateservers)) { $servers = $xml->addChild('updateservers'); if (count($manifest->updateservers->server)) { foreach ($manifest->updateservers->server as $server) { $s = $servers->addChild('server', (string) $server); $s->addAttribute('type', (string) $server->attributes()->type); $s->addAttribute('priority', (string) $server->attributes()->priority); $s->addAttribute('name', (string) $server->attributes()->name); } } } CCK_Export::clean($path); CCK_Export::createFile($path . '/pkg_' . $filename . '.xml', '<?xml version="1.0" encoding="utf-8"?>' . $xml->asIndentedXML()); if ($copyright) { CCK_Export::update($path . '/pkg_' . $filename . '.xml', $copyright); } return CCK_Export::zip($path, $path_zip); }
protected function getListQuery() { $app = JFactory::getApplication(); $db = $this->getDbo(); $query = $db->getQuery(true); // Select $query->select($this->getState('list.select', 'a.id as id,' . 'a.title as title,' . 'a.name as name,' . 'a.folder as folder,' . 'a.template_admin as template_admin,' . 'a.template_site as template_site,' . 'a.template_intro as template_intro,' . 'a.template_content as template_content,' . 'a.published as published,' . 'a.location as location,' . 'a.storage_location as storage_location,' . 'a.checked_out as checked_out,' . 'a.checked_out_time as checked_out_time')); // From $query->from('`#__cck_core_types` AS a'); // Join Folder $query->select('c.title AS folder_title, c.color AS folder_color, c.introchar AS folder_introchar, c.colorchar AS folder_colorchar'); $query->join('LEFT', '#__cck_core_folders AS c ON c.id = a.folder'); $query->select('d.title AS folder_parent_title, d.id AS folder_parent'); $query->join('LEFT', '#__cck_core_folders AS d ON d.id = c.parent_id'); // Join User $query->select('u.name AS editor'); $query->join('LEFT', '#__users AS u ON u.id = a.checked_out'); // Where if ($app->input->get('goto', '') == 'form') { $folderId = ''; $published = 1; $location = ''; $search = ''; } else { $folderId = $this->getState('filter.folder'); $published = $this->getState('filter.state'); $location = $this->getState('filter.location'); $search = $this->getState('filter.search'); } // Filder Folder if (is_numeric($folderId)) { $folders = Helper_Folder::getBranch($folderId, ','); if ($folders) { $query->where('a.folder IN (' . $folders . ')'); } } // Filter Type $type = $this->getState('filter.type'); if (is_string($type) && $type != '') { $query->where('a.storage_location = "' . (string) $type . '"'); } // Filter Client $client = $this->getState('filter.client'); if ($client == 'both') { $query->where('a.location = ""'); } elseif ($client) { if (strpos($client, '_both') !== false) { $query->where('( a.location = "' . (string) str_replace('_both', '', $client) . '" OR a.location = "" )'); } else { $query->where('a.location = "' . (string) $client . '"'); } } // Filter State if (is_numeric($published) && $published >= 0) { $query->where('a.published = ' . (int) $published); } // Filter Search if (!empty($search)) { switch ($location) { case 'id': $where = strpos($search, ',') !== false ? 'a.id IN (' . $search . ')' : 'a.id = ' . (int) $search; $query->where($where); break; case 'folder_id': $where = strpos($search, ',') !== false ? 'a.folder IN (' . $search . ')' : 'a.folder = ' . (int) $search; $query->where($where); break; case 'field_name': $search = $db->quote('%' . $db->escape($search, true) . '%'); $where = 'f.name LIKE ' . $search; $query->join('LEFT', '#__cck_core_type_field AS e ON e.typeid = a.id'); $query->join('LEFT', '#__cck_core_fields AS f ON f.id = e.fieldid'); $query->where($where); break; case 'template_name': $search = $db->quote('%' . $db->escape($search, true) . '%'); $query->join('LEFT', '#__template_styles AS e ON e.id = a.template_admin'); $query->join('LEFT', '#__template_styles AS f ON f.id = a.template_site'); $query->join('LEFT', '#__template_styles AS g ON g.id = a.template_intro'); $query->join('LEFT', '#__template_styles AS h ON h.id = a.template_content'); $where = '( e.template LIKE ' . $search . ' OR f.template LIKE ' . $search . ' OR g.template LIKE ' . $search . ' OR h.template LIKE ' . $search . ')'; $query->where($where); break; default: $search = $db->quote('%' . $db->escape($search, true) . '%'); $query->where('a.' . $location . ' LIKE ' . $search); break; } } // Group By $query->group('a.id'); // Order By $query->order($db->escape($this->state->get('list.ordering', 'title') . ' ' . $this->state->get('list.direction', 'ASC'))); return $query; }