diff --git a/.gitignore b/.gitignore index e949d8c80b82..2bf954a0e72e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,18 @@ -*~ -/.project -/.settings -/.buildpath +# IDE & System Related Files # +.buildpath +.project +.settings +.DS_Store +.idea + +# Local System Files (i.e. cache, logs, etc.) # +/administrator/cache +/cache +/logs +/tmp /configuration.php +/.htaccess +/web.config + +# Test Related Files # +/phpunit.xml diff --git a/administrator/components/com_admin/views/help/tmpl/default.php b/administrator/components/com_admin/views/help/tmpl/default.php index a710296e2e21..f510c0230161 100644 --- a/administrator/components/com_admin/views/help/tmpl/default.php +++ b/administrator/components/com_admin/views/help/tmpl/default.php @@ -39,7 +39,7 @@ </div> </div> <div class="span9"> - <iframe name="helpFrame" height="70%" src="<?php echo $this->page;?>" class="helpFrame table table-bordered"></iframe> + <iframe name="helpFrame" height="2100px" src="<?php echo $this->page;?>" class="helpFrame table table-bordered"></iframe> </div> </div> <input class="textarea" type="hidden" name="option" value="com_admin" /> diff --git a/administrator/components/com_contact/config.xml b/administrator/components/com_contact/config.xml index 03e85c9f764a..d38e8650ff87 100644 --- a/administrator/components/com_contact/config.xml +++ b/administrator/components/com_contact/config.xml @@ -499,27 +499,39 @@ label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_CONTACT_FIELD_CONFIG_TABLE_OF_CONTACTS_DESC" > - <field name="show_pagination_limit" type="radio" - default="1" - class="btn-group" - description="JGLOBAL_DISPLAY_SELECT_DESC" - label="JGLOBAL_DISPLAY_SELECT_LABEL" + <field + name="filter_field" + type="radio" + class="btn-group" + default="1" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" > - - <option value="0">JHIDE</option> + <option value="hide">JHIDE</option> <option value="1">JSHOW</option> - </field> + </field> - <field name="show_headings" type="radio" - default="1" - class="btn-group" - description="JGLOBAL_SHOW_HEADINGS_DESC" - label="JGLOBAL_SHOW_HEADINGS_LABEL" - > + <field name="show_pagination_limit" type="radio" + default="1" + class="btn-group" + description="JGLOBAL_DISPLAY_SELECT_DESC" + label="JGLOBAL_DISPLAY_SELECT_LABEL" + > - <option value="0">JHIDE</option> - <option value="1">JSHOW</option> - </field> + <option value="0">JHIDE</option> + <option value="1">JSHOW</option> + </field> + + <field name="show_headings" type="radio" + default="1" + class="btn-group" + description="JGLOBAL_SHOW_HEADINGS_DESC" + label="JGLOBAL_SHOW_HEADINGS_LABEL" + > + + <option value="0">JHIDE</option> + <option value="1">JSHOW</option> + </field> <field name="show_position_headings" type="radio" default="1" diff --git a/administrator/components/com_content/views/articles/tmpl/modal.php b/administrator/components/com_content/views/articles/tmpl/modal.php index 11675f631e17..9414a3d551bc 100644 --- a/administrator/components/com_content/views/articles/tmpl/modal.php +++ b/administrator/components/com_content/views/articles/tmpl/modal.php @@ -32,19 +32,23 @@ <label for="filter_search"> <?php echo JText::_('JSEARCH_FILTER_LABEL'); ?> </label> + </div> + <div class="btn-group pull-left"> <input type="text" name="filter_search" id="filter_search" value="<?php echo $this->escape($this->state->get('filter.search')); ?>" size="30" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" /> </div> <div class="btn-group pull-left"> <button type="submit" class="btn hasTooltip" data-placement="bottom" title="<?php echo JText::_('JSEARCH_FILTER_SUBMIT'); ?>"> - <i class="icon-search"></i></button> + <span class="icon-search"></span><?php echo ' ' . JText::_('JSEARCH_FILTER_SUBMIT'); ?></button> <button type="button" class="btn hasTooltip" data-placement="bottom" title="<?php echo JText::_('JSEARCH_FILTER_CLEAR'); ?>" onclick="document.id('filter_search').value='';this.form.submit();"> - <i class="icon-remove"></i></button> + <span class="icon-remove"></span><?php echo ' ' . JText::_('JSEARCH_FILTER_CLEAR'); ?></button> </div> - <input onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('0', '<?php echo $this->escape(addslashes(JText::_('COM_CONTENT_SELECT_AN_ARTICLE'))); ?>', null, null);" class="btn" type="button" value="<?php echo JText::_('COM_CONTENT_NONE'); ?>" /> + <?php if ($app->isAdmin()) : ?> + <input onclick="if (window.parent) window.parent.<?php echo $this->escape($function);?>('0', '<?php echo $this->escape(addslashes(JText::_('COM_CONTENT_SELECT_AN_ARTICLE'))); ?>', null, null);" class="btn" type="button" value="<?php echo JText::_('COM_CONTENT_NONE'); ?>" /> + <?php endif; ?> <div class="clearfix"></div> </div> <hr class="hr-condensed" /> - <div class="filters"> + <div class="filters pull-left"> <select name="filter_access" class="input-medium" onchange="this.form.submit()"> <option value=""><?php echo JText::_('JOPTION_SELECT_ACCESS');?></option> <?php echo JHtml::_('select.options', JHtml::_('access.assetgroups'), 'value', 'text', $this->state->get('filter.access'));?> diff --git a/administrator/components/com_finder/config.xml b/administrator/components/com_finder/config.xml index 478bd10abd82..1508d2af03de 100644 --- a/administrator/components/com_finder/config.xml +++ b/administrator/components/com_finder/config.xml @@ -225,6 +225,7 @@ label="COM_FINDER_CONFIG_STEMMER_LABEL" description="COM_FINDER_CONFIG_STEMMER_DESCRIPTION" > <option value="porter_en">COM_FINDER_CONFIG_STEMMER_PORTER_EN</option> + <option value="fr">COM_FINDER_CONFIG_STEMMER_FR</option> <option value="snowball">COM_FINDER_CONFIG_STEMMER_SNOWBALL</option> </field> <field diff --git a/administrator/components/com_finder/helpers/indexer/helper.php b/administrator/components/com_finder/helpers/indexer/helper.php index 84c088b0b77b..2dc933c51ee8 100644 --- a/administrator/components/com_finder/helpers/indexer/helper.php +++ b/administrator/components/com_finder/helpers/indexer/helper.php @@ -79,8 +79,8 @@ public static function tokenize($input, $lang, $phrase = false) * Parsing the string input into terms is a multi-step process. * * Regexes: - * 1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma. - * 2. Remove plus, dash, period, and comma characters located before letter characters. + * 1. Remove everything except letters, numbers, quotes, apostrophe, plus, dash, period, and comma. + * 2. Remove plus, dash, period, and comma characters located before letter characters. * 3. Remove plus, dash, period, and comma characters located after other characters. * 4. Remove plus, period, and comma characters enclosed in alphabetical characters. Ungreedy. * 5. Remove orphaned apostrophe, plus, dash, period, and comma characters. @@ -348,7 +348,7 @@ public static function getDefaultLanguage() { static $lang; - // Get the default language. + // We need to go to com_languages to get the site default language, it's the best we can guess. if (empty($lang)) { $lang = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); diff --git a/administrator/components/com_finder/helpers/indexer/indexer.php b/administrator/components/com_finder/helpers/indexer/indexer.php index 0a89e0e4e11f..50cd34440085 100644 --- a/administrator/components/com_finder/helpers/indexer/indexer.php +++ b/administrator/components/com_finder/helpers/indexer/indexer.php @@ -315,137 +315,140 @@ protected function tokenizeToDB($input, $context, $lang, $format) $count = 0; $buffer = null; - // If the input is a resource, batch the process out. - if (is_resource($input)) + if (!empty($input)) { - // Batch the process out to avoid memory limits. - while (!feof($input)) + // If the input is a resource, batch the process out. + if (is_resource($input)) { - // Read into the buffer. - $buffer .= fread($input, 2048); - - // If we haven't reached the end of the file, seek to the last - // space character and drop whatever is after that to make sure - // we didn't truncate a term while reading the input. - if (!feof($input)) + // Batch the process out to avoid memory limits. + while (!feof($input)) { - // Find the last space character. - $ls = strrpos($buffer, ' '); + // Read into the buffer. + $buffer .= fread($input, 2048); - // Adjust string based on the last space character. - if ($ls) + // If we haven't reached the end of the file, seek to the last + // space character and drop whatever is after that to make sure + // we didn't truncate a term while reading the input. + if (!feof($input)) { - // Truncate the string to the last space character. - $string = substr($buffer, 0, $ls); - - // Adjust the buffer based on the last space for the - // next iteration and trim. - $buffer = JString::trim(substr($buffer, $ls)); + // Find the last space character. + $ls = strrpos($buffer, ' '); + + // Adjust string based on the last space character. + if ($ls) + { + // Truncate the string to the last space character. + $string = substr($buffer, 0, $ls); + + // Adjust the buffer based on the last space for the + // next iteration and trim. + $buffer = JString::trim(substr($buffer, $ls)); + } + // No space character was found. + else + { + $string = $buffer; + } } - // No space character was found. + // We've reached the end of the file, so parse whatever remains. else { $string = $buffer; } - } - // We've reached the end of the file, so parse whatever remains. - else - { - $string = $buffer; - } - // Parse the input. - $string = FinderIndexerHelper::parse($string, $format); + // Parse the input. + $string = FinderIndexerHelper::parse($string, $format); - // Check the input. - if (empty($string)) - { - continue; - } + // Check the input. + if (empty($string)) + { + continue; + } - // Tokenize the input. - $tokens = FinderIndexerHelper::tokenize($string, $lang); + // Tokenize the input. + $tokens = FinderIndexerHelper::tokenize($string, $lang); - // Add the tokens to the database. - $count += $this->addTokensToDB($tokens, $context); + // Add the tokens to the database. + $count += $this->addTokensToDB($tokens, $context); - // Check if we're approaching the memory limit of the token table. - if ($count > self::$state->options->get('memory_table_limit', 30000)) - { - self::toggleTables(false); - } + // Check if we're approaching the memory limit of the token table. + if ($count > self::$state->options->get('memory_table_limit', 30000)) + { + self::toggleTables(false); + } - unset($string); - unset($tokens); + unset($string); + unset($tokens); + } } - } - // If the input is greater than 2K in size, it is more efficient to - // batch out the operation into smaller chunks of work. - elseif (strlen($input) > 2048) - { - $start = 0; - $end = strlen($input); - $chunk = 2048; - - // As it turns out, the complex regular expressions we use for - // sanitizing input are not very efficient when given large - // strings. It is much faster to process lots of short strings. - while ($start < $end) + // If the input is greater than 2K in size, it is more efficient to + // batch out the operation into smaller chunks of work. + elseif (strlen($input) > 2048) { - // Setup the string. - $string = substr($input, $start, $chunk); + $start = 0; + $end = strlen($input); + $chunk = 2048; + + // As it turns out, the complex regular expressions we use for + // sanitizing input are not very efficient when given large + // strings. It is much faster to process lots of short strings. + while ($start < $end) + { + // Setup the string. + $string = substr($input, $start, $chunk); - // Find the last space character if we aren't at the end. - $ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false); + // Find the last space character if we aren't at the end. + $ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false); - // Truncate to the last space character. - if ($ls !== false) - { - $string = substr($string, 0, $ls); - } + // Truncate to the last space character. + if ($ls !== false) + { + $string = substr($string, 0, $ls); + } + + // Adjust the start position for the next iteration. + $start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk); + + // Parse the input. + $string = FinderIndexerHelper::parse($string, $format); + + // Check the input. + if (empty($string)) + { + continue; + } - // Adjust the start position for the next iteration. - $start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk); + // Tokenize the input. + $tokens = FinderIndexerHelper::tokenize($string, $lang); + // Add the tokens to the database. + $count += $this->addTokensToDB($tokens, $context); + + // Check if we're approaching the memory limit of the token table. + if ($count > self::$state->options->get('memory_table_limit', 30000)) + { + self::toggleTables(false); + } + } + } + else + { // Parse the input. - $string = FinderIndexerHelper::parse($string, $format); + $input = FinderIndexerHelper::parse($input, $format); // Check the input. - if (empty($string)) + if (empty($input)) { - continue; + return $count; } // Tokenize the input. - $tokens = FinderIndexerHelper::tokenize($string, $lang); + $tokens = FinderIndexerHelper::tokenize($input, $lang); // Add the tokens to the database. - $count += $this->addTokensToDB($tokens, $context); - - // Check if we're approaching the memory limit of the token table. - if ($count > self::$state->options->get('memory_table_limit', 30000)) - { - self::toggleTables(false); - } + $count = $this->addTokensToDB($tokens, $context); } } - else - { - // Parse the input. - $input = FinderIndexerHelper::parse($input, $format); - - // Check the input. - if (empty($input)) - { - return $count; - } - - // Tokenize the input. - $tokens = FinderIndexerHelper::tokenize($input, $lang); - - // Add the tokens to the database. - $count = $this->addTokensToDB($tokens, $context); - } return $count; } diff --git a/administrator/components/com_finder/helpers/indexer/result.php b/administrator/components/com_finder/helpers/indexer/result.php index efa492e6cb2d..54a48ba18f92 100644 --- a/administrator/components/com_finder/helpers/indexer/result.php +++ b/administrator/components/com_finder/helpers/indexer/result.php @@ -178,6 +178,24 @@ class FinderIndexerResult */ public $type_id; + /** + * The default language for content. + * + * @var string + * @since 3.0.2 + */ + public $defaultLanguage; + + /** + * Constructor + * + * @since 3.0.3 + */ + public function __construct() + { + $this->defaultLanguage = JComponentHelper::getParams('com_languages')->get('site', 'en-GB'); + } + /** * The magic set method is used to push additional values into the elements * array in order to preserve the cleanliness of the object. @@ -395,4 +413,11 @@ public function addTaxonomy($branch, $title, $state = 1, $access = 1) // Add the node to the taxonomy branch. $this->taxonomy[$branch][$node->title] = $node; } + public function setLanguage() + { + if ($this->language = '*' || $this->language = '') + { + $this->language = $this->defaultLanguage; + } + } } diff --git a/administrator/components/com_finder/helpers/indexer/stemmer/fr.php b/administrator/components/com_finder/helpers/indexer/stemmer/fr.php new file mode 100644 index 000000000000..7ca15209dce1 --- /dev/null +++ b/administrator/components/com_finder/helpers/indexer/stemmer/fr.php @@ -0,0 +1,276 @@ +<?php +/** + * @package Joomla.Administrator + * @subpackage com_finder + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE + */ + +defined('_JEXEC') or die; + +/** + * French stemmer class for Smart Search indexer. + * + * First contributed by Eric Sanou (bobotche@hotmail.fr) + * This class is inspired in Alexis Ulrich's French stemmer code (http://alx2002.free.fr) + * + * @package Joomla.Administrator + * @subpackage com_finder + * @since 3.0 + */ +class FinderIndexerStemmerFr extends FinderIndexerStemmer +{ + /** + * Stemming rules. + * + * @var Array + * @since 3.0 + */ + private static $_stemRules = null; + + /** + * Method to stem a token and return the root. + * + * @param string $token The token to stem. + * @param string $lang The language of the token. + * + * @return string The root token. + * + * @since 3.0 + */ + public function stem($token, $lang) + { + // Check if the token is long enough to merit stemming. + if (strlen($token) <= 2) + { + return $token; + } + + // Check if the language is French or All. + if ($lang !== 'fr' && $lang != '*') + { + return $token; + } + + // Stem the token if it is not in the cache. + if (!isset($this->cache[$lang][$token])) + { + // Stem the token. + $result = static::_getStem($token); + + // Add the token to the cache. + $this->cache[$lang][$token] = $result; + } + + return $this->cache[$lang][$token]; + } + + /** + * French stemmer rules variables. + * + * @return array The rules + * + * @since 3.0 + */ + protected static function getStemRules() + { + if (static::$_stemRules) + { + return static::$_stemRules; + } + + $vars = array(); + + // French accented letters in ISO-8859-1 encoding + $vars['accents'] = chr(224) . chr(226) . chr(232) . chr(233) . chr(234) . chr(235) . chr(238) . chr(239) . chr(244) . chr(251) . chr(249) . chr(231); + + // The rule patterns include all accented words for french language + $vars['rule_pattern'] = "/^([a-z" . $vars['accents'] . "]*)(\*){0,1}(\d)([a-z" . $vars['accents'] . "]*)([.|>])/"; + + // French vowels (including y) in ISO-8859-1 encoding + $vars['vowels'] = chr(97) . chr(224) . chr(226) . chr(101) . chr(232) . chr(233) . chr(234) . chr(235) . chr(105) . chr(238) . chr(239) . chr(111) . chr(244) . chr(117) . chr(251) . chr(249) . chr(121); + + // The French rules in ISO-8859-1 encoding + $vars['rules'] = array( + 'esre1>','esio1>','siol1.','siof0.','sioe0.','sio3>','st1>','sf1>','sle1>', + 'slo1>','s'.chr(233).'1>',chr(233).'tuae5.',chr(233).'tuae2.','tnia0.','tniv1.','tni3>','suor1.', + 'suo0.','sdrail5.','sdrai4.','er'.chr(232).'i1>','sesue3x>','esuey5i.','esue2x>', + 'se1>','er'.chr(232).'g3.','eca1>','esiah0.','esi1>','siss2.','sir2>','sit2>','egan'.chr(233).'1.', + 'egalli6>','egass1.','egas0.','egat3.','ega3>','ette4>','ett2>','etio1.', + 'tio'.chr(231).'4c.','tio0.','et1>','eb1>','snia1>','eniatnau8>','eniatn4.','enia1>', + 'niatnio3.','niatg3.','e'.chr(233).'1>',''.chr(233).'hcat1.',''.chr(233).'hca4.',''.chr(233).'tila5>',''.chr(233).'tici5.',''.chr(233).'tir1.', + ''.chr(233).'ti3>',''.chr(233).'gan1.',''.chr(233).'ga3>',''.chr(233).'tehc1.',''.chr(233).'te3>',''.chr(233).'it0.',''.chr(233).'1>','eire4.','eirue5.', + 'eio1.','eia1.','ei1>','eng1.','xuaessi7.','xuae1>','uaes0.','uae3.', + 'xuave2l.','xuav2li>','xua3la>','ela1>','lart2.','lani2>','la'.chr(233).'2>','siay4i.', + 'siassia7.','siarv1*.','sia1>','tneiayo6i.','tneiay6i.','tneiassia9.', + 'tneiareio7.','tneia5>','tneia4>','tiario4.','tiarim3.','tiaria3.', + 'tiaris3.','tiari5.','tiarve6>','tiare5>','iare4>','are3>','tiay4i.', + 'tia3>','tnay4i.','em'.chr(232).'iu5>','em'.chr(232).'i4>','tnaun3.','tnauqo3.','tnau4>','tnaf0.', + 'tnat'.chr(233).'2>','tna3>','tno3>','zeiy4i.','zey3i.','zeire5>','zeird4.','zeirio4.', + 'ze2>','ssiab0.','ssia4.','ssi3.','tnemma6>','tnemesuey9i.','tnemesue8>', + 'tnemevi7.','tnemessia5.','tnemessi8.','tneme5>','tnemia4.','tnem'.chr(233).'5>', + 'el2l>','lle3le>','let'.chr(244).'0.','lepp0.','le2>','srei1>','reit3.','reila2.', + 'rei3>','ert'.chr(226).'e5.','ert'.chr(226).''.chr(233).'1.','ert'.chr(226).'4.','drai4.','erdro0.','erute5.','ruta0.', + 'eruta1.','erutiov1.','erub3.','eruh3.','erul3.','er2r>','nn1>','r'.chr(232).'i3.', + 'srev0.','sr1>','rid2>','re2>','xuei4.','esuei5.','lbati3.','lba3>', + 'rueis0.','ruehcn4.','ecirta6.','ruetai6.','rueta5.','rueir0.','rue3>', + 'esseti6.','essere6>','esserd1.','esse4>','essiab1.','essia5.','essio1.', + 'essi4.','essal4.','essa1>','ssab1.','essurp1.','essu4.','essi1.','ssor1.', + 'essor2.','esso1>','ess2>','tio3.','r'.chr(232).'s2re.','r'.chr(232).'0e.','esn1.','eu1>', + 'sua0.','su1>','utt1>','tu'.chr(231).'3c.','u'.chr(231).'2c.','ur1.','ehcn2>','ehcu1>','snorr3.', + 'snoru3.','snorua3.','snorv3.','snorio4.','snori5.','snore5>','snortt4>', + 'snort'.chr(238).'a7.','snort3.','snor4.','snossi6.','snoire6.','snoird5.','snoitai7.', + 'snoita6.','snoits1>','noits0.','snoi4>','noitaci7>','noitai6.','noita5.', + 'noitu4.','noi3>','snoya0.','snoy4i.','sno'.chr(231).'a1.','sno'.chr(231).'r1.','snoe4.', + 'snosiar1>','snola1.','sno3>','sno1>','noll2.','tnennei4.','ennei2>', + 'snei1>','sne'.chr(233).'1>','enne'.chr(233).'5e.','ne'.chr(233).'3e.','neic0.','neiv0.','nei3.','sc1.', + 'sd1.','sg1.','sni1.','tiu0.','ti2.','sp1>','sna1>','sue1.','enn2>','nong2.', + 'noss2.','rioe4.','riot0.','riorc1.','riovec5.','rio3.','ric2.','ril2.', + 'tnerim3.','tneris3>','tneri5.','t'.chr(238).'a3.','riss2.','t'.chr(238).'2.','t'.chr(226).'2>','ario2.', + 'arim1.','ara1.','aris1.','ari3.','art1>','ardn2.','arr1.','arua1.','aro1.', + 'arv1.','aru1.','ar2.','rd1.','ud1.','ul1.','ini1.','rin2.','tnessiab3.', + 'tnessia7.','tnessi6.','tnessni4.','sini2.','sl1.','iard3.','iario3.','ia2>', + 'io0.','iule2.','i1>','sid2.','sic2.','esoi4.','ed1.','ai2>','a1>','adr1.', + 'tner'.chr(232).'5>','evir1.','evio4>','evi3.','fita4.','fi2>','enie1.','sare4>', + 'sari4>','sard3.','sart2>','sa2.','tnessa6>','tnessu6>','tnegna3.','tnegi3.', + 'tneg0.','tneru5>','tnemg0.','tnerni4.','tneiv1.','tne3>','une1.','en1>', + 'nitn2.','ecnay5i.','ecnal1.','ecna4.','ec1>','nn1.','rit2>','rut2>','rud2.', + 'ugn1>','eg1>','tuo0.','tul2>','t'.chr(251).'2>','ev1>','v'.chr(232).'2ve>','rtt1>','emissi6.', + 'em1.','ehc1.','c'.chr(233).'i2c'.chr(232).'.','libi2l.','llie1.','liei4i.','xuev1.','xuey4i.', + 'xueni5>','xuell4.','xuere5.','xue3>','rb'.chr(233).'3rb'.chr(232).'.','tur2.','rir'.chr(233).'4re.','rir2.', + 'c'.chr(226).'2ca.','snu1.','rt'.chr(238).'a4.','long2.','vec2.',''.chr(231).'1c>','ssilp3.','silp2.', + 't'.chr(232).'hc2te.','n'.chr(232).'m2ne.','llepp1.','tan2.','rv'.chr(232).'3rve.','rv'.chr(233).'3rve.','r'.chr(232).'2re.', + 'r'.chr(233).'2re.','t'.chr(232).'2te.','t'.chr(233).'2te.','epp1.','eya2i.','ya1i.','yo1i.','esu1.','ugi1.', + 'tt1.', + 'end0.' + ); + + static::$_stemRules = $vars; + + return static::$_stemRules; + } + + /** + * Returns the number of the first rule from the rule number + * that can be applied to the given reversed input. + * returns -1 if no rule can be applied, ie the stem has been found + * + * @param string $reversed_input + * @param integer $rule_number + * + * @return integer Number of the first rule + * + * @since 3.0 + */ + private static function _getFirstRule($reversed_input, $rule_number) + { + $vars = static::getStemRules(); + + $nb_rules = count($vars['rules']); + + for ($i = $rule_number; $i < $nb_rules; $i++) + { + // Gets the letters from the current rule + $rule = $vars['rules'][$i]; + $rule = preg_replace($vars['rule_pattern'], "\\1", $rule); + + if (strncasecmp(utf8_decode($rule), $reversed_input, strlen(utf8_decode($rule))) == 0) + { + return $i; + } + } + + return -1; + } + + /** + * Check the acceptability of a stem for French language + * + * @param string $reversed_stem The stem to check in reverse form + * + * @return boolean True if stem is acceptable + * + * @since 3.0 + */ + private static function _check($reversed_stem) + { + $vars = static::getStemRules(); + + if (preg_match('/[' . $vars['vowels'] . ']$/', utf8_encode($reversed_stem))) + { + // If the form starts with a vowel then at least two letters must remain after stemming (e.g.: "etaient" --> "et") + return (strlen($reversed_stem) > 2); + } + else + { + // If the reversed stem starts with a consonant then at least two letters must remain after stemming + if (strlen($reversed_stem) <= 2) + { + return false; + } + + // And at least one of these must be a vowel or "y" + return (preg_match('/[' . $vars['vowels'] . ']/', utf8_encode($reversed_stem))); + } + } + + /** + * Paice/Husk stemmer which returns a stem for the given $input + * + * @param string $input The word for which we want the stem in UTF-8 + * + * @return string The stem + * + * @since 3.0 + */ + private static function _getStem($input) + { + $vars = static::getStemRules(); + + $intact = true; + $reversed_input = strrev(utf8_decode($input)); + $rule_number = 0; + + // This loop goes through the rules' array until it finds an ending one (ending by '.') or the last one ('end0.') + while (true) + { + $rule_number = static::_getFirstRule($reversed_input, $rule_number); + + if ($rule_number == -1) + { + // No other rule can be applied => the stem has been found + break; + } + $rule = $vars['rules'][$rule_number]; + preg_match($vars['rule_pattern'], $rule, $matches); + + if (($matches[2] != '*') || ($intact)) + { + $reversed_stem = utf8_decode($matches[4]) . substr($reversed_input, $matches[3], strlen($reversed_input) - $matches[3]); + + if (self::_check($reversed_stem)) + { + $reversed_input = $reversed_stem; + + if ($matches[5] == '.') + { + break; + } + } + else + { + // Go to another rule + $rule_number++; + } + } + else + { + // Go to another rule + $rule_number++; + } + } + + return utf8_encode(strrev($reversed_input)); + } +} diff --git a/administrator/components/com_modules/helpers/modules.php b/administrator/components/com_modules/helpers/modules.php index 583ca170a4ca..1a936869073d 100644 --- a/administrator/components/com_modules/helpers/modules.php +++ b/administrator/components/com_modules/helpers/modules.php @@ -84,7 +84,7 @@ public static function getClientOptions() * * @return array A list of positions */ - public static function getPositions($clientId) + public static function getPositions($clientId, $editPositions = false) { $db = JFactory::getDbo(); $query = $db->getQuery(true); @@ -111,7 +111,7 @@ public static function getPositions($clientId) $options = array(); foreach ($positions as $position) { - if (!$position) + if (!$position && !$editPositions) { $options[] = JHtml::_('select.option', 'none', ':: ' . JText::_('JNONE') . ' ::'); diff --git a/administrator/components/com_modules/views/module/tmpl/edit_positions.php b/administrator/components/com_modules/views/module/tmpl/edit_positions.php index cab8bb0722f6..991b437d6e7a 100644 --- a/administrator/components/com_modules/views/module/tmpl/edit_positions.php +++ b/administrator/components/com_modules/views/module/tmpl/edit_positions.php @@ -44,11 +44,10 @@ // Add custom position to options $customGroupText = JText::_('COM_MODULES_CUSTOM_POSITION'); -if (!empty($this->item->position) && !$isTemplatePosition) -{ - $option = ModulesHelper::createOption($this->item->position); - $templateGroups[$customGroupText] = ModulesHelper::createOptionGroup($customGroupText, array($option)); -} + +$editPositions = true; +$customPositions = ModulesHelper::getPositions($clientId, $editPositions); +$templateGroups[$customGroupText] = ModulesHelper::createOptionGroup($customGroupText, $customPositions); // Build field $attr = array( diff --git a/administrator/components/com_newsfeeds/config.xml b/administrator/components/com_newsfeeds/config.xml index 4f4853a3e9d0..18ee2bff6522 100644 --- a/administrator/components/com_newsfeeds/config.xml +++ b/administrator/components/com_newsfeeds/config.xml @@ -254,6 +254,18 @@ label="JGLOBAL_LIST_LAYOUT_OPTIONS" description="COM_NEWSFEEDS_FIELD_CONFIG_LIST_SETTINGS_DESC"> + <field + name="filter_field" + type="radio" + class="btn-group" + default="1" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" + > + <option value="hide">JHIDE</option> + <option value="1">JSHOW</option> + </field> + <field name="show_pagination_limit" type="radio" diff --git a/administrator/components/com_users/views/levels/tmpl/default.php b/administrator/components/com_users/views/levels/tmpl/default.php index 93522b6f8a0d..282e4e5dde93 100644 --- a/administrator/components/com_users/views/levels/tmpl/default.php +++ b/administrator/components/com_users/views/levels/tmpl/default.php @@ -51,7 +51,7 @@ <th class="left"> <?php echo JHtml::_('grid.sort', 'COM_USERS_HEADING_LEVEL_NAME', 'a.title', $listDirn, $listOrder); ?> </th> - <th width="10%" class="nowrap center hidden-phone"> + <th width="10%" class="nowrap"> <?php echo JHtml::_('grid.sort', 'JGRID_HEADING_ORDERING', 'a.ordering', $listDirn, $listOrder); ?> <?php if ($canOrder && $saveOrder) :?> <?php echo JHtml::_('grid.order', $this->items, 'filesave.png', 'levels.saveorder'); ?> @@ -92,19 +92,21 @@ <?php echo $this->escape($item->title); ?> <?php endif; ?> </td> - <td class="order center"> + <td class="order"> <?php if ($canChange) : ?> + <div class="input-prepend"> <?php if ($saveOrder) :?> <?php if ($listDirn == 'asc') : ?> - <span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> - <span><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> + <span class="add-on"><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> + <span class="add-on"><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?> - <span><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> - <span><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> + <span class="add-on"><?php echo $this->pagination->orderUpIcon($i, true, 'levels.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span> + <span class="add-on"><?php echo $this->pagination->orderDownIcon($i, $count, true, 'levels.orderup', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? '' : 'disabled="disabled"'; ?> - <input class="span1" type="text" name="order[]" size="5" value="<?php echo $item->ordering;?>" <?php echo $disabled ?> class="text-area-order" /> + <input type="text" name="order[]" size="5" value="<?php echo $item->ordering;?>" <?php echo $disabled ?> class="width-20 text-area-order" /> + </div> <?php else : ?> <?php echo $item->ordering; ?> <?php endif; ?> diff --git a/administrator/components/com_weblinks/config.xml b/administrator/components/com_weblinks/config.xml index 55956952bf97..b88da89b4680 100644 --- a/administrator/components/com_weblinks/config.xml +++ b/administrator/components/com_weblinks/config.xml @@ -219,6 +219,18 @@ description="COM_WEBLINKS_LIST_LAYOUT_DESC" > + <field + name="filter_field" + type="radio" + class="btn-group" + default="1" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" + > + <option value="hide">JHIDE</option> + <option value="1">JSHOW</option> + </field> + <field name="show_pagination_limit" type="radio" default="1" diff --git a/administrator/components/com_weblinks/views/weblinks/tmpl/default.php b/administrator/components/com_weblinks/views/weblinks/tmpl/default.php index fb5c627d12e3..36c02d584c84 100644 --- a/administrator/components/com_weblinks/views/weblinks/tmpl/default.php +++ b/administrator/components/com_weblinks/views/weblinks/tmpl/default.php @@ -88,7 +88,7 @@ <th width="1%" class="hidden-phone"> <input type="checkbox" name="checkall-toggle" value="" title="<?php echo JText::_('JGLOBAL_CHECK_ALL'); ?>" onclick="Joomla.checkAll(this)" /> </th> - <th width="1%" class="nowrap center"> + <th width="1%" style="min-width:55px" class="nowrap center"> <?php echo JHtml::_('grid.sort', 'JSTATUS', 'a.state', $listDirn, $listOrder); ?> </th> <th class="title"> @@ -146,10 +146,10 @@ <td class="center hidden-phone"> <?php echo JHtml::_('grid.id', $i, $item->id); ?> </td> - <td class="center hidden-phone"> + <td class="center"> <?php echo JHtml::_('jgrid.published', $item->state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> </td> - <td class="nowrap"> + <td class="nowrap has-context"> <?php if ($item->checked_out) : ?> <?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked_out_time, 'weblinks.', $canCheckin); ?> <?php endif; ?> diff --git a/administrator/includes/application.php b/administrator/includes/application.php index 23d5fd356175..b6beeea772c3 100644 --- a/administrator/includes/application.php +++ b/administrator/includes/application.php @@ -278,10 +278,22 @@ public function getTemplate($params = false) $template->template = 'isis'; } } + + if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) { + $error = JText::sprintf('JERROR_COULD_NOT_FIND_TEMPLATE', $template->template); + // Load the catch-all error page + if (!file_exists(JPATH_ADMINISTRATOR . '/includes/error.php')) { + throw new InvalidArgumentException($error); + } + else { + require(JPATH_ADMINISTRATOR . '/includes/error.php'); + JFactory::getApplication()->close(); + } + } + if ($params) { return $template; } - return $template->template; } diff --git a/administrator/includes/error.php b/administrator/includes/error.php new file mode 100644 index 000000000000..e8f02744d3a3 --- /dev/null +++ b/administrator/includes/error.php @@ -0,0 +1,53 @@ +<?php +/** + * @package Joomla.Administrator + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +$doc = JFactory::getDocument(); +?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $doc->getLanguage(); ?>" lang="<?php echo $doc->getLanguage(); ?>" dir="<?php echo $doc->getDirection(); ?>"> + <head> + <title><?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></title> + <!-- Add Stylesheets --> + <link rel="stylesheet" href="../media/system/css/system.css" type="text/css" /> + <link rel="stylesheet" href="../media/jui/css/bootstrap.css" type="text/css" /> + <link rel="stylesheet" href="../media/jui/css/bootstrap-extended.css" type="text/css" /> + <link rel="stylesheet" href="../media/jui/css/bootstrap-responsive.css" type="text/css" /> + <style type="text/css"> + .header { + background-color: #FFFFFF; + background-image: linear-gradient(#D9EFFA, #D9EFFA 25%, #FFFFFF); + background-repeat: no-repeat; + border-top: 3px solid #0088CC; + padding: 20px 0; + text-align: center; + } + </style> + <!--[if lt IE 9]> + <script src="../media/jui/js/html5.js"></script> + <![endif]--> + </head> + <body> + <!-- Header --> + <div class="header"> + <img src="../media/jui/img/joomla.png" alt="Joomla" /> + <hr /> + </div> + <!-- Container --> + <div class="container"> + <div id="system-message-container"> + <div id="system-message"> + <div class="alert alert-error"> + <h3><?php echo $error; ?></h3> + </div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/administrator/language/en-GB/en-GB.com_finder.ini b/administrator/language/en-GB/en-GB.com_finder.ini index 66cafeffc91f..65db5d3079e6 100644 --- a/administrator/language/en-GB/en-GB.com_finder.ini +++ b/administrator/language/en-GB/en-GB.com_finder.ini @@ -61,6 +61,7 @@ COM_FINDER_CONFIG_SHOW_URL_LABEL="Result URL" COM_FINDER_CONFIG_STEMMER_DESCRIPTION="The language stemmer to use. Choose snowball if a stemmer for your language is not available or you have multilingual content." COM_FINDER_CONFIG_STEMMER_ENABLE_DESCRIPTION="Enable language stemming if available." COM_FINDER_CONFIG_STEMMER_ENABLE_LABEL="Enable stemmer" +COM_FINDER_CONFIG_STEMMER_FR="French Only" COM_FINDER_CONFIG_STEMMER_LABEL="Stemmer" COM_FINDER_CONFIG_STEMMER_PORTER_EN="English Only" COM_FINDER_CONFIG_STEMMER_SNOWBALL="Snowball" diff --git a/administrator/language/en-GB/en-GB.ini b/administrator/language/en-GB/en-GB.ini index 456bd02a3bf4..82eab6b715e3 100644 --- a/administrator/language/en-GB/en-GB.ini +++ b/administrator/language/en-GB/en-GB.ini @@ -142,6 +142,7 @@ JERROR_LOGIN_DENIED="You do not have access to the administrator section of this JERROR_NO_ITEMS_SELECTED="No item(s) selected." JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet." JERROR_SAVE_FAILED="Could not save data. Error: %s" +JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template "_QQ_"%s"_QQ_"." JFIELD_ACCESS_DESC="The access level group that is allowed to view this item." JFIELD_ACCESS_LABEL="Access" @@ -318,7 +319,7 @@ JGLOBAL_FIELDSET_PUBLISHING="Publishing Options" JGLOBAL_FILTER_ATTRIBUTES_DESC="3. List additional attributes, separating each attribute name with a space or comma. For example: <i>class,title,id</i>" JGLOBAL_FILTER_ATTRIBUTES_LABEL="Filter Attributes<sup>3</sup>" JGLOBAL_FILTER_CLIENT="- Select Location -" -JGLOBAL_FILTER_FIELD_DESC="Whether to show a Filter field for the list of articles. Select Hide to hide the filter field, or select which field you wish to filter on." +JGLOBAL_FILTER_FIELD_DESC="Whether to show a Filter field for the list. Select Hide to hide the filter field" JGLOBAL_FILTER_FIELD_LABEL="Filter Field" JGLOBAL_FILTER_GROUPS_DESC="This sets the user groups that you want filters applied to. Other groups will have no filtering performed." JGLOBAL_FILTER_GROUPS_LABEL="Filter Groups" diff --git a/administrator/language/en-GB/en-GB.lib_joomla.ini b/administrator/language/en-GB/en-GB.lib_joomla.ini index a6c84ad487b4..1841c489e225 100644 --- a/administrator/language/en-GB/en-GB.lib_joomla.ini +++ b/administrator/language/en-GB/en-GB.lib_joomla.ini @@ -471,6 +471,7 @@ JLIB_INSTALLER_ABORT_NOINSTALLPATH="Install path does not exist" JLIB_INSTALLER_ABORT_NOUPDATEPATH="Update path does not exist" JLIB_INSTALLER_ABORT_PACK_INSTALL_COPY_SETUP="Package Install: Could not copy setup file." JLIB_INSTALLER_ABORT_PACK_INSTALL_CREATE_DIRECTORY="Package Install: Failed to create directory:%s " +JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_MANIFEST="Installation failed: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_PACK_INSTALL_ERROR_EXTENSION="Package %1$s: There was an error installing an extension: %2$s" JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_FILES="Package %s: There were no files to install!" JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_PACK="Package %s: No package file specified" diff --git a/administrator/language/en-GB/en-GB.plg_content_vote.ini b/administrator/language/en-GB/en-GB.plg_content_vote.ini index 1ee49197398c..d0e26a08dfff 100644 --- a/administrator/language/en-GB/en-GB.plg_content_vote.ini +++ b/administrator/language/en-GB/en-GB.plg_content_vote.ini @@ -4,9 +4,10 @@ ; Note : All ini files need to be saved as UTF-8 PLG_CONTENT_VOTE="Content - Vote" -PLG_VOTE_BEST="Best" -PLG_VOTE_POOR="Poor" +PLG_VOTE_LABEL="Please rate" PLG_VOTE_RATE="Rate" +PLG_VOTE_STAR_ACTIVE="Star active" +PLG_VOTE_STAR_INACTIVE="Star inactive" PLG_VOTE_USER_RATING="User Rating: %1$s / %2$s" PLG_VOTE_VOTE="Vote %s" PLG_VOTE_XML_DESCRIPTION="Add the Voting functionality to Articles" diff --git a/administrator/templates/hathor/html/com_admin/help/default.php b/administrator/templates/hathor/html/com_admin/help/default.php new file mode 100644 index 000000000000..0be8a041b479 --- /dev/null +++ b/administrator/templates/hathor/html/com_admin/help/default.php @@ -0,0 +1,58 @@ +<?php +/** + * @package Joomla.Administrator + * @subpackage Template.hathor + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +jimport('joomla.language.help'); +?> +<form action="<?php echo JRoute::_('index.php?option=com_admin&view=help'); ?>" method="post" name="adminForm" id="adminForm"> +<div class="width-40 fltlft"> + <fieldset class="adminform"> + <legend><?php echo JText::_('COM_ADMIN_SEARCH'); ?></legend> + <input class="textarea" type="hidden" name="option" value="com_admin" /> + <input type="text" name="helpsearch" size="40" value="<?php echo $this->escape($this->help_search);?>" class="inputbox" /> + <input type="submit" value="<?php echo JText::_('COM_ADMIN_GO'); ?>" class="button" /> + <input type="button" value="<?php echo JText::_('COM_ADMIN_CLEAR_RESULTS'); ?>" class="button" onclick="f=document.adminForm;f.helpsearch.value='';f.submit()" /> + </fieldset> +</div> +<div class="width-50 fltrt helplinks"> + <ul class="helpmenu"> + <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_GLOSSARY'), JText::_('COM_ADMIN_GLOSSARY'), array('target' => 'helpFrame')) ?></li> + <li><?php echo JHtml::_('link', 'http://www.gnu.org/licenses/gpl-2.0.html', JText::_('COM_ADMIN_LICENSE'), array('target' => 'helpFrame')) ?></li> + <li><?php echo JHtml::_('link', $this->latest_version_check, JText::_('COM_ADMIN_LATEST_VERSION_CHECK'), array('target' => 'helpFrame')) ?></li> + <li><?php echo JHtml::_('link', JHelp::createUrl('JHELP_START_HERE'), JText::_('COM_ADMIN_START_HERE'), array('target' => 'helpFrame')) ?></li> + </ul> +</div> +<div class="clr"> </div> + <div id="treecellhelp" class="width-20 fltleft"> + <fieldset class="adminform whitebg" title="<?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?>"> + <legend><?php echo JText::_('COM_ADMIN_ALPHABETICAL_INDEX'); ?></legend> + + <div class="helpIndex"> + <ul class="subext"> + <?php foreach ($this->toc as $k => $v):?> + <li> + <?php $url = JHelp::createUrl('JHELP_'.strtoupper($k)); ?> + <?php echo JHtml::_('link', $url, $v, array('target' => 'helpFrame'));?> + </li> + <?php endforeach;?> + </ul> + </div> + </fieldset> + </div> + + <div id="datacellhelp" class="width-80 fltrt"> + <fieldset title="<?php echo JText::_('COM_ADMIN_VIEW'); ?>"> + <legend> + <?php echo JText::_('COM_ADMIN_VIEW'); ?> + </legend> + <iframe name="helpFrame" src="<?php echo $this->page;?>" class="helpFrame"></iframe> + </fieldset> + </div> +</form> diff --git a/administrator/templates/hathor/html/com_admin/help/index.html b/administrator/templates/hathor/html/com_admin/help/index.html new file mode 100644 index 000000000000..2efb97f319a3 --- /dev/null +++ b/administrator/templates/hathor/html/com_admin/help/index.html @@ -0,0 +1 @@ +<!DOCTYPE html><title></title> diff --git a/administrator/templates/hathor/html/com_cpanel/cpanel/default.php b/administrator/templates/hathor/html/com_cpanel/cpanel/default.php index c263bb85af4d..577bff083e04 100644 --- a/administrator/templates/hathor/html/com_cpanel/cpanel/default.php +++ b/administrator/templates/hathor/html/com_cpanel/cpanel/default.php @@ -1,17 +1,16 @@ <?php /** - * @package Joomla.Administrator - * @subpackage com_cpanel - * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt + * @package Joomla.Administrator + * @subpackage Template.hathor + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; -?> -<?php -echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie'=>'1')); +echo JHtml::_('sliders.start', 'panel-sliders', array('useCookie' => '1')); foreach ($this->modules as $module) { @@ -24,9 +23,10 @@ } elseif (method_exists('mod'.$module->name.'Helper', 'getTitle')) { - echo JHtml::_('sliders.panel', call_user_func_array(array('mod' . $module->name . 'Helper', 'getTitle'), array($params)), 'cpanel-panel-'.$module->name); + echo JHtml::_('sliders.panel', call_user_func_array(array('mod' . $module->name . 'Helper', 'getTitle'), array($params)), 'cpanel-panel-' . $module->name); } - else { + else + { echo JHtml::_('sliders.panel', JText::_('MOD_' . $module->name . '_TITLE'), 'cpanel-panel-' . $module->name); } echo $output; diff --git a/administrator/templates/hathor/html/mod_login/default.php b/administrator/templates/hathor/html/mod_login/default.php index 50a43eac857a..c0979e124ad5 100644 --- a/administrator/templates/hathor/html/mod_login/default.php +++ b/administrator/templates/hathor/html/mod_login/default.php @@ -1,13 +1,14 @@ <?php /** - * @package Joomla.Administrator - * @subpackage mod_login - * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt + * @package Joomla.Administrator + * @subpackage Template.hathor + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt */ -// No direct access. defined('_JEXEC') or die; + JHtml::_('behavior.keepalive'); ?> <form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="form-login"> @@ -32,7 +33,7 @@ </div> <div class="clr"></div> - <input type="submit" class="hidebtn" value="<?php echo JText::_( 'MOD_LOGIN_LOGIN' ); ?>" /> + <input type="submit" class="hidebtn" value="<?php echo JText::_('MOD_LOGIN_LOGIN'); ?>" /> <input type="hidden" name="option" value="com_login" /> <input type="hidden" name="task" value="login" /> <input type="hidden" name="return" value="<?php echo $return; ?>" /> diff --git a/administrator/templates/isis/css/template.css b/administrator/templates/isis/css/template.css index f8cc4a92afb2..3b099f09e548 100644 --- a/administrator/templates/isis/css/template.css +++ b/administrator/templates/isis/css/template.css @@ -1888,7 +1888,6 @@ table .span24 { position: relative; height: 0; overflow: hidden; - overflow: visible \9; -webkit-transition: height .35s ease; -moz-transition: height .35s ease; -o-transition: height .35s ease; diff --git a/administrator/templates/isis/html/message.php b/administrator/templates/isis/html/message.php index 8843173937eb..d2827f03fe7c 100644 --- a/administrator/templates/isis/html/message.php +++ b/administrator/templates/isis/html/message.php @@ -1,38 +1,38 @@ -<?php -/** - * @package Joomla.Administrator - * @subpackage Template.Isis - * - * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -defined('_JEXEC') or die; - -function renderMessage($msgList) -{ - $buffer = null; - $buffer .= "\n<div id=\"system-message-container\">"; - $alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success'); - - if (is_array($msgList)) - { - foreach ($msgList as $type => $msgs) - { - $buffer .= '<div class="alert ' . $alert[$type]. '">'; - $buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type) . "</h4>"; - if (count($msgs)) - { - foreach ($msgs as $msg) - { - $buffer .= "\n\t\t<p>" . $msg . "</p>"; - } - } - $buffer .= "\n</div>"; - } - } - - $buffer .= "\n</div>"; - - return $buffer; -} +<?php +/** + * @package Joomla.Administrator + * @subpackage Template.Isis + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +function renderMessage($msgList) +{ + $buffer = null; + $buffer .= "\n<div id=\"system-message-container\">"; + $alert = array('error' => 'alert-error', 'warning' => '', 'notice' => 'alert-info', 'message' => 'alert-success'); + + if (is_array($msgList)) + { + foreach ($msgList as $type => $msgs) + { + $buffer .= '<div class="alert ' . $alert[$type]. '">'; + $buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type) . "</h4>"; + if (count($msgs)) + { + foreach ($msgs as $msg) + { + $buffer .= "\n\t\t<p>" . $msg . "</p>"; + } + } + $buffer .= "\n</div>"; + } + } + + $buffer .= "\n</div>"; + + return $buffer; +} diff --git a/build/.gitignore b/build/.gitignore new file mode 100644 index 000000000000..43e487dcaf4f --- /dev/null +++ b/build/.gitignore @@ -0,0 +1,4 @@ +# Ignore test report folders so they do not push to the repo # +/coverage +/logs +/pdepend diff --git a/components/com_contact/models/categories.php b/components/com_contact/models/categories.php index eac7c0a4e5ec..9fdb17eb7cc1 100644 --- a/components/com_contact/models/categories.php +++ b/components/com_contact/models/categories.php @@ -16,7 +16,7 @@ * @subpackage com_contact * @since 1.6 */ -class ContactModelCategories extends JModelLegacy +class ContactModelCategories extends JModelList { /** * Model context string. @@ -43,7 +43,7 @@ class ContactModelCategories extends JModelLegacy * * @since 1.6 */ - protected function populateState() + protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); $this->setState('filter.extension', $this->_extension); diff --git a/components/com_contact/models/category.php b/components/com_contact/models/category.php index 804b0d4aa8ba..e8b739aee988 100644 --- a/components/com_contact/models/category.php +++ b/components/com_contact/models/category.php @@ -164,6 +164,14 @@ protected function getListQuery() $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } + // Filter by search in title + $search = $this->getState('list.filter'); + if (!empty($search)) + { + $search = $db->Quote('%' . $db->escape($search, true) . '%'); + $query->where('(a.name LIKE ' . $search . ')'); + } + // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); @@ -209,6 +217,9 @@ protected function populateState($ordering = null, $direction = null) $limitstart = $app->input->get('limitstart', 0, 'uint'); $this->setState('list.start', $limitstart); + // Optional filter text + $this->setState('list.filter', $app->input->getString('filter-search')); + // Get list ordering default from the parameters $menuParams = new JRegistry; if ($menu = $app->getMenu()->getActive()) { diff --git a/components/com_contact/models/contact.php b/components/com_contact/models/contact.php index 297561df950a..d50063d7c584 100644 --- a/components/com_contact/models/contact.php +++ b/components/com_contact/models/contact.php @@ -318,8 +318,8 @@ protected function getContactQuery($pk = null) $query->where('a.access IN ('. $groups.')'); $query->order('a.state DESC, a.created DESC'); // filter per language if plugin published - if (JFactory::getApplication()->getLanguageFilter()) { - $query->where('a.language='.$db->quote(JFactory::getLanguage()->getTag()).' OR a.language='.$db->quote('*')); + if (JLanguageMultilang::isEnabled()) { + $query->where(('a.created_by = ' . (int) $result->user_id) AND ('a.language=' . $db->quote(JFactory::getLanguage()->getTag()) . ' OR a.language=' . $db->quote('*'))); } if (is_numeric($published)) { $query->where('a.state IN (1,2)'); diff --git a/components/com_contact/views/category/tmpl/default.xml b/components/com_contact/views/category/tmpl/default.xml index 7fef20d983cb..06fce0c54d27 100644 --- a/components/com_contact/views/category/tmpl/default.xml +++ b/components/com_contact/views/category/tmpl/default.xml @@ -109,6 +109,18 @@ label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL" /> + <field + name="filter_field" + type="list" + default="" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" + > + <option value="">JGLOBAL_USE_GLOBAL</option> + <option value="hide">JHIDE</option> + <option value="1">JSHOW</option> + </field> + <field name="show_pagination_limit" type="list" description="JGLOBAL_DISPLAY_SELECT_DESC" label="JGLOBAL_DISPLAY_SELECT_LABEL" diff --git a/components/com_contact/views/category/tmpl/default_items.php b/components/com_contact/views/category/tmpl/default_items.php index 29cd9e2b29b6..926bdff7ad26 100644 --- a/components/com_contact/views/category/tmpl/default_items.php +++ b/components/com_contact/views/category/tmpl/default_items.php @@ -19,19 +19,25 @@ <?php else : ?> <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm"> + <?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?> + <fieldset class="filters btn-toolbar"> <?php if ($this->params->get('filter_field') != 'hide') :?> <div class="btn-group"> - <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTACT_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?></label> + <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTACT_FILTER_LABEL').' '; ?></label> <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_CONTACT_FILTER_SEARCH_DESC'); ?>" /> </div> <?php endif; ?> <?php if ($this->params->get('show_pagination_limit')) : ?> - <div class="display-limit"> - <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>  + <div class="btn-group pull-right"> + <label for="limit" class="element-invisible"> + <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?> + </label> <?php echo $this->pagination->getLimitBox(); ?> </div> <?php endif; ?> + </fieldset> + <?php endif; ?> <ul class="category list-striped"> <?php foreach ($this->items as $i => $item) : ?> @@ -103,5 +109,5 @@ <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" /> <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" /> </div> - </form> +</form> <?php endif; ?> diff --git a/components/com_content/helpers/icon.php b/components/com_content/helpers/icon.php index bf183f0a78ea..cc00f527edfe 100644 --- a/components/com_content/helpers/icon.php +++ b/components/com_content/helpers/icon.php @@ -12,52 +12,104 @@ /** * Content Component HTML Helper * - * @static * @package Joomla.Site * @subpackage com_content * @since 1.5 */ -class JHtmlIcon +abstract class JHtmlIcon { - public static function create($category, $params) + /** + * Method to generate a link to the create item page for the given category + * + * @param object $category The category information + * @param JRegistry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the create item link + */ + public static function create($category, $params, $attribs = array(), $legacy = false) { $uri = JURI::getInstance(); - $url = 'index.php?option=com_content&task=article.add&return='.base64_encode($uri).'&a_id=0&catid=' . $category->id; + $url = 'index.php?option=com_content&task=article.add&return=' . base64_encode($uri) . '&a_id=0&catid=' . $category->id; - if ($params->get('show_icons')) { - $text = '<i class="icon-plus"></i> ' . JText::_('JNEW') . ' '; - } else { - $text = JText::_('JNEW').' '; + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/new.png', JText::_('JNEW'), null, true); + } + else + { + $text = '<span class="icon-plus"></span> ' . JText::_('JNEW') . ' '; + } + } + else + { + $text = JText::_('JNEW') . ' '; } - $button = JHtml::_('link', JRoute::_($url), $text, 'class="btn btn-primary"'); + // Add the button classes to the attribs array + if (isset($attribs['class'])) + { + $attribs['class'] = $attribs['class'] . ' btn btn-primary'; + } + else + { + $attribs['class'] = 'btn btn-primary'; + } + + $button = JHtml::_('link', JRoute::_($url), $text, $attribs); + + $output = '<span class="hasTip" title="' . JText::_('COM_CONTENT_CREATE_ARTICLE') . '">' . $button . '</span>'; - $output = '<span class="hasTip" title="'.JText::_('COM_CONTENT_CREATE_ARTICLE').'">'.$button.'</span>'; return $output; } - public static function email($article, $params, $attribs = array()) + /** + * Method to generate a link to the email item page for the given article + * + * @param object $article The article information + * @param JRegistry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the email item link + */ + public static function email($article, $params, $attribs = array(), $legacy = false) { require_once JPATH_SITE . '/components/com_mailto/helpers/mailto.php'; - $uri = JURI::getInstance(); - $base = $uri->toString(array('scheme', 'host', 'port')); + + $uri = JURI::getInstance(); + $base = $uri->toString(array('scheme', 'host', 'port')); $template = JFactory::getApplication()->getTemplate(); - $link = $base.JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid), false); - $url = 'index.php?option=com_mailto&tmpl=component&template='.$template.'&link='.MailToHelper::addLink($link); + $link = $base . JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid), false); + $url = 'index.php?option=com_mailto&tmpl=component&template=' . $template . '&link=' . MailToHelper::addLink($link); $status = 'width=400,height=350,menubar=yes,resizable=yes'; - if ($params->get('show_icons')) { - $text = '<i class="icon-envelope"></i> ' . JText::_('JGLOBAL_EMAIL'); - } else { + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/emailButton.png', JText::_('JGLOBAL_EMAIL'), null, true); + } + else + { + $text = '<span class="icon-envelope"></span> ' . JText::_('JGLOBAL_EMAIL'); + } + } + else + { $text = JText::_('JGLOBAL_EMAIL'); } - $attribs['title'] = JText::_('JGLOBAL_EMAIL'); - $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; + $attribs['title'] = JText::_('JGLOBAL_EMAIL'); + $attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;"; $output = JHtml::_('link', JRoute::_($url), $text, $attribs); + return $output; } @@ -67,95 +119,150 @@ public static function email($article, $params, $attribs = array()) * This icon will not display in a popup window, nor if the article is trashed. * Edit access checks must be performed in the calling code. * - * @param object $article The article in question. - * @param object $params The article parameters - * @param array $attribs Not used?? + * @param object $article The article information + * @param JRegistry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic * * @return string The HTML for the article edit icon. * @since 1.6 */ - public static function edit($article, $params, $attribs = array()) + public static function edit($article, $params, $attribs = array(), $legacy = false) { - $user = JFactory::getUser(); - $userId = $user->get('id'); - $uri = JURI::getInstance(); + $user = JFactory::getUser(); + $uri = JURI::getInstance(); // Ignore if in a popup window. - if ($params && $params->get('popup')) { + if ($params && $params->get('popup')) + { return; } // Ignore if the state is negative (trashed). - if ($article->state < 0) { + if ($article->state < 0) + { return; } JHtml::_('behavior.tooltip'); // Show checked_out icon if the article is checked out by a different user - if (property_exists($article, 'checked_out') && property_exists($article, 'checked_out_time') && $article->checked_out > 0 && $article->checked_out != $user->get('id')) { + if (property_exists($article, 'checked_out') && property_exists($article, 'checked_out_time') && $article->checked_out > 0 && $article->checked_out != $user->get('id')) + { $checkoutUser = JFactory::getUser($article->checked_out); - $button = JHtml::_('image', 'system/checked_out.png', null, null, true); - $date = JHtml::_('date', $article->checked_out_time); - $tooltip = JText::_('JLIB_HTML_CHECKED_OUT').' :: '.JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name).' <br /> '.$date; - return '<span class="hasTip" title="'.htmlspecialchars($tooltip, ENT_COMPAT, 'UTF-8').'">'.$button.'</span>'; + $button = JHtml::_('image', 'system/checked_out.png', null, null, true); + $date = JHtml::_('date', $article->checked_out_time); + $tooltip = JText::_('JLIB_HTML_CHECKED_OUT') . ' :: ' . JText::sprintf('COM_CONTENT_CHECKED_OUT_BY', $checkoutUser->name) . ' <br /> ' . $date; + + return '<span class="hasTip" title="' . htmlspecialchars($tooltip, ENT_COMPAT, 'UTF-8') . '">' . $button . '</span>'; } - $url = 'index.php?option=com_content&task=article.edit&a_id='.$article->id.'&return='.base64_encode($uri); + $url = 'index.php?option=com_content&task=article.edit&a_id=' . $article->id . '&return=' . base64_encode($uri); - if ($article->state == 0) { - $overlib = JText::_('JUNPUBLISHED'); - } - else { - $overlib = JText::_('JPUBLISHED'); - } + if ($article->state == 0) + { + $overlib = JText::_('JUNPUBLISHED'); + } + else + { + $overlib = JText::_('JPUBLISHED'); + } - $date = JHtml::_('date', $article->created); - $author = $article->created_by_alias ? $article->created_by_alias : $article->author; + $date = JHtml::_('date', $article->created); + $author = $article->created_by_alias ? $article->created_by_alias : $article->author; - $overlib .= '<br />'; - $overlib .= $date; - $overlib .= '<br />'; - $overlib .= JText::sprintf('COM_CONTENT_WRITTEN_BY', htmlspecialchars($author, ENT_COMPAT, 'UTF-8')); + $overlib .= '<br />'; + $overlib .= $date; + $overlib .= '<br />'; + $overlib .= JText::sprintf('COM_CONTENT_WRITTEN_BY', htmlspecialchars($author, ENT_COMPAT, 'UTF-8')); - $icon = $article->state ? 'edit' : 'eye-close'; - $text = '<i class="hasTip icon-'.$icon.' tip" title="'.JText::_('COM_CONTENT_EDIT_ITEM').' :: '.$overlib.'"></i> '.JText::_('JGLOBAL_EDIT'); + if ($legacy) + { + $icon = $article->state ? 'edit.png' : 'edit_unpublished.png'; + $text = JHtml::_('image', 'system/' . $icon, JText::_('JGLOBAL_EDIT'), null, true); + } + else + { + $icon = $article->state ? 'edit' : 'eye-close'; + $text = '<span class="hasTip icon-' . $icon . ' tip" title="' . JText::_('COM_CONTENT_EDIT_ITEM') . ' :: ' . $overlib . '"></span> ' . JText::_('JGLOBAL_EDIT') . ' '; + } - $output = JHtml::_('link', JRoute::_($url), $text); + $output = JHtml::_('link', JRoute::_($url), $text, $attribs); return $output; } - public static function print_popup($article, $params, $attribs = array()) + /** + * Method to generate a popup link to print an article + * + * @param object $article The article information + * @param JRegistry $params The item parameters + * @param array $attribs Optional attributes for the link + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the popup link + */ + public static function print_popup($article, $params, $attribs = array(), $legacy = false) { $url = ContentHelperRoute::getArticleRoute($article->slug, $article->catid); - $url .= '&tmpl=component&print=1&layout=default&page='.@ $request->limitstart; + $url .= '&tmpl=component&print=1&layout=default&page=' . @ $request->limitstart; $status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no'; // checks template image directory for image, if non found default are loaded - if ($params->get('show_icons')) { - $text = '<i class="icon-print"></i> '.JText::_('JGLOBAL_PRINT'); - } else { + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true); + } + else + { + $text = '<span class="icon-print"></span> ' . JText::_('JGLOBAL_PRINT') . ' '; + } + } + else + { $text = JText::_('JGLOBAL_PRINT'); } - $attribs['title'] = JText::_('JGLOBAL_PRINT'); - $attribs['onclick'] = "window.open(this.href,'win2','".$status."'); return false;"; - $attribs['rel'] = 'nofollow'; + $attribs['title'] = JText::_('JGLOBAL_PRINT'); + $attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;"; + $attribs['rel'] = 'nofollow'; return JHtml::_('link', JRoute::_($url), $text, $attribs); } - public static function print_screen($article, $params, $attribs = array()) + /** + * Method to generate a link to print an article + * + * @param object $article Not used, @deprecated for 4.0 + * @param JRegistry $params The item parameters + * @param array $attribs Not used, @deprecated for 4.0 + * @param boolean $legacy True to use legacy images, false to use icomoon based graphic + * + * @return string The HTML markup for the popup link + */ + public static function print_screen($article, $params, $attribs = array(), $legacy = false) { - // checks template image directory for image, if non found default are loaded - if ($params->get('show_icons')) { - $text = $text = '<i class="icon-print"></i> '.JText::_('JGLOBAL_PRINT'); - } else { + // Checks template image directory for image, if none found default are loaded + if ($params->get('show_icons')) + { + if ($legacy) + { + $text = JHtml::_('image', 'system/printButton.png', JText::_('JGLOBAL_PRINT'), null, true); + } + else + { + $text = $text = '<span class="icon-print"></i> ' . JText::_('JGLOBAL_PRINT') . ' '; + } + } + else + { $text = JText::_('JGLOBAL_PRINT'); } - return '<a href="#" onclick="window.print();return false;">'.$text.'</a>'; + + return '<a href="#" onclick="window.print();return false;">' . $text . '</a>'; } } diff --git a/components/com_content/models/categories.php b/components/com_content/models/categories.php index 04032d104336..4f9a124862a7 100644 --- a/components/com_content/models/categories.php +++ b/components/com_content/models/categories.php @@ -16,7 +16,7 @@ * @subpackage com_content * @since 1.6 */ -class ContentModelCategories extends JModelLegacy +class ContentModelCategories extends JModelList { /** * Model context string. @@ -43,7 +43,7 @@ class ContentModelCategories extends JModelLegacy * * @since 1.6 */ - protected function populateState() + protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); $this->setState('filter.extension', $this->_extension); diff --git a/components/com_content/views/archive/tmpl/default_items.php b/components/com_content/views/archive/tmpl/default_items.php index d62bba6d2c41..7823b873f104 100644 --- a/components/com_content/views/archive/tmpl/default_items.php +++ b/components/com_content/views/archive/tmpl/default_items.php @@ -79,7 +79,7 @@ <?php if ($params->get('show_publish_date')) : ?> <dd> <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> @@ -88,14 +88,14 @@ <?php if ($params->get('show_modify_date')) : ?> <dd> <div class="modified"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> <dd> <div class="create"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC3'))); ?> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->created, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> @@ -103,7 +103,7 @@ <?php if ($params->get('show_hits')) : ?> <dd> <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?> + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?> </div> </dd> <?php endif; ?> @@ -151,7 +151,7 @@ <?php if ($params->get('show_publish_date')) : ?> <dd> <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> @@ -159,22 +159,22 @@ <?php if ($params->get('show_create_date')) : ?> <dd> - <div class="create"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> + <div class="create"><span class="icon-calendar"> + </span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?> <dd> - <div class="modified"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> + <div class="modified"><span class="icon-calendar"> + </span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </div> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> <dd> <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?> + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $item->hits); ?> </div> </dd> <?php endif; ?> diff --git a/components/com_content/views/article/tmpl/default.php b/components/com_content/views/article/tmpl/default.php index ac30e196dd77..0151f560d97e 100644 --- a/components/com_content/views/article/tmpl/default.php +++ b/components/com_content/views/article/tmpl/default.php @@ -32,30 +32,6 @@ echo $this->item->pagination; } ?> - <?php if (!$this->print) : ?> - <?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?> - <div class="btn-group pull-right"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i> <span class="caret"></span> </a> - <?php // Note the actions class is deprecated. Use dropdown-menu instead. ?> - <ul class="dropdown-menu actions"> - <?php if ($params->get('show_print_icon')) : ?> - <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($params->get('show_email_icon')) : ?> - <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($canEdit) : ?> - <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> - <?php endif; ?> - </ul> - </div> - <?php endif; ?> - <?php else : ?> - <div class="pull-right"> - <?php echo JHtml::_('icon.print_screen', $this->item, $params); ?> - </div> - <?php endif; ?> - <?php if ($params->get('show_title') || $params->get('show_author')) : ?> <div class="page-header"> <h2> @@ -70,88 +46,98 @@ <?php endif; ?> <?php endif; ?> </h2> - <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> - - <?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?> - <?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?> - <?php - $needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid; - $menu = JFactory::getApplication()->getMenu(); - $item = $menu->getItems('link', $needle, true); - $cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle; - ?> - <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?> - <?php else: ?> - <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + </div> + <?php endif; ?> + <?php if (!$this->print) : ?> + <?php if ($canEdit || $params->get('show_print_icon') || $params->get('show_email_icon')) : ?> + <div class="btn-group pull-right"> + <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <span class="icon-cog"></span> <span class="caret"></span> </a> + <?php // Note the actions class is deprecated. Use dropdown-menu instead. ?> + <ul class="dropdown-menu actions"> + <?php if ($params->get('show_print_icon')) : ?> + <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> <?php endif; ?> - + <?php if ($params->get('show_email_icon')) : ?> + <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> <?php endif; ?> - </div> + <?php if ($canEdit) : ?> + <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> + <?php endif; ?> + </ul> + </div> + <?php endif; ?> + <?php else : ?> + <div class="pull-right"> + <?php echo JHtml::_('icon.print_screen', $this->item, $params); ?> + </div> <?php endif; ?> - <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') - || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?> + || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author')); ?> <?php if ($useDefList && ($info == 0 || $info == 2)) : ?> <div class="article-info muted"> <dl class="article-info"> <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?> + <?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?> + <?php + $needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid; + $menu = JFactory::getApplication()->getMenu(); + $item = $menu->getItems('link', $needle, true); + $cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle; + ?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?> + <?php else: ?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> - <?php $title = $this->escape($this->item->parent_title); - $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?> - <?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?> - <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> - <?php else : ?> - <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> - <?php endif; ?> - </div> + <dd class="parent-category-name"> + <?php $title = $this->escape($this->item->parent_title); + $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?> + <?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?> + <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> + <?php else : ?> + <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> + <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> - <?php $title = $this->escape($this->item->category_title); - $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> - <?php if ($params->get('link_category') && $this->item->catslug) : ?> - <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> - <?php else : ?> - <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> - <?php endif; ?> - </div> + <dd class="category-name"> + <?php $title = $this->escape($this->item->category_title); + $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> + <?php if ($params->get('link_category') && $this->item->catslug) : ?> + <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> + <?php else : ?> + <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> + <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($info == 0): ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> <?php endif; ?> @@ -191,60 +177,67 @@ <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt> <?php if ($info == 1): ?> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->created_by_alias ? $this->item->created_by_alias : $this->item->author; ?> + <?php if (!empty($this->item->contactid) && $params->get('link_author') == true) : ?> + <?php + $needle = 'index.php?option=com_contact&view=contact&id=' . $this->item->contactid; + $menu = JFactory::getApplication()->getMenu(); + $item = $menu->getItems('link', $needle, true); + $cntlink = !empty($item) ? $needle . '&Itemid=' . $item->id : $needle; + ?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', JHtml::_('link', JRoute::_($cntlink), $author)); ?> + <?php else: ?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> - <?php $title = $this->escape($this->item->parent_title); - $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?> - <?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?> - <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> - <?php else : ?> - <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> - <?php endif; ?> - </div> + <dd class="parent-category-name"> + <?php $title = $this->escape($this->item->parent_title); + $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?> + <?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?> + <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> + <?php else : ?> + <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> + <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> - <?php $title = $this->escape($this->item->category_title); - $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> - <?php if ($params->get('link_category') && $this->item->catslug) : ?> - <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> - <?php else : ?> - <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> - <?php endif; ?> - </div> + <dd class="category-name"> + <?php $title = $this->escape($this->item->category_title); + $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> + <?php if ($params->get('link_category') && $this->item->catslug) : ?> + <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> + <?php else : ?> + <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> + <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> </dl> diff --git a/components/com_content/views/categories/tmpl/default_items.php b/components/com_content/views/categories/tmpl/default_items.php index fd008f27aa0e..284686885c7f 100644 --- a/components/com_content/views/categories/tmpl/default_items.php +++ b/components/com_content/views/categories/tmpl/default_items.php @@ -32,7 +32,7 @@ </span> <?php endif; ?> <?php if (count($item->getChildren()) > 0) : ?> - <a href="#category-<?php echo $item->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a> + <a href="#category-<?php echo $item->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a> <?php endif;?> </h3> <?php if ($this->params->get('show_subcat_desc_cat') == 1) :?> diff --git a/components/com_content/views/category/tmpl/blog_children.php b/components/com_content/views/category/tmpl/blog_children.php index 1107a4f0ae65..38917bde198d 100644 --- a/components/com_content/views/category/tmpl/blog_children.php +++ b/components/com_content/views/category/tmpl/blog_children.php @@ -32,7 +32,7 @@ <?php endif; ?> <?php if (count($child->getChildren()) > 0) : ?> - <a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a> + <a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a> <?php endif;?> </h3> diff --git a/components/com_content/views/category/tmpl/blog_item.php b/components/com_content/views/category/tmpl/blog_item.php index 10498e7418dd..643e72925ec1 100644 --- a/components/com_content/views/category/tmpl/blog_item.php +++ b/components/com_content/views/category/tmpl/blog_item.php @@ -19,21 +19,7 @@ JHtml::_('behavior.framework'); ?> - <?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?> - <div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i> <span class="caret"></span> </a> - <ul class="dropdown-menu"> - <?php if ($params->get('show_print_icon')) : ?> - <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($params->get('show_email_icon')) : ?> - <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($canEdit) : ?> - <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> - <?php endif; ?> - </ul> - </div> - <?php endif; ?> + <?php if ($params->get('show_title') || $this->item->state == 0 || ($params->get('show_author') && !empty($this->item->author ))) : ?> <div class="page-header"> <?php if ($params->get('show_title')) : ?> @@ -50,37 +36,52 @@ <span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span> <?php endif; ?> - <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> - <small class="createdby"> - <?php $author = $this->item->author; ?> - <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> - <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> - <?php - echo JText::sprintf( - 'COM_CONTENT_WRITTEN_BY', - JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author) - ); ?> - <?php else :?> - <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?> + <div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" role="button"> <span class="icon-cog"></span> <span class="caret"></span> </a> + <ul class="dropdown-menu"> + <?php if ($params->get('show_print_icon')) : ?> + <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> + <?php endif; ?> + <?php if ($params->get('show_email_icon')) : ?> + <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> + <?php endif; ?> + <?php if ($canEdit) : ?> + <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> + <?php endif; ?> + </ul> + </div> <?php endif; ?> - </small> - <?php endif; ?> </div> <?php endif; ?> <?php // to do not that elegant would be nice to group the params ?> <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') - || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?> + || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')|| $params->get('show_author')); ?> <?php if ($useDefList && ($info == 0 || $info == 2)) : ?> - <div class="article-info muted"> - <dl class="article-info"> + + <dl class="article-info muted"> <dt class="article-info-term"> <?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?> </dt> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->author; ?> + <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> + <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> + <?php + echo JText::sprintf( + 'COM_CONTENT_WRITTEN_BY', + JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author) + ); ?> + <?php else :?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> + <dd class="parent-category-name"> + <?php $title = $this->escape($this->item->parent_title); $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?> <?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?> @@ -88,57 +89,49 @@ <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> <?php endif; ?> - </div> + </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> - <?php $title = $this->escape($this->item->category_title); + <dd class="category-name"> + <?php $title = $this->escape($this->item->category_title); $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> <?php if ($params->get('link_category') && $this->item->catslug) : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> <?php endif; ?> - </div> </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($info == 0): ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> <?php endif; ?> </dl> - </div> + <?php endif; ?> <?php if (!$params->get('show_intro')) : ?> @@ -159,27 +152,38 @@ <?php echo $this->item->introtext; ?> <?php if ($useDefList && ($info == 1 || $info == 2)) : ?> - <div class="article-info muted"> - <dl class="article-info"> + <dl class="article-info muted"> <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt> <?php if ($info == 1): ?> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->author; ?> + <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> + <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> + <?php + echo JText::sprintf( + 'COM_CONTENT_WRITTEN_BY', + JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id=' . $this->item->contactid), $author) + ); ?> + <?php else :?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> - <?php $title = $this->escape($this->item->parent_title); + <dd class="parent-category-name"> + <?php $title = $this->escape($this->item->parent_title); $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)) . '">' . $title . '</a>';?> <?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> <?php endif; ?> - </div> </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> + <dd class="category-name"> <?php $title = $this->escape($this->item->category_title); $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)) . '">' . $title . '</a>';?> <?php if ($params->get('link_category') && $this->item->catslug) : ?> @@ -187,41 +191,36 @@ <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> <?php endif; ?> - </div> </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + <span class="icon-eye-open"></span> + <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> </dl> - </div> + <?php endif; ?> <?php if ($params->get('show_readmore') && $this->item->readmore) : @@ -237,7 +236,7 @@ $link->setVar('return', base64_encode($returnURL)); endif; ?> - <a class="btn" href="<?php echo $link; ?>"> <i class="icon-chevron-right"></i> + <p class="readmore"><a class="btn" href="<?php echo $link; ?>"> <span class="icon-chevron-right"></span> <?php if (!$params->get('access-view')) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : @@ -251,7 +250,7 @@ echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?> - </a> + </a></p> <?php endif; ?> <?php echo $this->item->event->afterDisplayContent; ?> diff --git a/components/com_content/views/category/tmpl/blog_links.php b/components/com_content/views/category/tmpl/blog_links.php index f99da1bdd030..1ff4a3ba2f89 100644 --- a/components/com_content/views/category/tmpl/blog_links.php +++ b/components/com_content/views/category/tmpl/blog_links.php @@ -12,7 +12,7 @@ <div class="items-more"> -<ul class="nav nav-tabs nav-stacked"> +<ol class="nav nav-tabs nav-stacked"> <?php foreach ($this->link_items as &$item) : ?> @@ -21,5 +21,5 @@ <?php echo $item->title; ?></a> </li> <?php endforeach; ?> -</ul> +</ol> </div> diff --git a/components/com_content/views/category/tmpl/default_articles.php b/components/com_content/views/category/tmpl/default_articles.php index 70c578290e6f..0bf36d940539 100644 --- a/components/com_content/views/category/tmpl/default_articles.php +++ b/components/com_content/views/category/tmpl/default_articles.php @@ -18,6 +18,17 @@ $n = count($this->items); $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); + +// check for at least one editable article +$isEditable = false; +if (!empty($this->items)) { + foreach ($this->items as $article) { + if ($article->params->get('access-edit')) { + $isEditable = true; + break; + } + } +} ?> <?php if (empty($this->items)) : ?> @@ -30,16 +41,18 @@ <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm" class="form-inline"> <?php if ($this->params->get('show_headings') || $this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?> - <div class="filters btn-toolbar"> + <fieldset class="filters btn-toolbar"> <?php if ($this->params->get('filter_field') != 'hide') :?> <div class="btn-group"> - <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_CONTENT_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?></label> + <label class="filter-search-lbl element-invisible" for="filter-search"> + <?php echo JText::_('COM_CONTENT_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?> + </label> <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_CONTENT_FILTER_SEARCH_DESC'); ?>" /> </div> <?php endif; ?> <?php if ($this->params->get('show_pagination_limit')) : ?> <div class="btn-group pull-right"> - <label class="element-invisible"> + <label for="limit" class="element-invisible"> <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?> </label> <?php echo $this->pagination->getLimitBox(); ?> @@ -49,40 +62,89 @@ <input type="hidden" name="filter_order" value="" /> <input type="hidden" name="filter_order_Dir" value="" /> <input type="hidden" name="limitstart" value="" /> + <input type="hidden" name="task" value="" /> <div class="clearfix"></div> - </div> + </fieldset> <?php endif; ?> - <ul class="category list-striped list-condensed"> - - <?php foreach ($this->items as $i => $article) : ?> - <?php if ($this->items[$i]->state == 0) : ?> - <li class="system-unpublished cat-list-row<?php echo $i % 2; ?>"> - <?php else: ?> - <li class="cat-list-row<?php echo $i % 2; ?>" > - <?php endif; ?> - <?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?> - <?php if ($this->params->get('list_show_hits', 1)) : ?> - <span class="list-hits badge badge-info pull-right"> - <?php echo JText::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?> - </span> - <?php endif; ?> - <?php if ($article->params->get('access-edit')) : ?> - <span class="list-edit pull-left width-50"> - <?php echo JHtml::_('icon.edit', $article, $params); ?> - </span> - <?php endif; ?> - <strong class="list-title"> - <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid)); ?>"> - <?php echo $this->escape($article->title); ?></a> - </strong> - <?php if ($this->items[$i]->state == 0): ?> - <span class="label label-warning">Unpublished</span> + <table class="category table table-striped table-bordered table-hover"> + <?php if($this->params->get('show_headings')): ?> + <thead> + <tr> + <th id="categorylist_header_title"> + <?php echo JHtml::_('grid.sort', 'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder); ?> + </th> + <?php if ($date = $this->params->get('list_show_date')) : ?> + <th id="categorylist_header_date"> + <?php if ($date == "created") : ?> + <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.created', $listDirn, $listOrder); ?> + <?php elseif ($date == "modified") : ?> + <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.modified', $listDirn, $listOrder); ?> + <?php elseif ($date == "published") : ?> + <?php echo JHtml::_('grid.sort', 'COM_CONTENT_'.$date.'_DATE', 'a.publish_up', $listDirn, $listOrder); ?> + <?php endif; ?> + </th> + <?php endif; ?> + <?php if ($this->params->get('list_show_author')) : ?> + <th id="categorylist_header_author"> + <?php echo JHtml::_('grid.sort', 'JAUTHOR', 'author', $listDirn, $listOrder); ?> + </th> + <?php endif; ?> + <?php if ($this->params->get('list_show_hits')) : ?> + <th id="categorylist_header_hits"> + <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?> + </th> + <?php endif; ?> + <?php if ($isEditable): ?> + <th id="categorylist_header_edit"><?php echo JText::_('COM_CONTENT_EDIT_ITEM'); ?></th> + <?php endif; ?> + </tr> + </thead> + <?php endif; ?> + <tbody> + <?php foreach ($this->items as $i => $article) : ?> + <?php if ($this->items[$i]->state == 0) : ?> + <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>"> + <?php else: ?> + <tr class="cat-list-row<?php echo $i % 2; ?>" > + <?php endif; ?> + <td headers="categorylist_header_title" class="list-title"> + <?php if (in_array($article->access, $this->user->getAuthorisedViewLevels())) : ?> + <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($article->slug, $article->catid)); ?>"> + <?php echo $this->escape($article->title); ?> + </a> + <?php else: ?> + <?php + echo $this->escape($article->title).' : '; + $menu = JFactory::getApplication()->getMenu(); + $active = $menu->getActive(); + $itemId = $active->id; + $link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId); + $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug)); + $fullURL = new JURI($link); + $fullURL->setVar('return', base64_encode($returnURL)); + ?> + <a href="<?php echo $fullURL; ?>" class="register"> + <?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?> + </a> + <?php endif; ?> + <?php if($article->state == 0): ?> + <span class="list-published label label-warning"> + <?php echo JText::_('JUNPUBLISHED'); ?> + </span> + <?php endif; ?> + </td> + <?php if ($this->params->get('list_show_date')) : ?> + <td headers="categorylist_header_date" class="list-date small"> + <?php + echo JHtml::_( + 'date', $article->displayDate, + $this->escape($this->params->get('date_format', JText::_('DATE_FORMAT_LC3'))) + ); ?> + </td> <?php endif; ?> - <br /> - - <?php if ($this->params->get('list_show_author', 1)) : ?> - <small class="list-author"> + <?php if ($this->params->get('list_show_author', 1)) : ?> + <td headers="categorylist_header_author" class="list-author"> <?php if(!empty($article->author) || !empty($article->created_by_alias)) : ?> <?php $author = $article->author ?> <?php $author = ($article->created_by_alias ? $article->created_by_alias : $author);?> @@ -98,38 +160,26 @@ <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> <?php endif; ?> <?php endif; ?> - </small> - <?php endif; ?> - - <?php if ($this->params->get('list_show_date')) : ?> - <span class="list-date small pull-right"> - <?php - echo JHtml::_( - 'date', $article->displayDate, - $this->escape($this->params->get('date_format', JText::_('DATE_FORMAT_LC3'))) - ); ?> - </span> + </td> <?php endif; ?> - - <?php else : // Show unauth links. ?> - <span> - <?php - echo $this->escape($article->title).' : '; - $menu = JFactory::getApplication()->getMenu(); - $active = $menu->getActive(); - $itemId = $active->id; - $link = JRoute::_('index.php?option=com_users&view=login&Itemid='.$itemId); - $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($article->slug)); - $fullURL = new JURI($link); - $fullURL->setVar('return', base64_encode($returnURL)); - ?> - <a href="<?php echo $fullURL; ?>" class="register"> - <?php echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); ?></a> - </span> - <?php endif; ?> - </li> - <?php endforeach; ?> - </ul> + <?php if ($this->params->get('list_show_hits', 1)) : ?> + <td headers="categorylist_header_hits" class="list-hits"> + <span class="badge badge-info"> + <?php echo JText::sprintf('JGLOBAL_HITS_COUNT', $article->hits); ?> + </span> + </td> + <?php endif; ?> + <?php if ($isEditable): ?> + <td headers="categorylist_header_edit" class="list-edit"> + <?php if ($article->params->get('access-edit')) : ?> + <?php echo JHtml::_('icon.edit', $article, $params); ?> + <?php endif; ?> + </td> + <?php endif; ?> + </tr> + <?php endforeach; ?> + </tbody> + </table> <?php endif; ?> <?php // Code to add a link to submit an article. ?> diff --git a/components/com_content/views/category/tmpl/default_children.php b/components/com_content/views/category/tmpl/default_children.php index 1e7a43863883..fc2bd3c95cdb 100644 --- a/components/com_content/views/category/tmpl/default_children.php +++ b/components/com_content/views/category/tmpl/default_children.php @@ -10,6 +10,8 @@ defined('_JEXEC') or die; $class = ' class="first"'; +$lang = JFactory::getLanguage(); + JHtml::_('bootstrap.tooltip'); ?> @@ -24,25 +26,39 @@ <div<?php echo $class; ?>> <?php $class = ''; ?> + <?php if ($lang->isRTL()) : ?> + <h3 class="page-header item-title"> + <?php if ( $this->params->get('show_cat_num_articles', 1)) : ?> + <span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>"> + <?php echo $child->getNumItems(true); ?> + </span> + <?php endif; ?> + <a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>"> + <?php echo $this->escape($child->title); ?></a> + + <?php if (count($child->getChildren()) > 0) : ?> + <a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a> + <?php endif;?> + <?php else : ?> <h3 class="page-header item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>"> <?php echo $this->escape($child->title); ?></a> <?php if ( $this->params->get('show_cat_num_articles', 1)) : ?> - <span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>"> - <?php echo $child->getNumItems(true); ?> - </span> + <span class="badge badge-info tip hasTooltip" title="<?php echo JText::_('COM_CONTENT_NUM_ITEMS'); ?>"> + <?php echo $child->getNumItems(true); ?> + </span> <?php endif; ?> <?php if (count($child->getChildren()) > 0) : ?> - <a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><i class="icon-plus"></i></a> + <a href="#category-<?php echo $child->id;?>" data-toggle="collapse" data-toggle="button" class="btn btn-mini pull-right"><span class="icon-plus"></span></a> + <?php endif;?> <?php endif;?> - </h3> <?php if ($this->params->get('show_subcat_desc') == 1) :?> - <?php if ($child->description) : ?> - <div class="category-desc"> - <?php echo JHtml::_('content.prepare', $child->description, '', 'com_content.category'); ?> - </div> - <?php endif; ?> + <?php if ($child->description) : ?> + <div class="category-desc"> + <?php echo JHtml::_('content.prepare', $child->description, '', 'com_content.category'); ?> + </div> + <?php endif; ?> <?php endif; ?> <?php if (count($child->getChildren()) > 0) :?> @@ -60,7 +76,7 @@ </div> <?php endif; ?> - </div> + </div> <?php endif; ?> <?php endforeach; ?> <?php endif; ?> diff --git a/components/com_content/views/category/view.html.php b/components/com_content/views/category/view.html.php index 4d2e91ee0732..5f0c8db3c8a9 100644 --- a/components/com_content/views/category/view.html.php +++ b/components/com_content/views/category/view.html.php @@ -101,15 +101,25 @@ public function display($tpl = null) $dispatcher = JEventDispatcher::getInstance(); - $item->introtext = JHtml::_('content.prepare', $item->introtext, '', 'com_content.category'); + // Old plugins: Ensure that text property is available + if (!isset($item->text)) + { + $item->text = $item->introtext; + } + + JPluginHelper::importPlugin('content'); + $results = $dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$this->params, 0)); + + // Old plugins: Use processed text as introtext + $item->introtext = $item->text; - $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.category', &$item, &$item->params, 0)); $item->event->afterDisplayTitle = trim(implode("\n", $results)); - $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.category', &$item, &$item->params, 0)); $item->event->beforeDisplayContent = trim(implode("\n", $results)); - $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.category', &$item, &$item->params, 0)); $item->event->afterDisplayContent = trim(implode("\n", $results)); } diff --git a/components/com_content/views/featured/tmpl/default_item.php b/components/com_content/views/featured/tmpl/default_item.php index 49e2e0120e93..1d3e6ef4c26a 100644 --- a/components/com_content/views/featured/tmpl/default_item.php +++ b/components/com_content/views/featured/tmpl/default_item.php @@ -17,21 +17,6 @@ ?> <?php if ($this->item->state == 0) : ?> <div class="system-unpublished"> - <?php endif; ?> - <?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?> - <div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> <i class="icon-cog"></i><span class="caret"></span> </a> - <ul class="dropdown-menu"> - <?php if ($params->get('show_print_icon')) : ?> - <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($params->get('show_email_icon')) : ?> - <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> - <?php endif; ?> - <?php if ($canEdit) : ?> - <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> - <?php endif; ?> - </ul> - </div> <?php endif; ?> <?php if ($params->get('show_title')) : ?> <h2 class="item-title"> @@ -45,34 +30,50 @@ <?php if ($this->item->state == 0): ?> <span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span> <?php endif; ?> - <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> - <small class="createdby"> - <?php $author = $this->item->author; ?> - <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> - <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> - <?php - echo JText::sprintf('COM_CONTENT_WRITTEN_BY', - JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author) - ); ?> - <?php else :?> - <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> - <?php endif; ?> - </small> + + +<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?> +<div class="btn-group pull-right"> <a class="btn dropdown-toggle" data-toggle="dropdown" href="#" role="button"> <span class="icon-cog"></span><span class="caret"></span> </a> + <ul class="dropdown-menu"> + <?php if ($params->get('show_print_icon')) : ?> + <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> + <?php endif; ?> + <?php if ($params->get('show_email_icon')) : ?> + <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> + <?php endif; ?> + <?php if ($canEdit) : ?> + <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> + <?php endif; ?> + </ul> +</div> <?php endif; ?> <?php // Todo Not that elegant would be nice to group the params ?> <?php $useDefList = ($params->get('show_modify_date') || $params->get('show_publish_date') - || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category')); ?> + || $params->get('show_hits') || $params->get('show_category') || $params->get('show_parent_category') || $params->get('show_author') ); ?> <?php if ($useDefList && ($info == 0 || $info == 2)) : ?> - <div class="article-info muted"> - <dl class="article-info"> - <dt class="article-info-term"> + <dl class="article-info muted"> + <dt class="article-info-term"> <?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?> </dt> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->author; ?> + <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> + <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> + <?php + echo JText::sprintf('COM_CONTENT_WRITTEN_BY', + JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author) + ); ?> + <?php else :?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> + <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> + <dd class="parent-category-name"> <?php $title = $this->escape($this->item->parent_title); $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?> <?php if ($params->get('link_parent_category') && !empty($this->item->parent_slug)) : ?> @@ -80,12 +81,11 @@ <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> <?php endif; ?> - </div> </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> + <dd class="category-name"> + <?php $title = $this->escape($this->item->category_title); $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?> <?php if ($params->get('link_category') && $this->item->catslug) : ?> @@ -93,44 +93,39 @@ <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> <?php endif; ?> - </div> + </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($info == 0): ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC3'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + <span class="icon-eye-open"></span> + <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> <?php endif; ?> - </dl> - </div> + </dl> + <?php endif; ?> <?php if (isset($images->image_intro) && !empty($images->image_intro)) : ?> <?php $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro; ?> @@ -145,16 +140,29 @@ <?php endif; ?> <?php echo $this->item->event->beforeDisplayContent; ?> <?php echo $this->item->introtext; ?> <?php if ($useDefList && ($info == 1 || $info == 2)) : ?> - <div class="article-info muted"> - <dl class="article-info"> + + <dl class="article-info muted"> <dt class="article-info-term"> <?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?> </dt> - <?php if ($info == 1): ?> + <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> + <dd class="createdby"> + <?php $author = $this->item->author; ?> + <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author); ?> + <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true) : ?> + <?php + echo JText::sprintf('COM_CONTENT_WRITTEN_BY', + JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author) + ); ?> + <?php else :?> + <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> + <?php endif; ?> + </dd> + <?php endif; ?> <?php if ($params->get('show_parent_category') && !empty($this->item->parent_slug)) : ?> - <dd> - <div class="parent-category-name"> + <dd class="parent-category-name"> + <?php $title = $this->escape($this->item->parent_title); $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_slug)).'">'.$title.'</a>';?> <?php if ($params->get('link_parent_category') && $this->item->parent_slug) : ?> @@ -162,54 +170,52 @@ <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> <?php endif; ?> - </div> + </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> - <dd> - <div class="category-name"> - <?php $title = $this->escape($this->item->category_title); + <dd class="category-name"> + <?php $title = $this->escape($this->item->category_title); $url = '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catslug)).'">'.$title.'</a>';?> <?php if ($params->get('link_category') && $this->item->catslug) : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> <?php endif; ?> - </div> + </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> - <dd> - <div class="published"> - <i class="icon-calendar"></i> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="published"> + + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC3'))); ?> + </dd> <?php endif; ?> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> - <dd> - <div class="create"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="create"> + <span class="icon-calendar"></span> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> + </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?> - <dd> - <div class="modified"><i class="icon-calendar"> - </i> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> - </div> + <dd class="modified"> + <span class="icon-calendar"></span> + <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC3'))); ?> + </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> - <dd> - <div class="hits"> - <i class="icon-eye-open"></i> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> - </div> + <dd class="hits"> + + <span class="icon-eye-open"></span> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> + </dd> <?php endif; ?> </dl> - </div> + <?php endif; ?> <?php if ($params->get('show_readmore') && $this->item->readmore) : if ($params->get('access-view')) : @@ -224,7 +230,7 @@ $link->setVar('return', base64_encode($returnURL)); endif; ?> - <a class="btn" href="<?php echo $link; ?>"> <i class="icon-chevron-right"></i> + <p class="readmore"><a class="btn" href="<?php echo $link; ?>"> <span class="icon-chevron-right"></span> <?php if (!$params->get('access-view')) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : @@ -238,7 +244,7 @@ echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?> - </a> + </a></p> <?php endif; ?> <?php if ($this->item->state == 0) : ?> </div> diff --git a/components/com_content/views/featured/tmpl/default_links.php b/components/com_content/views/featured/tmpl/default_links.php index ab2f94b592f8..abdb3f0cfd00 100644 --- a/components/com_content/views/featured/tmpl/default_links.php +++ b/components/com_content/views/featured/tmpl/default_links.php @@ -9,11 +9,11 @@ defined('_JEXEC') or die; ?> -<ul class="nav nav-tabs nav-stacked"> +<ol class="nav nav-tabs nav-stacked"> <?php foreach ($this->link_items as &$item) : ?> <li> <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug)); ?>"> <?php echo $item->title; ?></a> </li> <?php endforeach; ?> -</ul> +</ol> diff --git a/components/com_content/views/featured/view.html.php b/components/com_content/views/featured/view.html.php index 50b4fece0acd..395654afec03 100644 --- a/components/com_content/views/featured/view.html.php +++ b/components/com_content/views/featured/view.html.php @@ -80,15 +80,24 @@ public function display($tpl = null) $dispatcher = JEventDispatcher::getInstance(); - $item->introtext = JHtml::_('content.prepare', $item->introtext, '', 'com_content.featured'); + // Old plugins: Ensure that text property is available + if (!isset($item->text)) + { + $item->text = $item->introtext; + } + JPluginHelper::importPlugin('content'); + $results = $dispatcher->trigger('onContentPrepare', array ('com_content.featured', &$item, &$this->params, 0)); + + // Old plugins: Use processed text as introtext + $item->introtext = $item->text; - $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentAfterTitle', array('com_content.featured', &$item, &$item->params, 0)); $item->event->afterDisplayTitle = trim(implode("\n", $results)); - $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentBeforeDisplay', array('com_content.featured', &$item, &$item->params, 0)); $item->event->beforeDisplayContent = trim(implode("\n", $results)); - $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.article', &$item, &$item->params, 0)); + $results = $dispatcher->trigger('onContentAfterDisplay', array('com_content.featured', &$item, &$item->params, 0)); $item->event->afterDisplayContent = trim(implode("\n", $results)); } diff --git a/components/com_content/views/form/tmpl/edit.php b/components/com_content/views/form/tmpl/edit.php index ce758093d45a..c4e9e06b4dcb 100644 --- a/components/com_content/views/form/tmpl/edit.php +++ b/components/com_content/views/form/tmpl/edit.php @@ -49,12 +49,12 @@ <div class="btn-toolbar"> <div class="btn-group"> <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('article.save')"> - <i class="icon-ok"></i> <?php echo JText::_('JSAVE') ?> + <span class="icon-ok"></span> <?php echo JText::_('JSAVE') ?> </button> </div> <div class="btn-group"> <button type="button" class="btn" onclick="Joomla.submitbutton('article.cancel')"> - <i class="icon-cancel"></i> <?php echo JText::_('JCANCEL') ?> + <span class="icon-cancel"></span> <?php echo JText::_('JCANCEL') ?> </button> </div> </div> diff --git a/components/com_finder/views/search/tmpl/default_form.php b/components/com_finder/views/search/tmpl/default_form.php index 62a76ae8a8e2..c4279779716a 100644 --- a/components/com_finder/views/search/tmpl/default_form.php +++ b/components/com_finder/views/search/tmpl/default_form.php @@ -80,12 +80,12 @@ </label> <input type="text" name="q" id="q" size="30" value="<?php echo $this->escape($this->query->input); ?>" class="inputbox" /> <?php if ($this->escape($this->query->input) != '' || $this->params->get('allow_empty_search')):?> - <button name="Search" type="submit" class="btn btn-primary"><i class="icon-search icon-white"></i> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button> + <button name="Search" type="submit" class="btn btn-primary"><span class="icon-search icon-white"></span> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button> <?php else: ?> - <button name="Search" type="submit" class="btn btn-primary disabled"><i class="icon-search icon-white"></i> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button> + <button name="Search" type="submit" class="btn btn-primary disabled"><span class="icon-search icon-white"></span> <?php echo JText::_('JSEARCH_FILTER_SUBMIT');?></button> <?php endif; ?> <?php if ($this->params->get('show_advanced', 1)): ?> - <a href="#advancedSearch" data-toggle="collapse" class="btn"><i class="icon-list"></i> <?php echo JText::_('COM_FINDER_ADVANCED_SEARCH_TOGGLE'); ?></a> + <a href="#advancedSearch" data-toggle="collapse" class="btn"><span class="icon-list"></span> <?php echo JText::_('COM_FINDER_ADVANCED_SEARCH_TOGGLE'); ?></a> <?php endif; ?> </fieldset> diff --git a/components/com_newsfeeds/models/categories.php b/components/com_newsfeeds/models/categories.php index fd3819bd5345..42f344c48f54 100644 --- a/components/com_newsfeeds/models/categories.php +++ b/components/com_newsfeeds/models/categories.php @@ -16,7 +16,7 @@ * @subpackage com_newsfeeds * @since 1.6 */ -class NewsfeedsModelCategories extends JModelLegacy +class NewsfeedsModelCategories extends JModelList { /** * Model context string. @@ -43,7 +43,7 @@ class NewsfeedsModelCategories extends JModelLegacy * * @since 1.6 */ - protected function populateState() + protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); $this->setState('filter.extension', $this->_extension); diff --git a/components/com_newsfeeds/models/category.php b/components/com_newsfeeds/models/category.php index 6c3a36444c34..6c37373cd829 100644 --- a/components/com_newsfeeds/models/category.php +++ b/components/com_newsfeeds/models/category.php @@ -137,6 +137,14 @@ protected function getListQuery() $query->where('(a.publish_down = ' . $nullDate . ' OR a.publish_down >= ' . $nowDate . ')'); } + // Filter by search in title + $search = $this->getState('list.filter'); + if (!empty($search)) + { + $search = $db->Quote('%' . $db->escape($search, true) . '%'); + $query->where('(a.name LIKE ' . $search . ')'); + } + // Filter by language if ($this->getState('filter.language')) { $query->where('a.language in ('.$db->Quote(JFactory::getLanguage()->getTag()).','.$db->Quote('*').')'); @@ -167,6 +175,9 @@ protected function populateState($ordering = null, $direction = null) $limitstart = $app->input->get('limitstart', 0, 'uint'); $this->setState('list.start', $limitstart); + // Optional filter text + $this->setState('list.filter', $app->input->getString('filter-search')); + $orderCol = $app->input->get('filter_order', 'ordering'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'ordering'; diff --git a/components/com_newsfeeds/views/category/tmpl/default.xml b/components/com_newsfeeds/views/category/tmpl/default.xml index 3a1ebc49d330..82b7208aa70d 100644 --- a/components/com_newsfeeds/views/category/tmpl/default.xml +++ b/components/com_newsfeeds/views/category/tmpl/default.xml @@ -107,6 +107,18 @@ <field name="spacer2" type="spacer" class="text" label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL" /> + <field + name="filter_field" + type="list" + default="" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" + > + <option value="">JGLOBAL_USE_GLOBAL</option> + <option value="hide">JHIDE</option> + <option value="1">JSHOW</option> + </field> + <field name="show_pagination_limit" type="list" label="JGLOBAL_DISPLAY_SELECT_LABEL" diff --git a/components/com_newsfeeds/views/category/tmpl/default_items.php b/components/com_newsfeeds/views/category/tmpl/default_items.php index ce4fdf4ea941..82dd027715e0 100644 --- a/components/com_newsfeeds/views/category/tmpl/default_items.php +++ b/components/com_newsfeeds/views/category/tmpl/default_items.php @@ -20,20 +20,25 @@ <p> <?php echo JText::_('COM_NEWSFEEDS_NO_ARTICLES'); ?></p> <?php else : ?> - <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm"> +<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm"> + <?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?> + <fieldset class="filters btn-toolbar"> <?php if ($this->params->get('filter_field') != 'hide') :?> <div class="btn-group"> - <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_NEWSFEEDS_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?></label> + <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_NEWSFEEDS_FILTER_LABEL').' '; ?></label> <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_NEWSFEEDS_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_NEWSFEEDS_FILTER_SEARCH_DESC'); ?>" /> </div> <?php endif; ?> <?php if ($this->params->get('show_pagination_limit')) : ?> - <div class="display-limit"> - <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>  + <div class="btn-group pull-right"> + <label for="limit" class="element-invisible"> + <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?> + </label> <?php echo $this->pagination->getLimitBox(); ?> </div> <?php endif; ?> - + </fieldset> + <?php endif; ?> <ul class="category list-striped list-condensed"> <?php foreach ($this->items as $i => $item) : ?> <?php if ($this->items[$i]->published == 0) : ?> @@ -56,7 +61,7 @@ <span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span> <?php endif; ?> <br /> - <?php if ($this->params->get('show_link')) : ?> + <?php if ($this->params->get('show_link')) : ?> <span class="list pull-left"> <a href="<?php echo $item->link; ?>"><?php echo $item->link; ?></a> </span> diff --git a/components/com_search/views/search/tmpl/default_form.php b/components/com_search/views/search/tmpl/default_form.php index 295a85fd6b81..68d66ca59aac 100644 --- a/components/com_search/views/search/tmpl/default_form.php +++ b/components/com_search/views/search/tmpl/default_form.php @@ -21,7 +21,7 @@ <input type="text" name="searchword" placeholder="<?php echo JText::_('COM_SEARCH_SEARCH_KEYWORD'); ?>" id="search-searchword" size="30" maxlength="<?php echo $upper_limit; ?>" value="<?php echo $this->escape($this->origkeyword); ?>" class="inputbox" /> </div> <div class="btn-group pull-left"> - <button name="Search" onclick="this.form.submit()" class="btn hasTooltip" title="<?php echo JText::_('COM_SEARCH_SEARCH');?>"><i class="icon-search"></i></button> + <button name="Search" onclick="this.form.submit()" class="btn hasTooltip" title="<?php echo JText::_('COM_SEARCH_SEARCH');?>"><span class="icon-search"></span></button> </div> <input type="hidden" name="task" value="search" /> <div class="clearfix"></div> diff --git a/components/com_users/models/registration.php b/components/com_users/models/registration.php index 563b3ff674ab..f2d81bc320e3 100644 --- a/components/com_users/models/registration.php +++ b/components/com_users/models/registration.php @@ -428,12 +428,26 @@ public function register($temp) $data['sitename'] ); - $emailBody = JText::sprintf( - 'COM_USERS_EMAIL_REGISTERED_BODY', - $data['name'], - $data['sitename'], - $data['siteurl'] - ); + if ($sendpassword) + { + $emailBody = JText::sprintf( + 'COM_USERS_EMAIL_REGISTERED_BODY', + $data['name'], + $data['sitename'], + $data['siteurl'], + $data['username'], + $data['password_clear'] + ); + } + else + { + $emailBody = JText::sprintf( + 'COM_USERS_EMAIL_REGISTERED_BODY', + $data['name'], + $data['sitename'], + $data['siteurl'] + ); + } } // Send the registration email. diff --git a/components/com_users/views/login/tmpl/default_logout.php b/components/com_users/views/login/tmpl/default_logout.php index 9a3351bc6e39..abba05e12957 100644 --- a/components/com_users/views/login/tmpl/default_logout.php +++ b/components/com_users/views/login/tmpl/default_logout.php @@ -37,7 +37,7 @@ <form action="<?php echo JRoute::_('index.php?option=com_users&task=user.logout'); ?>" method="post" class="form-horizontal"> <div class="control-group"> <div class="controls"> - <button type="submit" class="btn btn-primary"><i class="icon-arrow-left icon-white"></i> <?php echo JText::_('JLOGOUT'); ?></button> + <button type="submit" class="btn btn-primary"><span class="icon-arrow-left icon-white"></span> <?php echo JText::_('JLOGOUT'); ?></button> </div> </div> <input type="hidden" name="return" value="<?php echo base64_encode($this->params->get('logout_redirect_url', $this->form->getValue('return'))); ?>" /> diff --git a/components/com_users/views/profile/tmpl/default.php b/components/com_users/views/profile/tmpl/default.php index 0af3ad6ab106..5b55b0e26509 100644 --- a/components/com_users/views/profile/tmpl/default.php +++ b/components/com_users/views/profile/tmpl/default.php @@ -15,7 +15,7 @@ <ul class="btn-toolbar pull-right"> <li class="btn-group"> <a class="btn" href="<?php echo JRoute::_('index.php?option=com_users&task=profile.edit&user_id='.(int) $this->data->id);?>"> - <i class="icon-user"></i> <?php echo JText::_('COM_USERS_Edit_Profile'); ?></a> + <span class="icon-user"></span> <?php echo JText::_('COM_USERS_EDIT_PROFILE'); ?></a> </li> </ul> <?php endif; ?> diff --git a/components/com_weblinks/models/categories.php b/components/com_weblinks/models/categories.php index 6b50980ae654..65c1508e7ce3 100644 --- a/components/com_weblinks/models/categories.php +++ b/components/com_weblinks/models/categories.php @@ -16,7 +16,7 @@ * @subpackage com_weblinks * @since 1.6 */ -class WeblinksModelCategories extends JModelLegacy +class WeblinksModelCategories extends JModelList { /** * Model context string. @@ -43,7 +43,7 @@ class WeblinksModelCategories extends JModelLegacy * * @since 1.6 */ - protected function populateState() + protected function populateState($ordering = null, $direction = null) { $app = JFactory::getApplication(); $this->setState('filter.extension', $this->_extension); diff --git a/components/com_weblinks/models/category.php b/components/com_weblinks/models/category.php index a535a7eb1f46..61cb309cc79e 100644 --- a/components/com_weblinks/models/category.php +++ b/components/com_weblinks/models/category.php @@ -156,6 +156,14 @@ protected function getListQuery() $query->where('a.language in (' . $db->Quote(JFactory::getLanguage()->getTag()) . ',' . $db->Quote('*') . ')'); } + // Filter by search in title + $search = $this->getState('list.filter'); + if (!empty($search)) + { + $search = $db->Quote('%' . $db->escape($search, true) . '%'); + $query->where('(a.title LIKE ' . $search . ')'); + } + // Add the list ordering clause. $query->order($db->escape($this->getState('list.ordering', 'a.ordering')).' '.$db->escape($this->getState('list.direction', 'ASC'))); return $query; @@ -180,6 +188,9 @@ protected function populateState($ordering = null, $direction = null) $limitstart = $app->input->get('limitstart', 0, 'uint'); $this->setState('list.start', $limitstart); + // Optional filter text + $this->setState('list.filter', $app->input->getString('filter-search')); + $orderCol = $app->input->get('filter_order', 'ordering'); if (!in_array($orderCol, $this->filter_fields)) { $orderCol = 'ordering'; diff --git a/components/com_weblinks/views/category/tmpl/default.xml b/components/com_weblinks/views/category/tmpl/default.xml index df97027fbcbb..0a2b4398c0f8 100644 --- a/components/com_weblinks/views/category/tmpl/default.xml +++ b/components/com_weblinks/views/category/tmpl/default.xml @@ -106,6 +106,18 @@ label="JGLOBAL_SUBSLIDER_DRILL_CATEGORIES_LABEL" /> + <field + name="filter_field" + type="list" + default="" + description="JGLOBAL_FILTER_FIELD_DESC" + label="JGLOBAL_FILTER_FIELD_LABEL" + > + <option value="">JGLOBAL_USE_GLOBAL</option> + <option value="hide">JHIDE</option> + <option value="1">JSHOW</option> + </field> + <field name="show_pagination_limit" type="list" label="JGLOBAL_DISPLAY_SELECT_LABEL" description="JGLOBAL_DISPLAY_SELECT_DESC"> diff --git a/components/com_weblinks/views/category/tmpl/default_items.php b/components/com_weblinks/views/category/tmpl/default_items.php index 202c619ebc1a..f0f3ba980a48 100644 --- a/components/com_weblinks/views/category/tmpl/default_items.php +++ b/components/com_weblinks/views/category/tmpl/default_items.php @@ -33,23 +33,25 @@ <?php else : ?> <form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm"> + <?php if ($this->params->get('filter_field') != 'hide' || $this->params->get('show_pagination_limit')) :?> + <fieldset class="filters btn-toolbar"> <?php if ($this->params->get('filter_field') != 'hide') :?> <div class="btn-group"> - <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_WEBLINKS_'.$this->params->get('filter_field').'_FILTER_LABEL').' '; ?></label> + <label class="filter-search-lbl element-invisible" for="filter-search"><span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span><?php echo JText::_('COM_WEBLINKS_FILTER_LABEL').' '; ?></label> <input type="text" name="filter-search" id="filter-search" value="<?php echo $this->escape($this->state->get('list.filter')); ?>" class="inputbox" onchange="document.adminForm.submit();" title="<?php echo JText::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>" placeholder="<?php echo JText::_('COM_WEBLINKS_FILTER_SEARCH_DESC'); ?>" /> </div> <?php endif; ?> <?php if ($this->params->get('show_pagination_limit')) : ?> - <div class="display-limit"> - <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>  + <div class="btn-group pull-right"> + <label for="limit" class="element-invisible"> + <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?> + </label> <?php echo $this->pagination->getLimitBox(); ?> </div> <?php endif; ?> - - <?php if ($this->params->get('filter_field') != 'hide') :?> - </fieldset> - <?php endif; ?> + </fieldset> + <?php endif; ?> <ul class="category list-striped list-condensed"> <?php foreach ($this->items as $i => $item) : ?> diff --git a/components/com_weblinks/views/form/tmpl/edit.php b/components/com_weblinks/views/form/tmpl/edit.php index 3820ec08a41a..98e72d2bcbba 100644 --- a/components/com_weblinks/views/form/tmpl/edit.php +++ b/components/com_weblinks/views/form/tmpl/edit.php @@ -35,12 +35,12 @@ <div class="btn-toolbar"> <div class="btn-group"> <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('weblink.save')"> - <i class="icon-ok"></i> <?php echo JText::_('JSAVE') ?> + <span class="icon-ok"></span> <?php echo JText::_('JSAVE') ?> </button> </div> <div class="btn-group"> <button type="button" class="btn" onclick="Joomla.submitbutton('weblink.cancel')"> - <i class="icon-cancel"></i> <?php echo JText::_('JCANCEL') ?> + <span class="icon-cancel"></span> <?php echo JText::_('JCANCEL') ?> </button> </div> </div> diff --git a/includes/application.php b/includes/application.php index f6423a8beb83..e783f5ff6b47 100644 --- a/includes/application.php +++ b/includes/application.php @@ -483,10 +483,18 @@ public function getTemplate($params = false) // Fallback template if (!file_exists(JPATH_THEMES . '/' . $template->template . '/index.php')) { JError::raiseWarning(0, JText::_('JERROR_ALERTNOTEMPLATE')); - $template->template = 'beez3'; if (!file_exists(JPATH_THEMES . '/beez3/index.php')) { - $template->template = ''; + $error = JText::sprintf('JERROR_COULD_NOT_FIND_TEMPLATE', $template->template); + // Load the catch-all error page + if (!file_exists(JPATH_SITE . '/includes/error.php')) { + throw new InvalidArgumentException($error); + } + else { + require(JPATH_SITE . '/includes/error.php'); + JFactory::getApplication()->close(); + } } + else $template->template = 'beez3'; } // Cache the result diff --git a/includes/error.php b/includes/error.php new file mode 100644 index 000000000000..fb227dfa5c57 --- /dev/null +++ b/includes/error.php @@ -0,0 +1,53 @@ +<?php +/** + * @package Joomla.Administrator + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +$doc = JFactory::getDocument(); +?> +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $doc->getLanguage(); ?>" lang="<?php echo $doc->getLanguage(); ?>" dir="<?php echo $doc->getDirection(); ?>"> + <head> + <title><?php echo JText::_('JERROR_AN_ERROR_HAS_OCCURRED'); ?></title> + <!-- Add Stylesheets --> + <link rel="stylesheet" href="media/system/css/system.css" type="text/css" /> + <link rel="stylesheet" href="media/jui/css/bootstrap.css" type="text/css" /> + <link rel="stylesheet" href="media/jui/css/bootstrap-extended.css" type="text/css" /> + <link rel="stylesheet" href="media/jui/css/bootstrap-responsive.css" type="text/css" /> + <style type="text/css"> + .header { + background-color: #FFFFFF; + background-image: linear-gradient(#D9EFFA, #D9EFFA 25%, #FFFFFF); + background-repeat: no-repeat; + border-top: 3px solid #0088CC; + padding: 20px 0; + text-align: center; + } + </style> + <!--[if lt IE 9]> + <script src="media/jui/js/html5.js"></script> + <![endif]--> + </head> + <body> + <!-- Header --> + <div class="header"> + <img src="media/jui/img/joomla.png" alt="Joomla" /> + <hr /> + </div> + <!-- Container --> + <div class="container"> + <div id="system-message-container"> + <div id="system-message"> + <div class="alert alert-error"> + <h3><?php echo $error; ?></h3> + </div> + </div> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/includes/framework.php b/includes/framework.php index e9e439a0a85e..532f5bf278c7 100644 --- a/includes/framework.php +++ b/includes/framework.php @@ -38,7 +38,7 @@ JError::setErrorHandling(E_NOTICE, 'message'); JError::setErrorHandling(E_WARNING, 'message'); -JError::setErrorHandling(E_ERROR, 'message', array('JError', 'customErrorPage')); +JError::setErrorHandling(E_ERROR, 'callback', array('JError', 'customErrorPage')); // Botstrap the CMS libraries. require_once JPATH_LIBRARIES.'/cms.php'; diff --git a/installation/CHANGELOG b/installation/CHANGELOG index 6b226d87ca9e..916fa35e1844 100644 --- a/installation/CHANGELOG +++ b/installation/CHANGELOG @@ -26,6 +26,67 @@ $ -> Language fix or change - -> Removed ! -> Note +10-Jan-2013 Jean-Marie Simonet + # [#29917] *Beez3 RTL wrong display of items in category list + # [#29904] *With plugin Language Filter enabled, user articles parameter in frontend shows all articles + +08-Jan-2013 Jean-Marie Simonet + # [#29914] *Login module wrong display in beez3 RTL + # [#29906] *Viewing Access Levels order numbering is not shown + +06-Jan-2013 Michael Babker + # [#27699] Only text gets passed to content events in blog view. Thanks Peter + +05-Jan-2013 Jean-Marie Simonet + # [#29905] Issue 29895 broke weblinks categories. Thanks Mark + # [#29903] Fix a reference in jDatabaseDriver. Thanks Elin + # [#29842] Display error by the contactform with IE 8 and 9. Thanks Constantin. + +03-Jan-2013 Michael Babker + # [#29875] Protostar invalid class names for itemid, layout and task. Thanks Cristina + # [#29895] Strict errors in categories models. Thanks Elin + # [#29862] *Filter_field Option missing in category list layout for Contact, Newsfeeds, Weblinks. Thanks JM + # [#29887] *Disable System redirect breaks 404. Thanks Yannick + +03-Jan-2013 Mark Dexter + # [#29743] heading menu type renders bad html code. Thanks M Cedric Keiflin. + [#29865] JLayoutFile keeps rendering same layout. Thanks Yannick Gaultier. + +03-Jan-2013 Jean-Marie Simonet + # [#29836] *Weblinks, Newsfeeds, Contacts Search Filter (frontend). Thanks Glenn Arkell + +02-Jan-2013 Jean-Marie Simonet + # [#29870] *Beez3 wrong messages display + # [#29217] *Status column missing in weblinks mobile view. Thanks Tim + # [#29691] Smart Search autocomplete.js issue. Thanks Viet + # [#27903] invalid call to parent::getStoreId in getStoreId of NewsfeedsModelCategories (unused). Thanks Michael and Peter + +31-Dec-2012 Michael Babker + # [#29620] *Creating new position when editing module broken in master. Thanks David. + # [#29363] Responsive layout during installation breaks. Thanks David. + +27-Dec-2012 Michael Babker + + [#28616] Add French language stemmer to Smart Search. Thanks Chris. + +26-Dec-2012 Jean-Marie Simonet + # [#29210] Help page restricted to small window at top of screen. Thanks Chris. + # [#29849] *RTL: Wrong display of Subcategories titles in Content Category List menu item + # [#29860] *Wrong display of Search and Clear buttons in Insert Article modal + RTL + # [#29838] the registration-mail does not contain username and password if activation is set to "none". Even if "send password" is set to yes. Thanks Yannick Spang + # [#29727] Pagebreak plugin generates same ID for tabs and slides. Thanks Dennis. + +25-Dec-2012 Jean-Marie Simonet + # [#29833] *Beez3 does not display Print, Mail, Edit, New icons Thanks Michael + # [#29834] *Beez3 edit article wrong display + # [#29824] Smart search saves * in language field. Thanks Elin + +24-Dec-2012 Jean-Marie Simonet + $ Adding Missing strings #29852 and + + $ Adding missing front-end strings + +21-Dec-2012 Jean-Marie Simonet + # [#29827] Semantic & Accessibility fixes frontend. Thanks Angie + 19-Dec-2012 Jean-Marie Simonet $+ Adding Catalan ca-ES installation files @@ -192,7 +253,7 @@ $ -> Language fix or change # [#29519] *Edit Menu Item layout usability # [#29401] Repeated htmlspecialchars() Applied When Multiple Breadcrumbs Active. Thanks Peter and Roland $# [#29521] Missing lang string in installation + correcting wrong constant in InstallationModelDatabase - # Category title display ommitted in Details column #29494 + # Category title display ommitted in Details column #29494 17-Oct-2012 Jean-Marie Simonet # [#29470] *Hathor submenus broken. Thanks Yannick @@ -245,7 +306,7 @@ $ -> Language fix or change 06-Oct-2012 Jean-Marie Simonet # [#29262] Wrong file name in garbagecoro cli app # [#29446] One character too much in JFeedPerson - + 05-Oct-2012 Jean-Marie Simonet $ Updating pt-BR.ini # [#29387] unpublish button don't work. Thanks Roberto diff --git a/installation/sql/mysql/joomla.sql b/installation/sql/mysql/joomla.sql index d46b629aba4b..c269af6fe449 100644 --- a/installation/sql/mysql/joomla.sql +++ b/installation/sql/mysql/joomla.sql @@ -1558,7 +1558,7 @@ CREATE TABLE IF NOT EXISTS `#__usergroups` ( UNIQUE KEY `idx_usergroup_parent_title_lookup` (`parent_id`,`title`), KEY `idx_usergroup_title_lookup` (`title`), KEY `idx_usergroup_adjacency_lookup` (`parent_id`), - KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) USING BTREE + KEY `idx_usergroup_nested_set_lookup` (`lft`,`rgt`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ; -- diff --git a/installation/template/css/template.css b/installation/template/css/template.css index f6bcb29720f9..713cb085c95b 100644 --- a/installation/template/css/template.css +++ b/installation/template/css/template.css @@ -14,7 +14,7 @@ width: 128px; } .container{ - width: 900px; + max-width: 900px; } .thumbnail { margin-bottom:9px; diff --git a/language/en-GB/en-GB.com_contact.ini b/language/en-GB/en-GB.com_contact.ini index 977d4ef7e1aa..36a8b1dfa9c0 100644 --- a/language/en-GB/en-GB.com_contact.ini +++ b/language/en-GB/en-GB.com_contact.ini @@ -16,6 +16,7 @@ COM_CONTACT_CONTACT_EMAIL_NAME_LABEL="Name" COM_CONTACT_CONTACT_ENTER_MESSAGE_DESC="Enter your message here." COM_CONTACT_CONTACT_ENTER_MESSAGE_LABEL="Message" COM_CONTACT_CONTACT_ENTER_VALID_EMAIL="Please enter a valid email address." +COM_CONTACT_FILTER_LABEL="Filter field" COM_CONTACT_FILTER_SEARCH_DESC="Contact Filter Search" COM_CONTACT_CONTACT_MESSAGE_SUBJECT_DESC="Enter the subject of your message here ." COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL="Subject" diff --git a/language/en-GB/en-GB.com_content.ini b/language/en-GB/en-GB.com_content.ini index 419144f84159..ee4ad81224f7 100644 --- a/language/en-GB/en-GB.com_content.ini +++ b/language/en-GB/en-GB.com_content.ini @@ -35,6 +35,7 @@ COM_CONTENT_MONTH="Month" COM_CONTENT_MORE_ARTICLES="More Articles..." COM_CONTENT_NEW_ARTICLE="New Article" COM_CONTENT_NO_ARTICLES="There are no articles in this category. If subcategories display on this page, they may contain articles." +COM_CONTENT_NONE="None" COM_CONTENT_NUM_ITEMS="Article Count:" COM_CONTENT_ON_NEW_CONTENT="A new Article has been submitted by '%1$s' entitled '%2$s'." COM_CONTENT_ORDERING="Ordering:<br />New articles default to the first position in the Category. The ordering can be changed in backend." @@ -50,6 +51,7 @@ COM_CONTENT_READ_MORE="Read more: " COM_CONTENT_READ_MORE_TITLE="Read more..." COM_CONTENT_REGISTER_TO_READ_MORE="Register to read more..." COM_CONTENT_SAVE_SUCCESS="Article successfully saved" +COM_CONTENT_SELECT_AN_ARTICLE="Select an Article" COM_CONTENT_SUBMIT_SAVE_SUCCESS="Article successfully submitted" COM_CONTENT_TITLE_FILTER_LABEL="Title Filter" COM_CONTENT_WRITTEN_BY="Written by %s" diff --git a/language/en-GB/en-GB.com_newsfeeds.ini b/language/en-GB/en-GB.com_newsfeeds.ini index ef662041ffe0..12a94a053f6d 100644 --- a/language/en-GB/en-GB.com_newsfeeds.ini +++ b/language/en-GB/en-GB.com_newsfeeds.ini @@ -10,6 +10,7 @@ COM_NEWSFEEDS_ERROR_FEED_NOT_FOUND="Error. Feed not found." COM_NEWSFEEDS_ERRORS_FEED_NOT_RETRIEVED="Error. Feed could not be retrieved." COM_NEWSFEEDS_FEED_LINK="Feed Link" COM_NEWSFEEDS_FEED_NAME="Feed Name" +COM_NEWSFEEDS_FILTER_LABEL="Filter field" COM_NEWSFEEDS_FILTER_SEARCH_DESC="Newsfeed Filter Search" COM_NEWSFEEDS_NO_ARTICLES="No Articles for this News Feed" COM_NEWSFEEDS_NUM_ARTICLES="# Articles" diff --git a/language/en-GB/en-GB.com_users.ini b/language/en-GB/en-GB.com_users.ini index 495f60dbbf11..c97c2c2b3050 100644 --- a/language/en-GB/en-GB.com_users.ini +++ b/language/en-GB/en-GB.com_users.ini @@ -17,7 +17,8 @@ COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY="Hello %s,\n\nYour account ha COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT="Account activated for %s at %s" COM_USERS_EMAIL_PASSWORD_RESET_BODY="Hello,\n\nA request has been made to reset your %s account password. To reset your password, you will need to submit this verification code in order to verify that the request was legitimate.\n\nThe verification code is %s\n\nClick on the URL below to enter the verification code and proceed with resetting your password.\n\n %s \n\nThank you." COM_USERS_EMAIL_PASSWORD_RESET_SUBJECT="Your %s password reset request" -COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with." +COM_USERS_EMAIL_REGISTERED_BODY="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using you using the following username and password:\n\nUsername: %s\nPassword: %s" +COM_USERS_EMAIL_REGISTERED_BODY_NOPW="Hello %s,\n\nThank you for registering at %s.\n\nYou may now log in to %s using the username and password you registered with." COM_USERS_EMAIL_REGISTERED_NOTIFICATION_TO_ADMIN_BODY="Hello administrator, \n\nA new user '%s', username '%s', has registered at %s." COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and password:\n\nUsername: %s\nPassword: %s" COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY_NOPW="Hello %s,\n\nThank you for registering at %s. Your account is created and must be activated before you can use it.\nTo activate the account click on the following link or copy-paste it in your browser:\n%s \n\nAfter activation you may login to %s using the following username and the password you entered during registration:\n\nUsername: %s" diff --git a/language/en-GB/en-GB.com_weblinks.ini b/language/en-GB/en-GB.com_weblinks.ini index 52d3ae45fe44..273afda39e3c 100644 --- a/language/en-GB/en-GB.com_weblinks.ini +++ b/language/en-GB/en-GB.com_weblinks.ini @@ -15,6 +15,7 @@ COM_WEBLINKS_ERROR_WEBLINK_URL_INVALID="Invalid Web link URL" COM_WEBLINKS_FIELD_ALIAS_DESC="The alias is for internal use only. Leave this blank and Joomla will fill in a default value from the title. It has to be unique for each web link in the same category." COM_WEBLINKS_FIELD_CATEGORY_DESC="You must select a Category." COM_WEBLINKS_FIELD_DESCRIPTION_DESC="You may enter here a description for your Web link" +COM_WEBLINKS_FILTER_LABEL="Filter field" COM_WEBLINKS_FILTER_SEARCH_DESC="Web Links Filter Search" COM_WEBLINKS_FIELD_TITLE_DESC="Your Web Link must have a Title." COM_WEBLINKS_FIELD_URL_DESC="You must enter a URL." diff --git a/language/en-GB/en-GB.ini b/language/en-GB/en-GB.ini index 94b2b56b91a8..61bc68739b2f 100644 --- a/language/en-GB/en-GB.ini +++ b/language/en-GB/en-GB.ini @@ -21,6 +21,10 @@ J2="2" J3="3" J4="4" J5="5" +J6="6" +J7="7" +J8="8" +J9="9" J10="10" J15="15" J20="20" @@ -114,6 +118,7 @@ JERROR_LOGIN_DENIED="You cannot access the private section of this site." JERROR_NOLOGIN_BLOCKED="Login denied! Your account has either been blocked or you have not activated it yet." JERROR_TABLE_BIND_FAILED="hmm %s ..." JERROR_USERS_PROFILE_NOT_FOUND="User profile not found" +JERROR_COULD_NOT_FIND_TEMPLATE="Could not find template "_QQ_"%s"_QQ_"." JFIELD_ACCESS_DESC="Access level for this content" JFIELD_ACCESS_LABEL="Access" @@ -181,6 +186,7 @@ JGLOBAL_INTRO_TEXT="Intro Text" JGLOBAL_LEFT="Left" JGLOBAL_LT="<" JGLOBAL_NEWITEMSLAST_DESC="New items default to the last position. Ordering can be changed after this item has been saved." +JGLOBAL_SELECT_NO_RESULTS_MATCH="No results match" JGLOBAL_NUM="#" JGLOBAL_PASSWORD="Password" JGLOBAL_PRINT="Print" diff --git a/language/en-GB/en-GB.lib_joomla.ini b/language/en-GB/en-GB.lib_joomla.ini index a6c84ad487b4..1810992f65c2 100644 --- a/language/en-GB/en-GB.lib_joomla.ini +++ b/language/en-GB/en-GB.lib_joomla.ini @@ -470,6 +470,7 @@ JLIB_INSTALLER_ABORT_MOD_UNKNOWN_CLIENT="Module %1$s: Unknown client type [%2$s] JLIB_INSTALLER_ABORT_NOINSTALLPATH="Install path does not exist" JLIB_INSTALLER_ABORT_NOUPDATEPATH="Update path does not exist" JLIB_INSTALLER_ABORT_PACK_INSTALL_COPY_SETUP="Package Install: Could not copy setup file." +JLIB_INSTALLER_ABORT_PACKAGE_INSTALL_MANIFEST="Installation failed: Could not copy PHP manifest file." JLIB_INSTALLER_ABORT_PACK_INSTALL_CREATE_DIRECTORY="Package Install: Failed to create directory:%s " JLIB_INSTALLER_ABORT_PACK_INSTALL_ERROR_EXTENSION="Package %1$s: There was an error installing an extension: %2$s" JLIB_INSTALLER_ABORT_PACK_INSTALL_NO_FILES="Package %s: There were no files to install!" diff --git a/libraries/cms/layout/base.php b/libraries/cms/layout/base.php index f0f6c06e68a8..bf97cb84e596 100644 --- a/libraries/cms/layout/base.php +++ b/libraries/cms/layout/base.php @@ -14,6 +14,7 @@ * * @package Joomla.Libraries * @subpackage Layout + * @see http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout * @since 3.0 */ class JLayoutBase implements JLayout diff --git a/libraries/cms/layout/file.php b/libraries/cms/layout/file.php index 344eab59c988..aeebccd380a7 100644 --- a/libraries/cms/layout/file.php +++ b/libraries/cms/layout/file.php @@ -15,6 +15,7 @@ * * @package Joomla.Libraries * @subpackage Layout + * @see http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout * @since 3.0 */ class JLayoutFile extends JLayoutBase @@ -31,6 +32,12 @@ class JLayoutFile extends JLayoutBase */ protected $basePath = null; + /** + * @var string Full path to actual layout files, after possible template override check + * @since 3.0.3 + */ + protected $fullPath = null; + /** * Method to instantiate the file-based layout. * @@ -82,21 +89,20 @@ public function render($displayData) */ protected function getPath() { - static $fullPath = null; - - if (is_null($fullPath) && !empty($this->layoutId)) + if (is_null($this->fullPath) && !empty($this->layoutId)) { - $rawPath = str_replace('.', '/', $this->layoutId) . '.php'; + $rawPath = str_replace('.', '/', $this->layoutId) . '.php'; $fileName = basename($rawPath); $filePath = dirname($rawPath); $possiblePaths = array( - JPATH_THEMES . '/' . JFactory::getApplication()->getTemplate() . '/html/layouts/' . $filePath, $this->basePath . '/' . $filePath + JPATH_THEMES . '/' . JFactory::getApplication()->getTemplate() . '/html/layouts/' . $filePath, + $this->basePath . '/' . $filePath ); - $fullPath = JPath::find($possiblePaths, $fileName); + $this->fullPath = JPath::find($possiblePaths, $fileName); } - return $fullPath; + return $this->fullPath; } } diff --git a/libraries/cms/layout/layout.php b/libraries/cms/layout/layout.php index 6831bcf34b5e..17af80b12673 100644 --- a/libraries/cms/layout/layout.php +++ b/libraries/cms/layout/layout.php @@ -14,6 +14,7 @@ * * @package Joomla.Libraries * @subpackage Layout + * @see http://docs.joomla.org/Sharing_layouts_across_views_or_extensions_with_JLayout * @since 3.0 */ interface JLayout diff --git a/media/com_finder/js/autocompleter.js b/media/com_finder/js/autocompleter.js index a782c8363cdb..4d440ebc0316 100644 --- a/media/com_finder/js/autocompleter.js +++ b/media/com_finder/js/autocompleter.js @@ -118,11 +118,11 @@ var Autocompleter = new Class({ 'link': 'cancel', 'duration': 200 }, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0); - this.element.setProperty('autocomplete', 'off').addEvent((Browser.ie || Browser.safari || Browser.chrome) ? 'keydown' : 'keypress', this.onCommand.bind(this)).addEvent('click', this.onCommand.bind(this, [false])).addEvent('focus', this.toggleFocus.create({ + this.element.setProperty('autocomplete', 'off').addEvent((Browser.ie || Browser.safari || Browser.chrome) ? 'keydown' : 'keypress', this.onCommand.bind(this)).addEvent('click', this.onCommand.bind(this, [false])).addEvent('focus', this.toggleFocus.pass({ bind: this, arguments: true, delay: 100 - })).addEvent('blur', this.toggleFocus.create({ + })).addEvent('blur', this.toggleFocus.pass({ bind: this, arguments: false, delay: 100 diff --git a/media/jui/css/bootstrap-rtl.css b/media/jui/css/bootstrap-rtl.css index a7decb761d08..d547e805e40f 100644 --- a/media/jui/css/bootstrap-rtl.css +++ b/media/jui/css/bootstrap-rtl.css @@ -421,3 +421,6 @@ body { border-left-color: transparent; border-right-color: #CCC; } +.badge { + margin-left: 10px; +} diff --git a/media/jui/less/bootstrap-rtl.less b/media/jui/less/bootstrap-rtl.less index c3f6b6c932cd..79c9be3e7de4 100644 --- a/media/jui/less/bootstrap-rtl.less +++ b/media/jui/less/bootstrap-rtl.less @@ -431,3 +431,7 @@ direction:rtl; border-left-color: transparent; border-right-color: #CCC; } +/* Subcategories badge */ +.badge { + margin-left: 10px; +} \ No newline at end of file diff --git a/media/jui/less/component-animations.less b/media/jui/less/component-animations.less index 2166776d98ba..d614263a76a7 100644 --- a/media/jui/less/component-animations.less +++ b/media/jui/less/component-animations.less @@ -15,7 +15,6 @@ position: relative; height: 0; overflow: hidden; - overflow: visible \9; .transition(height .35s ease); &.in { height: auto; diff --git a/modules/mod_login/tmpl/default.php b/modules/mod_login/tmpl/default.php index 0b7743966bfd..1f22701e4202 100644 --- a/modules/mod_login/tmpl/default.php +++ b/modules/mod_login/tmpl/default.php @@ -22,14 +22,20 @@ <div id="form-login-username" class="control-group"> <div class="controls"> <div class="input-prepend input-append"> - <span class="add-on"><i class="icon-user tip" title="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>"></i><label for="modlgn-username" class="element-invisible"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME'); ?></label></span><input id="modlgn-username" type="text" name="username" class="input-small" tabindex="1" size="18" placeholder="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>" /><a href="<?php echo JRoute::_('index.php?option=com_users&view=remind'); ?>" class="btn hasTooltip" title="<?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_USERNAME'); ?>"><i class="icon-question-sign"></i></a> + <span class="add-on"> + <span class="icon-user tip" title="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>"></span> + <label for="modlgn-username" class="element-invisible"><?php echo JText::_('MOD_LOGIN_VALUE_USERNAME'); ?></label> + </span> + <input id="modlgn-username" type="text" name="username" class="input-small" tabindex="0" size="18" placeholder="<?php echo JText::_('MOD_LOGIN_VALUE_USERNAME') ?>" /> + </div> </div> </div> <div id="form-login-password" class="control-group"> <div class="controls"> <div class="input-prepend input-append"> - <span class="add-on"><i class="icon-lock tip" title="<?php echo JText::_('JGLOBAL_PASSWORD') ?>"></i><label for="modlgn-passwd" class="element-invisible"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label></span><input id="modlgn-passwd" type="password" name="password" class="input-small" tabindex="2" size="18" placeholder="<?php echo JText::_('JGLOBAL_PASSWORD') ?>" /><a href="<?php echo JRoute::_('index.php?option=com_users&view=reset'); ?>" class="btn hasTooltip" title="<?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_PASSWORD'); ?>"><i class="icon-question-sign"></i></a> + <span class="add-on"><span class="icon-lock tip" title="<?php echo JText::_('JGLOBAL_PASSWORD') ?>"></span><label for="modlgn-passwd" class="element-invisible"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label></span><input id="modlgn-passwd" type="password" name="password" class="input-small" tabindex="0" size="18" placeholder="<?php echo JText::_('JGLOBAL_PASSWORD') ?>" /> + </div> </div> </div> @@ -40,7 +46,7 @@ <?php endif; ?> <div id="form-login-submit" class="control-group"> <div class="controls"> - <button type="submit" tabindex="3" name="Submit" class="btn btn-primary btn"><?php echo JText::_('JLOGIN') ?></button> + <button type="submit" tabindex="0" name="Submit" class="btn btn-primary btn"><?php echo JText::_('JLOGIN') ?></button> </div> </div> <?php @@ -49,7 +55,14 @@ <ul class="unstyled"> <li> <a href="<?php echo JRoute::_('index.php?option=com_users&view=registration'); ?>"> - <?php echo JText::_('MOD_LOGIN_REGISTER'); ?> <i class="icon-arrow-right"></i></a> + <?php echo JText::_('MOD_LOGIN_REGISTER'); ?> <span class="icon-arrow-right"></span></a> + </li> + <li> + <a href="<?php echo JRoute::_('index.php?option=com_users&view=remind'); ?>"> + <?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_USERNAME'); ?></a> + </li> + <li> + <a href="<?php echo JRoute::_('index.php?option=com_users&view=reset'); ?>"><?php echo JText::_('MOD_LOGIN_FORGOT_YOUR_PASSWORD'); ?></a> </li> </ul> diff --git a/modules/mod_menu/tmpl/default_heading.php b/modules/mod_menu/tmpl/default_heading.php index cfce3012a59b..e9c45ffd95fe 100644 --- a/modules/mod_menu/tmpl/default_heading.php +++ b/modules/mod_menu/tmpl/default_heading.php @@ -10,4 +10,4 @@ defined('_JEXEC') or die; ?> -<li class="nav-header"><?php echo $item->title; ?></li> +<span class="nav-header"><?php echo $item->title; ?></span> \ No newline at end of file diff --git a/plugins/content/pagebreak/pagebreak.php b/plugins/content/pagebreak/pagebreak.php index 96df21d413d7..c19b04c69cfb 100644 --- a/plugins/content/pagebreak/pagebreak.php +++ b/plugins/content/pagebreak/pagebreak.php @@ -179,7 +179,7 @@ public function onContentPrepare($context, &$row, &$params, $page = 0) else { $t[] = $text[0]; - $t[] = (string) JHtml::_($style.'.start'); + $t[] = (string) JHtml::_($style.'.start', 'article'.$row->id.'-'.$style); foreach ($text as $key => $subtext) { @@ -193,7 +193,7 @@ public function onContentPrepare($context, &$row, &$params, $page = 0) } else { $title = JText::sprintf('PLG_CONTENT_PAGEBREAK_PAGE_NUM', $key); } - $t[] = (string) JHtml::_($style.'.panel', $match['title'], 'basic-details'); + $t[] = (string) JHtml::_($style.'.panel', $match['title'], 'article'.$row->id.'-'.$style.$key); } $t[] = (string) $subtext; } diff --git a/plugins/content/vote/vote.php b/plugins/content/vote/vote.php index 36490fe868f3..b0088e6dae91 100644 --- a/plugins/content/vote/vote.php +++ b/plugins/content/vote/vote.php @@ -33,8 +33,8 @@ public function __construct(& $subject, $config) } /** - * @since 1.6 - */ + * @since 1.6 + */ public function onContentBeforeDisplay($context, &$row, &$params, $page=0) { $html = ''; @@ -47,8 +47,8 @@ public function onContentBeforeDisplay($context, &$row, &$params, $page=0) $img = ''; // look for images in template if available - $starImageOn = JHtml::_('image', 'system/rating_star.png', null, null, true); - $starImageOff = JHtml::_('image', 'system/rating_star_blank.png', null, null, true); + $starImageOn = JHtml::_('image', 'system/rating_star.png', JText::_('PLG_VOTE_STAR_ACTIVE'), null, true); + $starImageOff = JHtml::_('image', 'system/rating_star_blank.png', JText::_('PLG_VOTE_STAR_INACTIVE'), null, true); for ($i = 0; $i < $rating; $i++) { @@ -58,28 +58,33 @@ public function onContentBeforeDisplay($context, &$row, &$params, $page=0) { $img .= $starImageOff; } - $html .= '<span class="content_rating">'; - $html .= JText::sprintf($img); - $html .= '</span>'; + + $html .= '<div class="content_rating">'; + $html .= '<p class="unseen element-invisible">' . JText::sprintf('PLG_VOTE_USER_RATING', $rating, '5') . '</p>'; + $html .= $img; + $html .= '</div>'; if ($view == 'article' && $row->state == 1) { $uri = JURI::getInstance(); $uri->setQuery($uri->getQuery().'&hitcount=0'); - $html .= '<form method="post" action="' . $uri->toString() . '">'; + // create option list for voting select box + $options = array(); + for($i = 1; $i < 6; $i++) + { + $options[] = JHTML::_('select.option', $i, JText::sprintf('PLG_VOTE_VOTE', $i)); + } + + // generate voting form + $html .= '<form method="post" action="' . $uri->toString() . '" class="form-inline">'; $html .= '<span class="content_vote">'; -// $html .= JText::_( 'PLG_VOTE_POOR' ); - $html .= ' <input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '1').'" name="user_rating" value="1" /> '; - $html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '2').'" name="user_rating" value="2" /> '; - $html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '3').'" name="user_rating" value="3" /> '; - $html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '4').'" name="user_rating" value="4" /> '; - $html .= '<input type="radio" title="'.JText::sprintf('PLG_VOTE_VOTE', '5').'" name="user_rating" value="5" checked="checked" /> '; -// $html .= JText::_( 'PLG_VOTE_BEST' ); + $html .= '<label class="unseen element-invisible" for="content_vote_' . $row->id . '">'.JText::_('PLG_VOTE_LABEL').'</label>'; + $html .= JHTML::_('select.genericlist', $options, 'user_rating', null, 'value', 'text', '5', 'content_vote_'.$row->id); $html .= ' <input class="btn btn-mini" type="submit" name="submit_vote" value="' . JText::_('PLG_VOTE_RATE') . '" />'; $html .= '<input type="hidden" name="task" value="article.vote" />'; $html .= '<input type="hidden" name="hitcount" value="0" />'; - $html .= '<input type="hidden" name="url" value="'. $uri->toString() .'" />'; + $html .= '<input type="hidden" name="url" value="' . $uri->toString() . '" />'; $html .= JHtml::_('form.token'); $html .= '</span>'; $html .= '</form>'; diff --git a/plugins/finder/categories/categories.php b/plugins/finder/categories/categories.php index 0b8ba4396c3b..f0d85a747384 100644 --- a/plugins/finder/categories/categories.php +++ b/plugins/finder/categories/categories.php @@ -237,6 +237,8 @@ protected function index(FinderIndexerResult $item, $format = 'html') return; } + $item->setLanguage(); + // Need to import component route helpers dynamically, hence the reason it's handled here $path = JPATH_SITE . '/components/' . $item->extension . '/helpers/route.php'; if (is_file($path)) diff --git a/plugins/finder/contacts/contacts.php b/plugins/finder/contacts/contacts.php index 5bd2c07d235a..3372ad922570 100644 --- a/plugins/finder/contacts/contacts.php +++ b/plugins/finder/contacts/contacts.php @@ -262,6 +262,8 @@ protected function index(FinderIndexerResult $item, $format = 'html') return; } + $item->setLanguage(); + // Initialize the item parameters. $registry = new JRegistry; $registry->loadString($item->params); diff --git a/plugins/finder/content/content.php b/plugins/finder/content/content.php index ce1f45864022..933899c8c0e8 100644 --- a/plugins/finder/content/content.php +++ b/plugins/finder/content/content.php @@ -245,6 +245,8 @@ public function onFinderChangeState($context, $pks, $value) */ protected function index(FinderIndexerResult $item, $format = 'html') { + $item->setLanguage(); + // Check if the extension is enabled if (JComponentHelper::isEnabled($this->extension) == false) { diff --git a/plugins/finder/newsfeeds/newsfeeds.php b/plugins/finder/newsfeeds/newsfeeds.php index 1a9cbec8f816..f27978fb2778 100644 --- a/plugins/finder/newsfeeds/newsfeeds.php +++ b/plugins/finder/newsfeeds/newsfeeds.php @@ -260,6 +260,8 @@ protected function index(FinderIndexerResult $item, $format = 'html') return; } + $item->setLanguage(); + // Initialize the item parameters. $registry = new JRegistry; $registry->loadString($item->params); diff --git a/plugins/finder/weblinks/weblinks.php b/plugins/finder/weblinks/weblinks.php index 8ad390a62863..fc109aada74c 100644 --- a/plugins/finder/weblinks/weblinks.php +++ b/plugins/finder/weblinks/weblinks.php @@ -252,6 +252,8 @@ protected function index(FinderIndexerResult $item, $format = 'html') return; } + $item->setLanguage(); + // Initialize the item parameters. $registry = new JRegistry; $registry->loadString($item->params); diff --git a/templates/beez3/css/general.css b/templates/beez3/css/general.css index 91748af86cfd..6ef7cc4a1c31 100644 --- a/templates/beez3/css/general.css +++ b/templates/beez3/css/general.css @@ -3,57 +3,54 @@ /* -- form validation */ .invalid { border-color: #B94A48;background:#F2DEDE} label.invalid , label.required span{ color: #B94A48; background:none - } + } /* -- Joomla edit buttons Frontendediting*/ #editor-xtd-buttons { - padding: 0px; + padding: 0px; } .edit tr:hover td {background:#eee} .button2-left, .button2-right, .button2-left div, .button2-right div { - float: left; + float: left; } .button2-left a, .button2-right a, .button2-left span, .button2-right span { - display: block; - - float: left; - - - color: #666; - cursor: pointer; + display: block; + float: left; + color: #666; + cursor: pointer; } .button2-left span, .button2-right span { - cursor: default; - color: #999; + cursor: default; + color: #999; } .button2-left .page a, .button2-right .page a, .button2-left .page span, .button2-right .page span { - padding: 0 6px; + padding: 0 6px; } .page span { - color: #000; - font-weight: bold; + color: #000; + font-weight: bold; } .button2-left, .button2-right { - float: left; - margin-left: 5px; + float: left; + margin-left: 5px; } @@ -68,38 +65,56 @@ label.invalid , label.required span{ color: #B94A48; background:none .button2-left .blank a:visited { background-color: #D9EDF7; - color:#095197;border:solid 1px #BCE8F1; border-top:0; border-radius:0 0 3px 3px; text-decoration:none; padding:3px} + color:#095197;border:solid 1px #BCE8F1; border-top:0; border-radius:0 0 3px 3px; text-decoration:none; padding:3px} .button2-left a:hover, .button2-left .blank a:hover, .button2-left .readmore a:hover, .button2-right a:hover { - text-decoration: none; - color: #fff; - background:#095197; + text-decoration: none; + color: #fff; + background:#095197; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.btn-toolbar .btn { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background-color: #D9EDF7; + border-image: none; + border-radius: 0 0 3px 3px; + color: #095197; + padding: 3px; + text-decoration: none; } +div.toggle-editor { - - +} /* Caption fixes */ .img_caption .left { - float: left; - margin-right: 1em; + float: left; + margin-right: 1em; } .img_caption .right { - float: right; - margin-left: 1em; + float: right; + margin-left: 1em; } .img_caption .left p { - clear: left; - text-align: center; + clear: left; + text-align: center; } .img_caption .right p { - clear: right; - text-align: center; + clear: right; + text-align: center; } .img_caption { @@ -113,35 +128,38 @@ label.invalid , label.required span{ color: #B94A48; background:none /* Calendar */ -a img.calendar { - width: 16px; - height: 16px; - margin-left: 3px; - cursor: pointer; - vertical-align: middle; +#jform_publish_down_img { + width: 18px; + height: 18px; + margin-left: 3px; + background: url(../images/system/calendar.png) no-repeat; + cursor: pointer; + vertical-align: middle; +} +#jform_publish_up_img { + width: 18px; + height: 18px; + margin-left: 3px; + background: url(../images/system/calendar.png) no-repeat; + cursor: pointer; + vertical-align: middle; } + /* System Messages */ .error { - padding:0px; - margin-bottom: 20px; + padding:0px; + margin-bottom: 20px; } .error h2 { - color:#000 !important; - font-size:1.4em !important; - text-transform:uppercase; - padding:0 0 0 0px !important -} - -#system-message -{ - margin:10px 0 20px 0; - border-left:0; - border-right:0; + color:#000 !important; + font-size:1.4em !important; + text-transform:uppercase; + padding:0 0 0 0px !important } #system-message dt @@ -198,7 +216,7 @@ a img.calendar { background:#fff url(../images/system/notice-alert.png) no-repeat ; padding-left:40px; padding: 10px 10px 10px 40px; - border: 2px solid #990000; + border: 2px solid #990000; border-radius:10px } @@ -215,30 +233,30 @@ a img.calendar { #system-message dd.notice ul { - background:#fff url(../images/system/notice-note.png) no-repeat ; - padding-left:40px; - padding: 10px 10px 10px 40px; - border: 2px solid #FAA528; - border-radius:10px + background:#fff url(../images/system/notice-note.png) no-repeat ; + padding-left:40px; + padding: 10px 10px 10px 40px; + border: 2px solid #FAA528; + border-radius:10px } #system-message dd.notice ul { color: #000;margin:10px 0 } #system-message { - margin-bottom: 0px; - padding: 0; + margin-bottom: 0px; + padding: 0; } #system-message dt { - font-weight: bold; + font-weight: bold; } #system-message dd { - font-weight: bold; - padding: 0; + font-weight: bold; + padding: 0; } @@ -257,16 +275,16 @@ a img.calendar { #users-profile-core, #users-profile-custom { - margin:10px 0 15px 0; - padding:15px; + margin:10px 0 15px 0; + padding:15px; } #users-profile-core dt, #users-profile-custom dt { - float:left; - width:12em; - padding:3px 0; + float:left; + width:12em; + padding:3px 0; } @@ -274,14 +292,14 @@ a img.calendar { #users-profile-core dd, #users-profile-custom dd { - padding:3px 0; + padding:3px 0; } #member-profile fieldset, .registration fieldset { - margin:10px 0 15px 0; - padding:15px; + margin:10px 0 15px 0; + padding:15px; } @@ -290,7 +308,7 @@ a img.calendar { .profile-edit legend, .registration legend { - font-weight:bold + font-weight:bold } .profile-edit form#member-profile fieldset dd, diff --git a/templates/beez3/css/template_rtl.css b/templates/beez3/css/template_rtl.css index 94a88ddee5a8..957968bd59f9 100644 --- a/templates/beez3/css/template_rtl.css +++ b/templates/beez3/css/template_rtl.css @@ -240,6 +240,10 @@ table.weblinks th, table.category th { text-align: right; } +table th, table td { + text-align: right; +} + dl.tabs { float: right; margin: 50px 0 0 0; @@ -332,7 +336,6 @@ padding:4px 0; #login-form label { margin-right:0px; - float:right } #form-login-remember label @@ -352,7 +355,7 @@ button.validate #modlgn-username, #modlgn-passwd { - margin-right:-30px; + margin-right: 0; } .module_content #form-login-username label, @@ -497,3 +500,8 @@ ul.menu li ul li ul li ul li ul { margin-right: 10px; margin-bottom: 10px; } + +/* ++++++ Bootstrap markup ++++++++++++++ */ +.pull-left { + float: right; +} diff --git a/templates/beez3/html/com_content/article/default.php b/templates/beez3/html/com_content/article/default.php index 7500abdb6c1a..f2db26a80ac6 100644 --- a/templates/beez3/html/com_content/article/default.php +++ b/templates/beez3/html/com_content/article/default.php @@ -49,23 +49,23 @@ <?php if (!$this->print) : ?> <?php if ($params->get('show_print_icon')) : ?> <li class="print-icon"> - <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> + <?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($params->get('show_email_icon')) : ?> <li class="email-icon"> - <?php echo JHtml::_('icon.email', $this->item, $params); ?> + <?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($this->user->authorise('core.edit', 'com_content.article.'.$this->item->id)) : ?> <li class="edit-icon"> - <?php echo JHtml::_('icon.edit', $this->item, $params); ?> + <?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php else : ?> <li> - <?php echo JHtml::_('icon.print_screen', $this->item, $params); ?> + <?php echo JHtml::_('icon.print_screen', $this->item, $params, array(), true); ?> </li> <?php endif; ?> </ul> diff --git a/templates/beez3/html/com_content/category/blog_item.php b/templates/beez3/html/com_content/category/blog_item.php index 77de00b6e08e..4ee424bb7d56 100644 --- a/templates/beez3/html/com_content/category/blog_item.php +++ b/templates/beez3/html/com_content/category/blog_item.php @@ -35,17 +35,17 @@ <ul class="actions"> <?php if ($params->get('show_print_icon')) : ?> <li class="print-icon"> - <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> + <?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($params->get('show_email_icon')) : ?> <li class="email-icon"> - <?php echo JHtml::_('icon.email', $this->item, $params); ?> + <?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($canEdit) : ?> <li class="edit-icon"> - <?php echo JHtml::_('icon.edit', $this->item, $params); ?> + <?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?> </li> <?php endif; ?> </ul> diff --git a/templates/beez3/html/com_content/category/default_articles.php b/templates/beez3/html/com_content/category/default_articles.php index 088be0e92ca2..fe60d6716686 100644 --- a/templates/beez3/html/com_content/category/default_articles.php +++ b/templates/beez3/html/com_content/category/default_articles.php @@ -165,7 +165,7 @@ <?php // Code to add a link to submit an article. ?> <?php if ($this->category->getParams()->get('access-create')) : ?> - <?php echo JHtml::_('icon.create', $this->category, $this->category->params); ?> + <?php echo JHtml::_('icon.create', $this->category, $this->category->params, array(), true); ?> <?php endif; ?> <?php // Add pagination links ?> diff --git a/templates/beez3/html/com_content/featured/default_item.php b/templates/beez3/html/com_content/featured/default_item.php index 604b66d26bb8..d2f332a43ffb 100644 --- a/templates/beez3/html/com_content/featured/default_item.php +++ b/templates/beez3/html/com_content/featured/default_item.php @@ -36,18 +36,18 @@ <ul class="actions"> <?php if ($params->get('show_print_icon')) : ?> <li class="print-icon"> - <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> + <?php echo JHtml::_('icon.print_popup', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($params->get('show_email_icon')) : ?> <li class="email-icon"> - <?php echo JHtml::_('icon.email', $this->item, $params); ?> + <?php echo JHtml::_('icon.email', $this->item, $params, array(), true); ?> </li> <?php endif; ?> <?php if ($canEdit) : ?> <li class="edit-icon"> - <?php echo JHtml::_('icon.edit', $this->item, $params); ?> + <?php echo JHtml::_('icon.edit', $this->item, $params, array(), true); ?> </li> <?php endif; ?> </ul> diff --git a/templates/beez3/html/com_content/form/edit.php b/templates/beez3/html/com_content/form/edit.php new file mode 100644 index 000000000000..83cc4c502c03 --- /dev/null +++ b/templates/beez3/html/com_content/form/edit.php @@ -0,0 +1,323 @@ +<?php +/** + * @package Joomla.Site + * @subpackage Templates.beez3 + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +// no direct access +defined('_JEXEC') or die; + +JHtml::_('behavior.keepalive'); +JHtml::_('behavior.tooltip'); +JHtml::_('behavior.calendar'); +JHtml::_('behavior.formvalidation'); + +// Create shortcut to parameters. +$params = $this->state->get('params'); +//$images = json_decode($this->item->images); +//$urls = json_decode($this->item->urls); + +// This checks if the editor config options have ever been saved. If they haven't they will fall back to the original settings. +$editoroptions = isset($params->show_publishing_options); +if (!$editoroptions): + $params->show_urls_images_frontend = '0'; +endif; +?> + +<script type="text/javascript"> + Joomla.submitbutton = function(task) { + if (task == 'article.cancel' || document.formvalidator.isValid(document.id('adminForm'))) { + <?php echo $this->form->getField('articletext')->save(); ?> + Joomla.submitform(task); + } + } +</script> +<div class="edit item-page<?php echo $this->pageclass_sfx; ?>"> +<?php if ($params->get('show_page_heading')) : ?> +<h1> + <?php echo $this->escape($params->get('page_heading')); ?> +</h1> +<?php endif; ?> + +<form action="<?php echo JRoute::_('index.php?option=com_content&a_id='.(int) $this->item->id); ?>" method="post" name="adminForm" id="adminForm" class="form-validate"> + <fieldset> + <legend><?php echo JText::_('JEDITOR'); ?></legend> + + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('title'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('title'); ?> + </div> + </div> + + <?php if (is_null($this->item->id)):?> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('alias'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('alias'); ?> + </div> + </div> + <?php endif; ?> + + <div class="btn-group"> + <button type="button" class="btn btn-primary" onclick="Joomla.submitbutton('article.save')"> + <?php echo JText::_('JSAVE') ?> + </button> + <button type="button" class="btn" onclick="Joomla.submitbutton('article.cancel')"> + <?php echo JText::_('JCANCEL') ?> + </button> + </div> + + <?php echo $this->form->getInput('articletext'); ?> + + </fieldset> + <?php if ($params->get('show_urls_images_frontend') ) : ?> + <fieldset> + <legend><?php echo JText::_('COM_CONTENT_IMAGES_AND_URLS'); ?></legend> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_intro', 'images'); ?> + <?php echo $this->form->getInput('image_intro', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_intro_alt', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('image_intro_alt', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_intro_caption', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('image_intro_caption', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('float_intro', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('float_intro', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_fulltext', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('image_fulltext', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_fulltext_alt', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('image_fulltext_alt', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('image_fulltext_caption', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('image_fulltext_caption', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('float_fulltext', 'images'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('float_fulltext', 'images'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urla', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urla', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urlatext', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urlatext', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <?php echo $this->form->getInput('targeta', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urlb', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urlb', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urlbtext', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urlbtext', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <?php echo $this->form->getInput('targetb', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urlc', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urlc', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('urlctext', 'urls'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('urlctext', 'urls'); ?> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <?php echo $this->form->getInput('targetc', 'urls'); ?> + </div> + </div> + </fieldset> + <?php endif; ?> + + <fieldset> + <legend><?php echo JText::_('COM_CONTENT_PUBLISHING'); ?></legend> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('catid'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('catid'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('created_by_alias'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('created_by_alias'); ?> + </div> + </div> + + <?php if ($this->item->params->get('access-change')) : ?> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('state'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('state'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('featured'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('featured'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('publish_up'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('publish_up'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('publish_down'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('publish_down'); ?> + </div> + </div> + <?php endif; ?> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('access'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('access'); ?> + </div> + </div> + <?php if (is_null($this->item->id)):?> + <div class="control-group"> + <div class="control-label"> + </div> + <div class="controls"> + <?php echo JText::_('COM_CONTENT_ORDERING'); ?> + </div> + </div> + <?php endif; ?> + </fieldset> + + <fieldset> + <legend><?php echo JText::_('JFIELD_LANGUAGE_LABEL'); ?></legend> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('language'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('language'); ?> + </div> + </div> + </fieldset> + + <fieldset> + <legend><?php echo JText::_('COM_CONTENT_METADATA'); ?></legend> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('metadesc'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('metadesc'); ?> + </div> + </div> + <div class="control-group"> + <div class="control-label"> + <?php echo $this->form->getLabel('metakey'); ?> + </div> + <div class="controls"> + <?php echo $this->form->getInput('metakey'); ?> + </div> + </div> + + <input type="hidden" name="task" value="" /> + <input type="hidden" name="return" value="<?php echo $this->return_page;?>" /> + <?php if ($this->params->get('enable_category', 0) == 1) : ?> + <input type="hidden" name="jform[catid]" value="<?php echo $this->params->get('catid', 1);?>"/> + <?php endif;?> + <?php echo JHtml::_('form.token'); ?> + </fieldset> +</form> +</div> diff --git a/templates/beez3/html/com_content/form/index.html b/templates/beez3/html/com_content/form/index.html new file mode 100644 index 000000000000..2efb97f319a3 --- /dev/null +++ b/templates/beez3/html/com_content/form/index.html @@ -0,0 +1 @@ +<!DOCTYPE html><title></title> diff --git a/templates/beez3/html/message.php b/templates/beez3/html/message.php new file mode 100644 index 000000000000..f2b6db6c3518 --- /dev/null +++ b/templates/beez3/html/message.php @@ -0,0 +1,40 @@ +<?php +/** + * @package Joomla.Site + * @subpackage Template.Beez3 + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +function renderMessage($msgList) +{ + $buffer = null; + $buffer .= "\n<div id=\"system-message-container\">"; + + if (is_array($msgList)) + { + $buffer .= "\n<dl id=\"system-message\">"; + foreach ($msgList as $type => $msgs) + { + if (count($msgs)) + { + $buffer .= "\n<dt class=\"" . strtolower($type) . "\">" . JText::_($type) . "</dt>"; + $buffer .= "\n<dd class=\"" . strtolower($type) . " message\">"; + $buffer .= "\n\t<ul>"; + foreach ($msgs as $msg) + { + $buffer .= "\n\t\t<li>" . $msg . "</li>"; + } + $buffer .= "\n\t</ul>"; + $buffer .= "\n</dd>"; + } + $buffer .= "\n</dl>"; + } + + $buffer .= "\n</div>"; + return $buffer; + } +} diff --git a/templates/protostar/component.php b/templates/protostar/component.php index bb6f7e069b4a..06dc16cbde78 100644 --- a/templates/protostar/component.php +++ b/templates/protostar/component.php @@ -13,12 +13,18 @@ $doc = JFactory::getDocument(); $this->language = $doc->language; $this->direction = $doc->direction; + +// Add Stylesheets +$doc->addStyleSheet('templates/'.$this->template.'/css/template.css'); + +// Load optional rtl Bootstrap css and Bootstrap bugfixes +JHtmlBootstrap::loadCss($includeMaincss = false, $this->direction); + ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> <head> <jdoc:include type="head" /> -<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/css/template.css" type="text/css" /> <!--[if lt IE 9]> <script src="<?php echo $this->baseurl ?>/media/jui/js/html5.js"></script> <![endif]--> diff --git a/templates/protostar/css/template.css b/templates/protostar/css/template.css index 171ccaa27b1b..e74612f98d6e 100644 --- a/templates/protostar/css/template.css +++ b/templates/protostar/css/template.css @@ -1888,7 +1888,6 @@ table .span24 { position: relative; height: 0; overflow: hidden; - overflow: visible \9; -webkit-transition: height .35s ease; -moz-transition: height .35s ease; -o-transition: height .35s ease; diff --git a/templates/protostar/error.php b/templates/protostar/error.php index 46fe8a995609..4ff9d3544725 100644 --- a/templates/protostar/error.php +++ b/templates/protostar/error.php @@ -110,11 +110,17 @@ <![endif]--> </head> -<body class="site <?php echo $option . " view-" . $view . " layout-" . $layout . " task-" . $task . " itemid-" . $itemid . " ";?> <?php if ($params->get('fluidContainer')) { echo "fluid"; } ?>"> +<body class="site <?php echo $option + . ' view-' . $view + . ($layout ? ' layout-' . $layout : ' no-layout') + . ($task ? ' task-' . $task : ' no-task') + . ($itemid ? ' itemid-' . $itemid : '') + . ($params->get('fluidContainer') ? ' fluid' : ''); +?>"> <!-- Body --> <div class="body"> - <div class="container<?php if ($params->get('fluidContainer')) { echo "-fluid"; } ?>"> + <div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>"> <!-- Header --> <div class="header"> <div class="header-inner clearfix"> @@ -193,7 +199,7 @@ </div> <!-- Footer --> <div class="footer"> - <div class="container<?php if ($params->get('fluidContainer')) { echo "-fluid"; } ?>"> + <div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>"> <hr /> <jdoc:include type="modules" name="footer" style="none" /> <p class="pull-right"><a href="#top" id="back-top"><?php echo JText::_('TPL_PROTOSTAR_BACKTOTOP'); ?></a></p> diff --git a/templates/protostar/html/modules.php b/templates/protostar/html/modules.php index 0cf9644f4e37..738a3dfc3694 100644 --- a/templates/protostar/html/modules.php +++ b/templates/protostar/html/modules.php @@ -39,7 +39,7 @@ function modChrome_well($module, &$params, &$attribs) echo "<div class=\"well " . htmlspecialchars($params->get('moduleclass_sfx')) . "\">"; if ($module->showtitle) { - echo "<div class=\"page-header\"><strong>" . $module->title . "</strong></div>"; + echo "<h3 class=\"page-header\">" . $module->title . "</h3>"; } echo $module->content; echo "</div>"; diff --git a/templates/protostar/index.php b/templates/protostar/index.php index 5d2a78ead14d..9e6133aa4eea 100644 --- a/templates/protostar/index.php +++ b/templates/protostar/index.php @@ -9,6 +9,9 @@ defined('_JEXEC') or die; +// Getting params from template +$params = JFactory::getApplication()->getTemplate(true)->params; + $app = JFactory::getApplication(); $doc = JFactory::getDocument(); $this->language = $doc->language; @@ -129,10 +132,17 @@ <![endif]--> </head> -<body class="site <?php echo $option . " view-" . $view . " layout-" . $layout . " task-" . $task . " itemid-" . $itemid . " ";?> <?php if ($this->params->get('fluidContainer')) { echo "fluid"; } ?>"> +<body class="site <?php echo $option + . ' view-' . $view + . ($layout ? ' layout-' . $layout : ' no-layout') + . ($task ? ' task-' . $task : ' no-task') + . ($itemid ? ' itemid-' . $itemid : '') + . ($params->get('fluidContainer') ? ' fluid' : ''); +?>"> + <!-- Body --> <div class="body"> - <div class="container<?php if ($this->params->get('fluidContainer')) { echo "-fluid"; } ?>"> + <div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>"> <!-- Header --> <div class="header"> <div class="header-inner clearfix"> @@ -180,7 +190,7 @@ </div> <!-- Footer --> <div class="footer"> - <div class="container<?php if ($this->params->get('fluidContainer')) { echo "-fluid"; } ?>"> + <div class="container<?php echo ($params->get('fluidContainer') ? ' fluid' : '');?>"> <hr /> <jdoc:include type="modules" name="footer" style="none" /> <p class="pull-right"><a href="#top" id="back-top"><?php echo JText::_('TPL_PROTOSTAR_BACKTOTOP'); ?></a></p> diff --git a/tests/CHANGELOG b/tests/CHANGELOG index de780ab9ce2e..0ebc1c52a9d8 100644 --- a/tests/CHANGELOG +++ b/tests/CHANGELOG @@ -26,6 +26,19 @@ $ -> Language fix or change - -> Removed ! -> Note +01-Jan-2013 Mark Dexter + # Fix failing webdriver test due to change in Module edit UI + +27-Dec-2012 Michael Babker + ^ Sync core test framework to the Platform + + Add tests for Editor and Layout packages + +22-Dec-2012 Mark Dexter + # Fix failing system tests caused by markup changes + +21-Dec-2012 Mark Dexter + + Add tests for module manager. + 18-Dec-2012 Mark Dexter # Fix intermittent failures in Webdriver tests diff --git a/tests/system/suite/articles/article0001Test.php b/tests/system/suite/articles/article0001Test.php index d35643e4ff91..94e510486dd4 100644 --- a/tests/system/suite/articles/article0001Test.php +++ b/tests/system/suite/articles/article0001Test.php @@ -113,13 +113,13 @@ function testEditPermission() $this->jPrint ("Go to Home and check that edit icon is visible" . "\n"); $this->click("link=Home"); $this->waitForPageToLoad("30000"); - $this->assertTrue($this->isElementPresent("//i[contains(@class, 'icon-edit')]")); + $this->assertTrue($this->isElementPresent("//span[contains(@class, 'icon-edit')]")); $this->jPrint ("Drill to Sample Data article and check that edit icon is visible" . "\n"); $this->click("link=Home"); $this->waitForPageToLoad("30000"); $this->click("link=Sample Sites"); $this->waitForPageToLoad("30000"); - $this->assertTrue($this->isElementPresent("//i[contains(@class, 'icon-edit')]")); + $this->assertTrue($this->isElementPresent("//span[contains(@class, 'icon-edit')]")); $this->click("link=Home"); $this->waitForPageToLoad("30000"); $this->jPrint ("Logout of front end." . "\n"); @@ -127,11 +127,11 @@ function testEditPermission() $this->jPrint ("Go to home and check that edit icon is not visible." . "\n"); $this->click("link=Home"); $this->waitForPageToLoad("30000"); - $this->assertFalse($this->isElementPresent("//i[contains(@class, 'icon-edit')]")); + $this->assertFalse($this->isElementPresent("//span[contains(@class, 'icon-edit')]")); $this->jPrint ("Drill to Sample Data article and check that edit icon is not visible." . "\n"); $this->click("link=Sample Sites"); $this->waitForPageToLoad("30000"); - $this->assertFalse($this->isElementPresent("//i[contains(@class, 'icon-edit')]")); + $this->assertFalse($this->isElementPresent("//span[contains(@class, 'icon-edit')]")); $this->click("link=Home"); $this->waitForPageToLoad("30000"); $this->deleteAllVisibleCookies(); diff --git a/tests/system/suite/articles/article0002Test.php b/tests/system/suite/articles/article0002Test.php index 1986bac9e9f8..53753a1afdc7 100644 --- a/tests/system/suite/articles/article0002Test.php +++ b/tests/system/suite/articles/article0002Test.php @@ -21,7 +21,7 @@ function testEditArticle() $this->gotoSite(); $this->doFrontEndLogin(); $this->jPrint ("Edit article in front end\n"); - $this->click("//i[contains(@class, 'icon-edit')]"); + $this->click("//span[contains(@class, 'icon-edit')]"); $this->waitForPageToLoad("30000"); $salt = mt_rand(); $testText="Test text $salt"; @@ -48,7 +48,7 @@ function testEditArticle() $this->assertEquals($testText, $this->getText("//div[@class='items-leading']/div[@class='leading-0']//p")); $this->jPrint ("Open again for editing in front end\n"); - $this->click("//i[contains(@class, 'icon-edit')]"); + $this->click("//span[contains(@class, 'icon-edit')]"); $this->waitForPageToLoad("30000"); $text="<p>Congratulations! You have a Joomla! site! Joomla! makes your site easy to build a website " . "just the way you want it and keep it simple to update and maintain.</p> " . diff --git a/tests/system/suite/articles/article0003Test.php b/tests/system/suite/articles/article0003Test.php index f6994767a8da..38315ab55eaf 100644 --- a/tests/system/suite/articles/article0003Test.php +++ b/tests/system/suite/articles/article0003Test.php @@ -416,8 +416,8 @@ function testCategoryListState() $this->open($link); $this->waitForPageToLoad("30000"); $this->jPrint ("Check initial conditions for list\n"); - $this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a")); - $this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a")); + $this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a")); + $this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a")); $this->jPrint ("Unpublish Joomla! category\n"); $this->gotoAdmin(); @@ -459,17 +459,17 @@ function testCategoryListState() $this->gotoSite(); $this->open($link); $this->waitForPageToLoad("30000"); - $this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a")); - $this->assertStringEndsWith("Getting Started", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a")); + $this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a")); + $this->assertStringEndsWith("Getting Started", $this->getText("//tbody/tr[2]/td/a")); $this->jPrint ("Log into site and check that Getting Help shows as Unpublished\n"); $this->gotoSite(); $this->doFrontEndLogin(); $this->open($link); $this->waitForPageToLoad("30000"); - $this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a")); - $this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a")); - $this->assertTrue($this->isElementPresent("//div[@class='category-list']//a[contains(text(), 'Getting Help')]/../../../li[contains(@class, 'system-unpublished')]")); + $this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a")); + $this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a")); + $this->assertTrue($this->isElementPresent("//div[@class='category-list']//a[contains(text(), 'Getting Help')]/../span[contains(text(), 'Unpublished')]")); $this->jPrint ("Change Getting Help state to Archived\n"); $this->gotoAdmin(); @@ -482,8 +482,8 @@ function testCategoryListState() $this->doFrontEndLogin(); $this->open($link); $this->waitForPageToLoad("30000"); - $this->assertStringEndsWith("Beginners", $this->getText("//ul[contains(@class, 'category')]/li[1]/strong/a")); - $this->assertStringEndsWith("Getting Help", $this->getText("//ul[contains(@class, 'category')]/li[2]/strong/a")); + $this->assertStringEndsWith("Beginners", $this->getText("//tbody/tr[1]/td/a")); + $this->assertStringEndsWith("Getting Help", $this->getText("//tbody/tr[2]/td/a")); $this->jPrint ("Log out of Front End\n"); $this->gotoSite(); diff --git a/tests/system/suite/cache/cache0001Test.php b/tests/system/suite/cache/cache0001Test.php index 2ec74a3d888c..38456c6ad038 100644 --- a/tests/system/suite/cache/cache0001Test.php +++ b/tests/system/suite/cache/cache0001Test.php @@ -76,18 +76,18 @@ function testContentCache() $this->jPrint ("Test Article Category List\n"); $link = $this->cfg->path . 'index.php/using-joomla/extensions/components/content-component/article-category-list'; $this->open($link, 'true'); - $this->assertTrue($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]")); + $this->assertTrue($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]")); $this->jPrint ("Change Professionals to different category and check that it is no longer shown\n"); $this->gotoAdmin(); $this->changeCategory('Professionals', 'Article Manager', 'Uncategorised'); $this->gotoSite(); $this->open($link, 'true'); - $this->assertFalse($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]")); + $this->assertFalse($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]")); $this->jPrint ("Change Professionals back to Joomla! and make sure it is shown\n"); $this->changeCategory('Professionals', 'Article Manager', 'Joomla!'); $this->gotoSite(); $this->open($link, 'true'); - $this->assertTrue($this->isElementPresent("//strong[@class='list-title'][contains(.,'Professionals')]")); + $this->assertTrue($this->isElementPresent("//td[@class='list-title'][contains(.,'Professionals')]")); $this->jPrint ("Test Article Featured\n"); $link = $this->cfg->path . 'index.php/using-joomla/extensions/components/content-component/featured-articles'; diff --git a/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php b/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php new file mode 100644 index 000000000000..fc58ec5a2002 --- /dev/null +++ b/tests/system/webdriver/Pages/Extensions/ModuleEditPage.php @@ -0,0 +1,92 @@ +<?php + +use SeleniumClient\By; +use SeleniumClient\SelectElement; +use SeleniumClient\WebDriver; +use SeleniumClient\WebDriverWait; +use SeleniumClient\DesiredCapabilities; +use SeleniumClient\WebElement; + +/** + * Class for the back-end control panel screen. + * + */ +class ModuleEditPage extends AdminEditPage +{ + protected $waitForXpath = "//form[@id='module-form']"; + protected $url = 'administrator/index.php?option=com_users&view=module&layout=edit'; + + /** + * Array of + * @var array expected id values for tab div elements + */ + public $tabs = array('details', 'options', 'assignment'); + + public $tabLabels = array('Details', 'Options', 'Menu Assignment'); + + /** + * Associative array of expected input fields for the Account Details and Basic Settings tabs + * Assigned User Groups tab is omitted because that depends on the groups set up in the sample data + * @var unknown_type + */ + public $inputFields = array ( + array('label' => 'Title', 'id' => 'jform_title', 'type' => 'input', 'tab' => 'details'), + array('label' => 'Show Title', 'id' => 'jform_showtitle', 'type' => 'fieldset', 'tab' => 'details'), + array('label' => 'Position', 'id' => 'jform_position', 'type' => 'select', 'tab' => 'details'), + array('label' => 'Status', 'id' => 'jform_published', 'type' => 'fieldset', 'tab' => 'details'), + array('label' => 'Access', 'id' => 'jform_access', 'type' => 'select', 'tab' => 'details'), + array('label' => 'Ordering', 'id' => 'jform_ordering', 'type' => 'select', 'tab' => 'details'), + array('label' => 'Start Publishing', 'id' => 'jform_publish_up', 'type' => 'input', 'tab' => 'details'), + array('label' => 'Finish Publishing', 'id' => 'jform_publish_down', 'type' => 'input', 'tab' => 'details'), + array('label' => 'Language', 'id' => 'jform_language', 'type' => 'select', 'tab' => 'details'), + array('label' => 'Note', 'id' => 'jform_note', 'type' => 'input', 'tab' => 'details'), + array('label' => 'Parent Category', 'id' => 'jform_params_parent', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Category Descriptions', 'id' => 'jform_params_show_description', 'type' => 'fieldset', 'tab' => 'options'), + array('label' => 'Show Subcategories', 'id' => 'jform_params_show_children', 'type' => 'fieldset', 'tab' => 'options'), + array('label' => '# First Subcategories', 'id' => 'jform_params_count', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Maximum Level Depth', 'id' => 'jform_params_maxlevel', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Alternative Layout', 'id' => 'jform_params_layout', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Heading style', 'id' => 'jform_params_item_heading', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Module Class Suffix', 'id' => 'jform_params_moduleclass_sfx', 'type' => 'input', 'tab' => 'options'), + array('label' => 'Caching', 'id' => 'jform_params_owncache', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Cache Time', 'id' => 'jform_params_cache_time', 'type' => 'input', 'tab' => 'options'), + array('label' => 'Module Tag', 'id' => 'jform_params_module_tag', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Bootstrap Size', 'id' => 'jform_params_bootstrap_size', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Header Tag', 'id' => 'jform_params_header_tag', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Header Class', 'id' => 'jform_params_header_class', 'type' => 'input', 'tab' => 'options'), + array('label' => 'Module Style', 'id' => 'jform_params_style', 'type' => 'select', 'tab' => 'options'), + array('label' => 'Module Assignment', 'id' => 'jform_menus', 'type' => 'div', 'tab' => 'assignment'), + ); + + /** + * Checks for Type and calls special method for this field. + * Otherwise, just calls parent::getFieldValue() + * + * @see AdminEditPage::getFieldValue() + */ + public function getFieldValue($label) + { + if ($label == 'Type') + { + return $this->getModuleType(); + } + else + { + return parent::getFieldValue($label); + } + } + + protected function getModuleType() + { + $elements = $this->driver->findElements(By::xPath("//span[@class = 'label']")); + if (count($elements >= 2)) + { + return $elements[1]->getText(); + } + else + { + return false; + } + } + +} \ No newline at end of file diff --git a/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php b/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php new file mode 100644 index 000000000000..cd9ad5a6cda6 --- /dev/null +++ b/tests/system/webdriver/Pages/Extensions/ModuleManagerPage.php @@ -0,0 +1,183 @@ +<?php + +use SeleniumClient\By; +use SeleniumClient\SelectElement; +use SeleniumClient\WebDriver; +use SeleniumClient\WebDriverWait; +use SeleniumClient\DesiredCapabilities; +use SeleniumClient\WebElement; + +/** + * Class for the back-end control panel screen. + * + */ +class ModuleManagerPage extends AdminManagerPage +{ + protected $waitForXpath = "//ul/li/a[@href='index.php?option=com_modules']"; + protected $url = 'administrator/index.php?option=com_modules'; + + public $filters = array( + 'Site' => 'filter_client_id', + 'Status' => 'filter_state', + 'Position' => 'filter_position', + 'Type' => 'filter_module', + 'Access' => 'filter_access', + 'Language' => 'filter_language', + ); + + public $toolbar = array ( + 'New' => 'toolbar-new', + 'Edit' => 'toolbar-edit', + 'Duplicate' => 'toolbar-copy', + 'Publish' => 'toolbar-publish', + 'Unpublish' => 'toolbar-unpublish', + 'Check In' => 'toolbar-checkin', + 'Trash' => 'toolbar-trash', + 'Empty Trash' => 'toolbar-delete', + 'Batch' => 'toolbar-batch', + 'Options' => 'toolbar-options', + 'Help' => 'toolbar-help', + ); + + public $submenu = array ( + 'option=com_modules&filter_client_id=0', + 'option=com_modules&filter_client_id=1', + ); + + public $moduleTypes = array( + array('client' => 'site', 'name' => 'Archived Articles'), + array('client' => 'site', 'name' => 'Articles - Newsflash'), + array('client' => 'site', 'name' => 'Articles - Related Articles'), + array('client' => 'site', 'name' => 'Articles Categories'), + array('client' => 'site', 'name' => 'Articles Category'), + array('client' => 'site', 'name' => 'Banners'), + array('client' => 'site', 'name' => 'Breadcrumbs'), + array('client' => 'site', 'name' => 'Custom HTML'), + array('client' => 'site', 'name' => 'Feed Display'), + array('client' => 'site', 'name' => 'Footer'), + array('client' => 'site', 'name' => 'Language Switcher'), + array('client' => 'site', 'name' => 'Latest News'), + array('client' => 'site', 'name' => 'Latest Users'), + array('client' => 'site', 'name' => 'Login'), + array('client' => 'site', 'name' => 'Menu'), + array('client' => 'site', 'name' => 'Most Read Content'), + array('client' => 'site', 'name' => 'Random Image'), + array('client' => 'site', 'name' => 'Search'), + array('client' => 'site', 'name' => 'Smart Search Module'), + array('client' => 'site', 'name' => 'Statistics'), + array('client' => 'site', 'name' => 'Syndication Feeds'), + array('client' => 'site', 'name' => 'Weblinks'), + array('client' => 'site', 'name' => 'Who\'s Online'), + array('client' => 'site', 'name' => 'Wrapper'), + array('client' => 'administrator', 'name' => 'Admin sub-Menu'), + array('client' => 'administrator', 'name' => 'Administrator Menu'), + array('client' => 'administrator', 'name' => 'Custom HTML'), + array('client' => 'administrator', 'name' => 'Feed Display'), + array('client' => 'administrator', 'name' => 'Joomla! Version Information'), + array('client' => 'administrator', 'name' => 'Latest News'), + array('client' => 'administrator', 'name' => 'Logged-in Users'), + array('client' => 'administrator', 'name' => 'Login Form'), + array('client' => 'administrator', 'name' => 'Multilanguage Status'), + array('client' => 'administrator', 'name' => 'Popular Articles'), + array('client' => 'administrator', 'name' => 'Quick Icons'), + array('client' => 'administrator', 'name' => 'Statistics'), + array('client' => 'administrator', 'name' => 'Title'), + array('client' => 'administrator', 'name' => 'Toolbar'), + array('client' => 'administrator', 'name' => 'User Status'), + ); + + public function addModule($title = 'Test Module', $client = 'Site', $type = 'Archived Articles', $otherFields = null) + { + $this->setFilter('filter_client_id', $client); + $this->clickButton('toolbar-new'); + $this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., '" . $type . "')]"))->click(); + $moduleEditPage = $this->test->getPageObject('ModuleEditPage'); + $moduleEditPage->setFieldValues(array('Title' => $title)); + if (is_array($otherFields)) + { + $moduleEditPage->setFieldValues($otherFields); + } + $moduleEditPage->clickButton('toolbar-save'); + $this->test->getPageObject('ModuleManagerPage'); + } + + public function changeModuleState($name, $state = 'published') + { + $this->searchFor($name); + $this->checkAll(); + if (strtolower($state) == 'published') + { + $this->clickButton('toolbar-publish'); + $this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath)); + } + elseif (strtolower($state) == 'unpublished') + { + $this->clickButton('toolbar-unpublish'); + $this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath)); + } + $this->searchFor(); + } + + public function editModule($name, $fields, $groupNames = array()) + { + $this->clickItem($name); + $moduleEditPage = $this->test->getPageObject('ModuleEditPage'); + $moduleEditPage->setFieldValues($fields); + $moduleEditPage->clickButton('toolbar-save'); + $this->test->getPageObject('ModuleManagerPage'); + $this->searchFor(); + } + + /** + * Gets the modules field values. In turn calls getFieldValues of AdminManagerPage after selecting module client. + */ + public function getModuleFieldValues($title, $client, $fieldNames = array()) + { + $this->setFilter('filter_client_id', $client); + return $this->getFieldValues('ModuleEditPage', $title, $fieldNames); + } + + /** + * Gets all module types available + * + * @return array associative array of 'site' or 'administrator' => module name + */ + public function getModuleTypes() + { + $result = array(); + $clients = array('Site', 'Administrator'); + foreach ($clients as $client) + { + $this->setFilter('filter_client_id', $client); + $this->clickButton('toolbar-new'); + $this->driver->waitForElementUntilIsPresent(By::xPath("//h2[contains(., 'Select a Module Type')]")); + $el = $this->driver->findElement(By::id('new-modules-list')); + $moduleElements = $el->findElements(By::xPath("//a/strong")); + foreach ($moduleElements as $element) + { + $result[] = array('client' => strtolower($client), 'name' => $element->getText()); + } + $this->driver->findElement(By::xPath("//button[contains(., 'Cancel')]"))->click(); + $moduleManagerPage = $this->test->getPageObject('ModuleManagerPage'); + } + + return $result; + } + + public function getState($title) + { + $result = false; + $this->searchFor($title); + $text = $this->driver->findElement(By::xPath("//tbody/tr//a[contains(@onclick, 'listItemTask')]"))->getAttribute(@onclick); + if (strpos($text, 'modules.publish') > 0) + { + $result = 'unpublished'; + } + elseif (strpos($text, 'modules.unpublish') > 0) + { + $result = 'published'; + } + $this->searchFor(); + return $result; + } +} \ No newline at end of file diff --git a/tests/system/webdriver/Pages/System/AdminEditPage.php b/tests/system/webdriver/Pages/System/AdminEditPage.php index c0503e9a82a0..504a9c5c693d 100644 --- a/tests/system/webdriver/Pages/System/AdminEditPage.php +++ b/tests/system/webdriver/Pages/System/AdminEditPage.php @@ -85,7 +85,7 @@ protected function getInputField($tabId, $label) // Skip non-visible fields (affects permissions) if ($object->labelText == '') { - continue; + return false; } $inputId = $label->getAttribute('for'); $testInput = $this->driver->findElements(By::id($inputId)); @@ -295,8 +295,7 @@ protected function setSelectValues (array $values) elseif (strpos($type, 'chzn-container-single') > 0) { $this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']/a"))->click(); - $this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//input"))->sendKeys($values['value']); - $this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//ul[@class='chzn-results']/li[contains(.,'" . $values['value'] . "')]"))->click(); + $this->driver->findElement(By::xPath("//div[@id='" . $values['id'] . "_chzn']//input"))->sendKeys($values['value'] . "\n"); } } else diff --git a/tests/system/webdriver/Pages/System/AdminManagerPage.php b/tests/system/webdriver/Pages/System/AdminManagerPage.php index a04a35d36b35..c8c037aa73af 100644 --- a/tests/system/webdriver/Pages/System/AdminManagerPage.php +++ b/tests/system/webdriver/Pages/System/AdminManagerPage.php @@ -29,7 +29,13 @@ abstract class AdminManagerPage extends AdminPage public function checkAll() { - $this->driver->findElement(By::xPath("//thead//input[@name='checkall-toggle' or @name='toggle']"))->click(); + $el = $this->driver->findElement(By::xPath("//thead//input[@name='checkall-toggle' or @name='toggle']")); + + // Work-around for intermittant bug with click() on checkboxes -- click until checked + while (!$el->isSelected()) + { + $el->click(); + } } public function clickItem($name) @@ -143,7 +149,6 @@ public function searchFor($search = false) public function setFilter($idOrLabel, $value) { - $result = false; $filters = array_change_key_case($this->filters, CASE_LOWER); $idOrLabel = strtolower($idOrLabel); $filterId = ''; @@ -169,9 +174,8 @@ public function setFilter($idOrLabel, $value) $this->driver->findElement(By::xPath("//div[@id='" . $filterId . "_chzn']/a"))->click(); $this->driver->findElement(By::xPath("//div[@id='" . $filterId . "_chzn']//ul[@class='chzn-results']/li[contains(.,'" . $value . "')]"))->click(); $this->driver->waitForElementUntilIsPresent(By::xPath($this->waitForXpath)); - $result = true; } - return $result; + return $this->test->getPageObject(get_class($this)); } public function deleteItem($name) diff --git a/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php b/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php new file mode 100644 index 000000000000..06ff15994671 --- /dev/null +++ b/tests/system/webdriver/tests/extensions/ModuleManager0001Test.php @@ -0,0 +1,189 @@ +<?php + +require_once 'JoomlaWebdriverTestCase.php'; + +use SeleniumClient\By; +use SeleniumClient\SelectElement; +use SeleniumClient\WebDriver; +use SeleniumClient\WebDriverWait; +use SeleniumClient\DesiredCapabilities; + +/** + * This class tests the Module Manager: Add / Edit Module Screen + * @author Mark + * + */ +class ModuleManager0001Test extends JoomlaWebdriverTestCase +{ + /** + * + * @var ModuleManagerPage + */ + protected $moduleManagerPage = null; // Global configuration page + + public function setUp() + { + parent::setUp(); + $cpPage = $this->doAdminLogin(); + /* @var $cpPage ControlPanelPage */ + $this->moduleManagerPage = $cpPage->clickMenu('Module Manager', 'ModuleManagerPage'); + } + + public function tearDown() + { + $this->doAdminLogout(); + parent::tearDown(); + } + + /** + * @test + */ + public function constructor_OpenEditScreen_ModuleEditOpened() + { + $this->moduleManagerPage->clickButton('new'); + $this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click(); + /* @var $moduleEditPage ModuleEditPage */ + $moduleEditPage = $this->getPageObject('ModuleEditPage'); + $moduleEditPage->clickButton('cancel'); + $this->moduleManagerPage = $this->getPageObject('ModuleManagerPage'); + } + + /** + * @test + */ + public function getTabIds_ScreenDisplayed_EqualExpected() + { + $this->moduleManagerPage->clickButton('toolbar-new'); + $this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click(); + $moduleEditPage = $this->getPageObject('ModuleEditPage'); + $textArray = $moduleEditPage->getTabIds(); + $this->assertEquals($moduleEditPage->tabs, $textArray, 'Tab labels should match expected values.'); + $moduleEditPage->clickButton('toolbar-cancel'); + $this->moduleManagerPage = $this->getPageObject('ModuleManagerPage'); + } + + /** + * @test + */ + public function getModuleTypes_GetsTypes_EqualsExpected() + { + $actualModuleTypes = $this->moduleManagerPage->getModuleTypes(); +// foreach ($actualModuleTypes as $type) +// { +// echo "array('client' => '" . $type['client'] . "', 'name' => '" . $type['name'] . "'),\n"; +// } + $this->assertEquals($this->moduleManagerPage->moduleTypes, $actualModuleTypes, 'Module types should equal expected'); + } + + /** + * @test + */ + public function getAllInputFields_ScreenDisplayed_EqualExpected() + { + $this->moduleManagerPage->clickButton('toolbar-new'); + $this->driver->waitForElementUntilIsPresent(By::xPath("//a[contains(., 'Articles Categories')]"))->click(); + $moduleEditPage = $this->getPageObject('ModuleEditPage'); + $testElements = $moduleEditPage->getAllInputFields($moduleEditPage->tabs); + $actualFields = array(); + foreach ($testElements as $el) + { + $el->labelText = (substr($el->labelText, -2) == ' *') ? substr($el->labelText, 0, -2) : $el->labelText; + $actualFields[] = array('label' => $el->labelText, 'id' => $el->id, 'type' => $el->tag, 'tab' => $el->tab); + } + $this->assertEquals($moduleEditPage->inputFields, $actualFields); + $moduleEditPage->clickButton('toolbar-cancel'); + $this->moduleManagerPage = $this->getPageObject('ModuleManagerPage'); + } + + /** + * @test + */ + public function addModule_WithFieldDefaults_ModuleAdded() + { + $this->assertFalse($this->moduleManagerPage->getRowNumber('Test Module'), 'Test module should not be present'); + $this->moduleManagerPage->addModule(); + $message = $this->moduleManagerPage->getAlertMessage(); + $this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success'); + $this->moduleManagerPage->searchFor('Test Module'); + $this->assertTrue($this->moduleManagerPage->getRowNumber('Test Module') > 0, 'Test module should be in row 2'); + $this->moduleManagerPage->deleteItem('Test Module'); + $this->assertFalse($this->moduleManagerPage->getRowNumber('Test Module'), 'Test module should not be present'); + } + + /** + * @test + */ + public function addModule_WithGivenFields_ModuleAdded() + { + $salt = rand(); + $title = 'Module' . $salt; + $client = 'Administrator'; + $type = 'Custom HTML'; + $position = 'mynewposition'; + $suffix = 'mysuffix'; + $otherFields = array('Position' => $position, 'Module Class Suffix' => $suffix); + $this->moduleManagerPage->setFilter('filter_client_id', $client)->searchFor($title); + $this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present'); + $this->moduleManagerPage->addModule($title, $client, $type, $otherFields); + $message = $this->moduleManagerPage->getAlertMessage(); + $this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success'); + $this->moduleManagerPage->searchFor($title); + $this->assertTrue($this->moduleManagerPage->getRowNumber($title) > 0, 'Test module should be present'); + + $values = $this->moduleManagerPage->getModuleFieldValues($title, $client, array('Position', 'Module Class Suffix')); + $this->assertEquals(array($position, $suffix), $values, 'Actual position and suffix should match expected'); + $this->moduleManagerPage->deleteItem($title); + $this->moduleManagerPage->searchFor($title); + $this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present'); + $this->moduleManagerPage->searchFor(); + } + + /** + * @test + */ + public function editModule_ChangeFields_FieldsChanged() + { + $salt = rand(); + $title = 'Module' . $salt; + $client = 'Administrator'; + $type = 'Custom HTML'; + $position = 'myposition'; + $suffix = 'mysuffix'; + $otherFields = array('Position' => $position, 'Module Class Suffix' => $suffix); + $this->moduleManagerPage->setFilter('filter_client_id', $client)->searchFor($title); + $this->assertFalse($this->moduleManagerPage->getRowNumber($title), 'Test module should not be present'); + $this->moduleManagerPage->addModule($title, $client, $type, $otherFields); + $message = $this->moduleManagerPage->getAlertMessage(); + $this->assertTrue(strpos($message, 'Module successfully saved') >= 0, 'Module save should return success'); + $this->moduleManagerPage->searchFor($title); + $this->assertTrue($this->moduleManagerPage->getRowNumber($title) > 0, 'Test module should be present'); + + $values = $this->moduleManagerPage->getModuleFieldValues($title, $client, array('Position', 'Module Class Suffix')); + $this->assertEquals(array($position, $suffix), $values, 'Actual position and suffix should match expected'); + + $newTitle = 'New Module Title' . $salt; + $newPosition = 'mynewposition'; + $newSuffix = 'mynewsuffix'; + $newNote = 'my new note'; + $this->moduleManagerPage->editModule($title, array('Title' => $newTitle, 'Position' => $newPosition, 'Module Class Suffix' => $newSuffix, 'Note' => $newNote)); + + $values = $this->moduleManagerPage->getModuleFieldValues($newTitle, $client, array('Title', 'Position', 'Module Class Suffix', 'Note')); + $this->assertEquals(array($newTitle, $newPosition, $newSuffix, $newNote), $values, 'Actual values should match expected'); + $this->moduleManagerPage->deleteItem($newTitle); + } + + /** + * @test + */ + public function changeModuleState_ChangeEnabledUsingToolbar_EnabledChanged() + { + $this->moduleManagerPage->addModule('Test Module'); + $state = $this->moduleManagerPage->getState('Test Module'); + $this->assertEquals('published', $state, 'Initial state should be published'); + $this->moduleManagerPage->changeModuleState('Test Module', 'unpublished'); + $state = $this->moduleManagerPage->getState('Test Module'); + $this->assertEquals('unpublished', $state, 'State should be unpublished'); + $this->moduleManagerPage->deleteItem('Test Module'); + } + +} \ No newline at end of file diff --git a/tests/system/webdriver/tests/phpunit.xml.dist b/tests/system/webdriver/tests/phpunit.xml.dist index 0a52c83e672e..5b3850bd156a 100644 --- a/tests/system/webdriver/tests/phpunit.xml.dist +++ b/tests/system/webdriver/tests/phpunit.xml.dist @@ -4,6 +4,7 @@ <testsuite name="tests"> <directory>installation</directory> <directory>control_panel</directory> + <directory>extensions</directory> <directory>menus</directory> <directory>users</directory> </testsuite> diff --git a/tests/unit/core/case/case.php b/tests/unit/core/case/case.php index fcdfe0696b61..6dc1fef23b9f 100644 --- a/tests/unit/core/case/case.php +++ b/tests/unit/core/case/case.php @@ -36,6 +36,7 @@ abstract class TestCase extends PHPUnit_Framework_TestCase 'application' => null, 'config' => null, 'dates' => null, + 'database' => null, 'session' => null, 'language' => null, 'document' => null, @@ -46,7 +47,7 @@ abstract class TestCase extends PHPUnit_Framework_TestCase /** * Receives the callback from JError and logs the required error information for the test. * - * @param JException $error The JException object from JError + * @param JException $error The JException object from JError * * @return boolean To not continue with JError processing * @@ -116,7 +117,7 @@ public function assignMockReturns($mockObject, $array) * If a test expects a JError to be raised, it should call this setExpectedError first * If you don't call this method first, the test will fail. * - * @param JException $error + * @param JException $error The JException object from JError * * @return JException * @@ -140,6 +141,7 @@ public function expectedErrorCallback($error) if ($thisError) { unset($this->expectedErrors[$key]); + return $error; } @@ -288,7 +290,7 @@ class_exists('JApplicationWeb'); * * If passed without argument, the array is initialized if it hsn't been already * - * @param mixed $error + * @param mixed $error The JException object to expect. * * @return void * @@ -346,6 +348,7 @@ protected function restoreFactoryState() JFactory::$document = $this->_stashedFactoryState['document']; JFactory::$acl = $this->_stashedFactoryState['acl']; JFactory::$mailer = $this->_stashedFactoryState['mailer']; + JFactory::$database = $this->_stashedFactoryState['database']; } /** @@ -386,6 +389,7 @@ protected function saveFactoryState() $this->_stashedFactoryState['document'] = JFactory::$document; $this->_stashedFactoryState['acl'] = JFactory::$acl; $this->_stashedFactoryState['mailer'] = JFactory::$mailer; + $this->_stashedFactoryState['database'] = JFactory::$database; } /** @@ -422,10 +426,11 @@ protected function setErrorHandlers($errorHandlers) } /** - * Sets the JError error handlers to callback mode and points them at the test - * logging method. + * Sets the JError error handlers to callback mode and points them at the test logging method. + * + * @param string $testName The name of the test class for which to set the error callback method. * - * @return void + * @return void * * @since 12.1 */ diff --git a/tests/unit/core/case/database.php b/tests/unit/core/case/database.php index 1f3b6e18c895..c652d96d526c 100644 --- a/tests/unit/core/case/database.php +++ b/tests/unit/core/case/database.php @@ -56,7 +56,7 @@ abstract class TestCaseDatabase extends PHPUnit_Extensions_Database_TestCase /** * Receives the callback from JError and logs the required error information for the test. * - * @param JException The JException object from JError + * @param JException $error The JException object from JError * * @return bool To not continue with JError processing * @@ -313,7 +313,14 @@ class_exists('JApplicationWeb'); */ protected function getConnection() { - return $this->createDefaultDBConnection(self::$driver->getConnection(), ':memory:'); + if (!is_null(self::$driver)) + { + return $this->createDefaultDBConnection(self::$driver->getConnection(), ':memory:'); + } + else + { + return null; + } } /** @@ -452,10 +459,11 @@ protected function setErrorHandlers($errorHandlers) } /** - * Sets the JError error handlers to callback mode and points them at the test - * logging method. + * Sets the JError error handlers to callback mode and points them at the test logging method. + * + * @param string $testName The name of the test class for which to set the error callback method. * - * @return void + * @return void * * @since 12.1 */ diff --git a/tests/unit/core/case/database/oracle.php b/tests/unit/core/case/database/oracle.php index 65c6375c80ee..93ed708d82d3 100644 --- a/tests/unit/core/case/database/oracle.php +++ b/tests/unit/core/case/database/oracle.php @@ -76,7 +76,7 @@ public static function setUpBeforeClass() $components = parse_url($v); self::$_options['host'] = $components['host']; self::$_options['port'] = $components['port']; - self::$_options['database'] = $components['path']; + self::$_options['database'] = ltrim($components['path'], '/'); break; case 'user': self::$_options['user'] = $v; @@ -84,6 +84,12 @@ public static function setUpBeforeClass() case 'pass': self::$_options['password'] = $v; break; + case 'dbschema': + self::$_options['schema'] = $v; + break; + case 'prefix': + self::$_options['prefix'] = $v; + break; } } @@ -136,7 +142,7 @@ protected function getConnection() { // Compile the connection DSN. $dsn = 'oci:dbname=//' . self::$_options['host'] . ':' . self::$_options['port'] . '/' . self::$_options['database']; - $dsn .= ';charset=' . self::$_options['host']; + $dsn .= ';charset=' . self::$_options['charset']; // Create the PDO object from the DSN and options. $pdo = new PDO($dsn, self::$_options['user'], self::$_options['password']); diff --git a/tests/unit/core/mock/cache.php b/tests/unit/core/mock/cache.php index b345da16049a..4e10364f7946 100644 --- a/tests/unit/core/mock/cache.php +++ b/tests/unit/core/mock/cache.php @@ -68,11 +68,11 @@ public static function create(TestCase $test, $data = array()) /** * Callback for the cache get method. * - * @param string $id The name of the cache key to retrieve. + * @param string $id The name of the cache key to retrieve. * - * @return mixed The value of the key or null if it does not exist. + * @return mixed The value of the key or null if it does not exist. * - * @since 12.1 + * @since 12.1 */ public function mockGet($id) { @@ -82,12 +82,12 @@ public function mockGet($id) /** * Callback for the cache get method. * - * @param string $key The name of the cache key. - * @param string $group Dummy group. + * @param string $value The value to store. + * @param string $id The name of the cache key. * - * @return mixed The value of the key or null if it does not exist. + * @return mixed The value of the key or null if it does not exist. * - * @since 12.1 + * @since 12.1 */ public function mockStore($value, $id) { diff --git a/tests/unit/core/mock/database/driver.php b/tests/unit/core/mock/database/driver.php index 2740d57a58f4..56ddb85222fb 100644 --- a/tests/unit/core/mock/database/driver.php +++ b/tests/unit/core/mock/database/driver.php @@ -25,7 +25,9 @@ class TestMockDatabaseDriver /** * Creates and instance of the mock JDatabase object. * - * @param object $test A test object. + * @param object $test A test object. + * @param string $nullDate A null date string for the driver. + * @param string $dateFormat A date format for the driver. * * @return object * @@ -115,26 +117,41 @@ public static function create($test, $nullDate = '0000-00-00 00:00:00', $dateFor $test->assignMockCallbacks( $mockObject, array( - 'getQuery' => array((is_callable(array($test, 'mockGetQuery')) ? $test : get_called_class()), 'mockGetQuery'), - 'quote' => array((is_callable(array($test, 'mockQuote')) ? $test : get_called_class()), 'mockQuote'), - 'quoteName' => array((is_callable(array($test, 'mockQuoteName')) ? $test : get_called_class()), 'mockQuoteName'), - 'setQuery' => array((is_callable(array($test, 'mockSetQuery')) ? $test : get_called_class()), 'mockSetQuery'), + 'escape' => array((is_callable(array($test, 'mockEscape')) ? $test : __CLASS__), 'mockEscape'), + 'getQuery' => array((is_callable(array($test, 'mockGetQuery')) ? $test : __CLASS__), 'mockGetQuery'), + 'quote' => array((is_callable(array($test, 'mockQuote')) ? $test : __CLASS__), 'mockQuote'), + 'quoteName' => array((is_callable(array($test, 'mockQuoteName')) ? $test : __CLASS__), 'mockQuoteName'), + 'setQuery' => array((is_callable(array($test, 'mockSetQuery')) ? $test : __CLASS__), 'mockSetQuery'), ) ); return $mockObject; } + /** + * Callback for the dbo escape method. + * + * @param string $text The input text. + * + * @return string + * + * @since 11.3 + */ + public function mockEscape($text) + { + return "_{$text}_"; + } + /** * Callback for the dbo setQuery method. * - * @param string $new True to get a new query, false to get the last query. + * @param boolean $new True to get a new query, false to get the last query. * - * @return void + * @return void * - * @since 11.3 + * @since 11.3 */ - public function mockGetQuery($new = false) + public static function mockGetQuery($new = false) { if ($new) { @@ -149,27 +166,37 @@ public function mockGetQuery($new = false) /** * Mocking the quote method. * - * @param string $value The value to be quoted. + * @param string $value The value to be quoted. * - * @return string The value passed wrapped in MySQL quotes. + * @return string The value passed wrapped in MySQL quotes. * - * @since 11.3 + * @since 11.3 */ - public function mockQuote($value) + public static function mockQuote($value, $escape = true) { - return "'$value'"; + if (is_array($value)) + { + foreach ($value as $k => $v) + { + $value[$k] = self::mockQuote($v, $escape); + } + + return $value; + } + + return '\'' . ($escape ? self::mockEscape($value) : $value) . '\''; } /** * Mock quoteName method. * - * @param string $value The value to be quoted. + * @param string $value The value to be quoted. * - * @return string The value passed wrapped in MySQL quotes. + * @return string The value passed wrapped in MySQL quotes. * - * @since 11.3 + * @since 11.3 */ - public function mockQuoteName($value) + public static function mockQuoteName($value) { return "`$value`"; } @@ -177,13 +204,13 @@ public function mockQuoteName($value) /** * Callback for the dbo setQuery method. * - * @param string $query The query. + * @param string $query The query. * - * @return void + * @return void * - * @since 11.3 + * @since 11.3 */ - public function mockSetQuery($query) + public static function mockSetQuery($query) { self::$lastQuery = $query; } diff --git a/tests/unit/core/mock/dispatcher.php b/tests/unit/core/mock/dispatcher.php index 6a4aff617eae..9a188e7f6926 100644 --- a/tests/unit/core/mock/dispatcher.php +++ b/tests/unit/core/mock/dispatcher.php @@ -33,7 +33,8 @@ class TestMockDispatcher /** * Creates and instance of the mock JLanguage object. * - * @param object $test A test object. + * @param object $test A test object. + * @param boolean $defaults True to create the default mock handlers and triggers. * * @return object * diff --git a/tests/unit/core/mock/document.php b/tests/unit/core/mock/document.php index 75eccf9f713c..b6dba5309b55 100644 --- a/tests/unit/core/mock/document.php +++ b/tests/unit/core/mock/document.php @@ -17,7 +17,7 @@ class TestMockDocument /** * Creates and instance of the mock JLanguage object. * - * @param object $test A test object. + * @param object $test A test object. * * @return object * diff --git a/tests/unit/core/mock/language.php b/tests/unit/core/mock/language.php index 8461940a8114..68c79b3d3112 100644 --- a/tests/unit/core/mock/language.php +++ b/tests/unit/core/mock/language.php @@ -17,7 +17,7 @@ class TestMockLanguage /** * Creates and instance of the mock JLanguage object. * - * @param object $test A test object. + * @param object $test A test object. * * @return object * diff --git a/tests/unit/core/mock/rules.php b/tests/unit/core/mock/rules.php index cba3bf7c7854..c7642ba5a2cc 100644 --- a/tests/unit/core/mock/rules.php +++ b/tests/unit/core/mock/rules.php @@ -17,7 +17,7 @@ class TestMockRules /** * Creates an instance of the mock JDatabase object. * - * @param object $test A test object. + * @param object $test A test object. * * @return object * @@ -55,7 +55,8 @@ public static function create($test) /** * Mocking the allow method. * - * @param string $action The action. + * @param string $action The action. + * @param integer $identity The identity ID. * * @return mixed Boolean or null. * diff --git a/tests/unit/core/reflection/reflection.php b/tests/unit/core/reflection/reflection.php index fc2353592b8a..def249b36c37 100644 --- a/tests/unit/core/reflection/reflection.php +++ b/tests/unit/core/reflection/reflection.php @@ -17,8 +17,8 @@ class TestReflection /** * Helper method that gets a protected or private property in a class by relfection. * - * @param object $object - * @param string $propertyName + * @param object $object The object from which to return the property value. + * @param string $propertyName The name of the property to return. * * @return mixed The value of the property. * @@ -57,8 +57,8 @@ public static function getValue($object, $propertyName) * * $this->asserTrue(TestCase::invoke('methodName', $this->object, 123)); * - * @param object $object - * @param string $methodName + * @param object $object The object on which to invoke the method. + * @param string $methodName The name of the method to invoke. * * @return mixed * @@ -84,9 +84,9 @@ public static function invoke($object, $methodName) /** * Helper method that sets a protected or private property in a class by relfection. * - * @param object $object - * @param string $propertyName - * @param mixed $value + * @param object $object The object for which to set the property. + * @param string $propertyName The name of the property to set. + * @param mixed $value The value to set for the property. * * @return void * @@ -105,7 +105,7 @@ public static function setValue($object, $propertyName, $value) $property->setValue($object, $value); } // Hrm, maybe dealing with a private property in the parent class. - else if (get_parent_class($object)) + elseif (get_parent_class($object)) { $property = new \ReflectionProperty(get_parent_class($object), $propertyName); $property->setAccessible(true); diff --git a/tests/unit/suites/libraries/editor/JEditorTest.php b/tests/unit/suites/libraries/editor/JEditorTest.php new file mode 100644 index 000000000000..324ba067430f --- /dev/null +++ b/tests/unit/suites/libraries/editor/JEditorTest.php @@ -0,0 +1,141 @@ +<?php +/** + * @package Joomla.UnitTest + * @subpackage Editor + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE + */ + +/** + * Test class for JEditor. + */ +class JEditorTest extends PHPUnit_Framework_TestCase +{ + /** + * @var JEditor + */ + protected $object; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + $this->object = new JEditor; + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + /** + * Tests the getInstance method + * + * @return void + * + * @since 3.0 + */ + public function testGetInstance() + { + $this->assertThat( + JEditor::getInstance('none'), + $this->isInstanceOf('JEditor') + ); + } + + /** + * Tests the getState method + * + * @return void + * + * @since 3.0 + */ + public function testGetState() + { + // Preload the state to test it + TestReflection::setValue($this->object, '_state', 'JEditor::getState()'); + + $this->assertThat( + $this->object->getState(), + $this->equalTo('JEditor::getState()') + ); + } + + /** + * @todo Implement testAttach(). + */ + public function testAttach() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testDetach(). + */ + public function testDetach() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testInitialise(). + */ + public function testInitialise() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testDisplay(). + */ + public function testDisplay() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testSave(). + */ + public function testSave() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testGetContent(). + */ + public function testGetContent() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testSetContent(). + */ + public function testSetContent() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } + + /** + * @todo Implement testGetButtons(). + */ + public function testGetButtons() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } +} diff --git a/tests/unit/suites/libraries/layout/JLayoutBaseTest.php b/tests/unit/suites/libraries/layout/JLayoutBaseTest.php new file mode 100644 index 000000000000..dcc6474ce1ba --- /dev/null +++ b/tests/unit/suites/libraries/layout/JLayoutBaseTest.php @@ -0,0 +1,67 @@ +<?php +/** + * @package Joomla.UnitTest + * @subpackage Layout + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE + */ + +/** + * Test class for JLayoutBase. + */ +class JLayoutBaseTest extends PHPUnit_Framework_TestCase +{ + /** + * @var JLayoutBase + */ + protected $object; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + $this->object = new JLayoutBase; + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + } + + /** + * Tests the escape method + * + * @return void + * + * @since 3.0 + */ + public function testEscape() + { + $this->assertThat( + $this->object->escape('This is cool & fun to use!'), + $this->equalTo('This is cool & fun to use!') + ); + } + + /** + * Tests the render method + * + * @return void + * + * @since 3.0 + */ + public function testRender() + { + $this->assertThat( + $this->object->render('Data'), + $this->equalTo(''), + 'JLayoutBase::render does not render an output' + ); + } +} diff --git a/tests/unit/suites/libraries/layout/JLayoutFileTest.php b/tests/unit/suites/libraries/layout/JLayoutFileTest.php new file mode 100644 index 000000000000..af19476815de --- /dev/null +++ b/tests/unit/suites/libraries/layout/JLayoutFileTest.php @@ -0,0 +1,65 @@ +<?php +/** + * @package Joomla.UnitTest + * @subpackage Layout + * + * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE + */ + +/** + * Test class for JLayoutFile. + */ +class JLayoutFileTest extends TestCase +{ + /** + * @var JLayoutFile + */ + protected $object; + + /** + * Sets up the fixture, for example, opens a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + $this->saveFactoryState(); + + JFactory::$application = $this->getMockApplication(); + + $this->object = new JLayoutFile('joomla.sidebars.submenu'); + } + + /** + * Tears down the fixture, for example, closes a network connection. + * This method is called after a test is executed. + */ + protected function tearDown() + { + $this->restoreFactoryState(); + } + + /** + * Tests the escape method + * + * @return void + * + * @since 3.0 + */ + public function testEscape() + { + $this->assertThat( + $this->object->escape('This is cool & fun to use!'), + $this->equalTo('This is cool & fun to use!') + ); + } + + /** + * @todo Implement testRender(). + */ + public function testRender() + { + // Remove the following lines when you implement this test. + $this->markTestIncomplete('This test has not been implemented yet.'); + } +}