Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
139f1d643e | ||
|
|
005efe752c | ||
|
|
fb4f764bc4 | ||
|
|
b5cbba7899 | ||
|
|
9d0089eac3 | ||
|
|
ee345f1bb6 | ||
|
|
edc66d3404 | ||
|
|
51718b2bb8 | ||
|
|
9a0345defd | ||
|
|
bc546cc1e1 | ||
|
|
f99715743b | ||
|
|
d903e1e232 | ||
|
|
b6ff24da50 |
@@ -103,6 +103,9 @@ jobs:
|
||||
INPUT_STABILITY: ${{ steps.meta.outputs.stability }}
|
||||
INPUT_SUFFIX: ${{ steps.meta.outputs.suffix }}
|
||||
run: |
|
||||
BRANCH="${{ github.ref_name }}"
|
||||
GITEA_API="${GITEA_URL}/api/v1/repos/${{ github.repository }}"
|
||||
|
||||
# Read current version from README.md
|
||||
CURRENT=$(sed -n 's/.*VERSION:[[:space:]]*\([0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\).*/\1/p' README.md 2>/dev/null | head -1)
|
||||
if [ -z "$CURRENT" ]; then
|
||||
@@ -152,7 +155,7 @@ jobs:
|
||||
PYEOF
|
||||
fi
|
||||
|
||||
# Commit bump
|
||||
# Commit bump to current branch
|
||||
git config --local user.email "gitea-actions[bot]@mokoconsulting.tech"
|
||||
git config --local user.name "gitea-actions[bot]"
|
||||
git remote set-url origin "https://jmiller:${GA_TOKEN}@git.mokoconsulting.tech/${{ github.repository }}.git"
|
||||
@@ -163,6 +166,20 @@ jobs:
|
||||
git push
|
||||
}
|
||||
|
||||
# For stable releases from dev: merge dev → main via Gitea API
|
||||
if [ "$INPUT_STABILITY" = "stable" ] && [ "$BRANCH" != "main" ]; then
|
||||
echo "Merging ${BRANCH} → main via Gitea API..."
|
||||
curl -sf -X POST -H "Authorization: token ${GA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
"${GITEA_API}/merges" \
|
||||
-d "$(jq -n \
|
||||
--arg base "main" \
|
||||
--arg head "${BRANCH}" \
|
||||
--arg msg "chore(release): merge ${BRANCH} for stable ${NEW_VERSION} [skip ci]" \
|
||||
'{base: $base, head: $head, merge_message_field: $msg}'
|
||||
)" > /dev/null 2>&1 || echo "Merge API call failed — may need manual merge"
|
||||
fi
|
||||
|
||||
echo "version=${NEW_VERSION}" >> "$GITHUB_OUTPUT"
|
||||
echo "zip_name=${EXT_ELEMENT}-${NEW_VERSION}${INPUT_SUFFIX}.zip" >> "$GITHUB_OUTPUT"
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
INGROUP: MokoOnyx.Documentation
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx
|
||||
FILE: ./README.md
|
||||
VERSION: 01.00.07
|
||||
VERSION: 01.00.10
|
||||
BRIEF: Documentation for MokoOnyx template
|
||||
-->
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoOnyx.Documentation
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia
|
||||
REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx
|
||||
FILE: docs/ROADMAP.md
|
||||
VERSION: 03.09.03
|
||||
BRIEF: Version-specific roadmap for MokoOnyx template
|
||||
@@ -879,8 +879,8 @@ MokoOnyx aims to be the **most developer-friendly, user-customizable, and standa
|
||||
|
||||
### Official Links
|
||||
- **Full Roadmap**: [https://mokoconsulting.tech/support/joomla-cms/mokoonyx-roadmap](https://mokoconsulting.tech/support/joomla-cms/mokoonyx-roadmap)
|
||||
- **Repository**: [https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia)
|
||||
- **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia/issues)
|
||||
- **Repository**: [https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx](https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx)
|
||||
- **Issue Tracker**: [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/issues)
|
||||
- **Changelog**: [CHANGELOG.md](../CHANGELOG.md)
|
||||
|
||||
### Community
|
||||
@@ -901,7 +901,7 @@ MokoOnyx aims to be the **most developer-friendly, user-customizable, and standa
|
||||
Have ideas for future features? We welcome community input!
|
||||
|
||||
**How to Suggest Features**:
|
||||
1. Check the [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/moko-cassiopeia/issues) for existing requests
|
||||
1. Check the [GitHub Issues](https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/issues) for existing requests
|
||||
2. Open a new issue with the `enhancement` label
|
||||
3. Provide clear use cases and benefits
|
||||
4. Engage in community discussion
|
||||
|
||||
@@ -172,6 +172,68 @@ use Joomla\CMS\Log\Log;
|
||||
}
|
||||
}
|
||||
|
||||
// Replace MokoCassiopeia references in article content
|
||||
try {
|
||||
$contentTables = [
|
||||
['table' => '#__content', 'columns' => ['introtext', 'fulltext']],
|
||||
];
|
||||
|
||||
$totalReplaced = 0;
|
||||
|
||||
foreach ($contentTables as $spec) {
|
||||
foreach ($spec['columns'] as $col) {
|
||||
$query = $db->getQuery(true)
|
||||
->update($spec['table'])
|
||||
->set(
|
||||
$db->quoteName($col) . ' = REPLACE(REPLACE('
|
||||
. $db->quoteName($col) . ', '
|
||||
. $db->quote($oldDisplay) . ', '
|
||||
. $db->quote($newDisplay) . '), '
|
||||
. $db->quote($oldName) . ', '
|
||||
. $db->quote($newName) . ')'
|
||||
)
|
||||
->where(
|
||||
'(' . $db->quoteName($col) . ' LIKE ' . $db->quote('%' . $oldDisplay . '%')
|
||||
. ' OR ' . $db->quoteName($col) . ' LIKE ' . $db->quote('%' . $oldName . '%') . ')'
|
||||
);
|
||||
$db->setQuery($query)->execute();
|
||||
$totalReplaced += $db->getAffectedRows();
|
||||
}
|
||||
}
|
||||
|
||||
if ($totalReplaced > 0) {
|
||||
$log("Replaced MokoCassiopeia references in {$totalReplaced} content row(s).");
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$log('Content replacement failed: ' . $e->getMessage(), Log::WARNING);
|
||||
}
|
||||
|
||||
// Replace MokoCassiopeia references in custom HTML modules
|
||||
try {
|
||||
$query = $db->getQuery(true)
|
||||
->update('#__modules')
|
||||
->set(
|
||||
$db->quoteName('content') . ' = REPLACE(REPLACE('
|
||||
. $db->quoteName('content') . ', '
|
||||
. $db->quote($oldDisplay) . ', '
|
||||
. $db->quote($newDisplay) . '), '
|
||||
. $db->quote($oldName) . ', '
|
||||
. $db->quote($newName) . ')'
|
||||
)
|
||||
->where(
|
||||
'(' . $db->quoteName('content') . ' LIKE ' . $db->quote('%' . $oldDisplay . '%')
|
||||
. ' OR ' . $db->quoteName('content') . ' LIKE ' . $db->quote('%' . $oldName . '%') . ')'
|
||||
);
|
||||
$db->setQuery($query)->execute();
|
||||
$modulesUpdated = $db->getAffectedRows();
|
||||
|
||||
if ($modulesUpdated > 0) {
|
||||
$log("Replaced MokoCassiopeia references in {$modulesUpdated} module(s).");
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$log('Module content replacement failed: ' . $e->getMessage(), Log::WARNING);
|
||||
}
|
||||
|
||||
// Update the update server
|
||||
try {
|
||||
$onyxUpdatesUrl = 'https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/raw/branch/main/updates.xml';
|
||||
@@ -189,6 +251,36 @@ use Joomla\CMS\Log\Log;
|
||||
$log('Update server redirect failed: ' . $e->getMessage(), Log::WARNING);
|
||||
}
|
||||
|
||||
// Unlock MokoCassiopeia (allow uninstall) + lock MokoOnyx (prevent accidental uninstall)
|
||||
try {
|
||||
$query = $db->getQuery(true)
|
||||
->update('#__extensions')
|
||||
->set($db->quoteName('locked') . ' = 0')
|
||||
->set($db->quoteName('protected') . ' = 0')
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote($oldName))
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('template'));
|
||||
$db->setQuery($query)->execute();
|
||||
if ($db->getAffectedRows() > 0) {
|
||||
$log('Unlocked MokoCassiopeia (can be uninstalled).');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$log('Failed to unlock MokoCassiopeia: ' . $e->getMessage(), Log::WARNING);
|
||||
}
|
||||
|
||||
try {
|
||||
$query = $db->getQuery(true)
|
||||
->update('#__extensions')
|
||||
->set($db->quoteName('locked') . ' = 1')
|
||||
->where($db->quoteName('element') . ' = ' . $db->quote($newName))
|
||||
->where($db->quoteName('type') . ' = ' . $db->quote('template'));
|
||||
$db->setQuery($query)->execute();
|
||||
if ($db->getAffectedRows() > 0) {
|
||||
$log('Locked MokoOnyx (protected from uninstall).');
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
$log('Failed to lock MokoOnyx: ' . $e->getMessage(), Log::WARNING);
|
||||
}
|
||||
|
||||
// Write marker file
|
||||
@file_put_contents($markerFile, date('Y-m-d H:i:s') . " migrated {$oldName} → {$newName}");
|
||||
|
||||
|
||||
48
src/html/layouts/joomla/module/card.php
Normal file
48
src/html/layouts/joomla/module/card.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: MokoOnyx.Layout
|
||||
* INGROUP: MokoOnyx
|
||||
* REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx
|
||||
* PATH: /html/layouts/joomla/module/card.php
|
||||
* VERSION: 01.00.07
|
||||
* BRIEF: Custom card module chrome — renders module titles for all modules
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$module = $displayData['module'];
|
||||
$params = $displayData['params'];
|
||||
$attribs = $displayData['attribs'];
|
||||
|
||||
$moduleTag = htmlspecialchars($params->get('module_tag', 'div'), ENT_QUOTES, 'UTF-8');
|
||||
$headerTag = htmlspecialchars($params->get('header_tag', 'h3'), ENT_QUOTES, 'UTF-8');
|
||||
$headerClass = htmlspecialchars($params->get('header_class', ''), ENT_QUOTES, 'UTF-8');
|
||||
$bootstrapSize = (int) $params->get('bootstrap_size', 0);
|
||||
$moduleClass = htmlspecialchars($attribs['moduleclass_sfx'] ?? '', ENT_QUOTES, 'UTF-8');
|
||||
|
||||
$moduleId = 'module-' . $module->id;
|
||||
|
||||
if ($module->content === '' && $module->content === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
$cardClass = 'card' . ($moduleClass ? ' ' . $moduleClass : '');
|
||||
?>
|
||||
<<?php echo $moduleTag; ?> id="<?php echo $moduleId; ?>" class="<?php echo $cardClass; ?>">
|
||||
<?php if ((bool) $module->showtitle) : ?>
|
||||
<div class="card-header">
|
||||
<<?php echo $headerTag; ?> class="card-title<?php echo $headerClass ? ' ' . $headerClass : ''; ?>"><?php echo $module->title; ?></<?php echo $headerTag; ?>>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="card-body">
|
||||
<?php echo $module->content; ?>
|
||||
</div>
|
||||
</<?php echo $moduleTag; ?>>
|
||||
1
src/html/layouts/joomla/module/index.html
Normal file
1
src/html/layouts/joomla/module/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
194
src/html/mod_cblogin/default.php
Normal file
194
src/html/mod_cblogin/default.php
Normal file
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
/**
|
||||
* Community Builder (TM)
|
||||
* @version $Id: $
|
||||
* @package CommunityBuilder
|
||||
* @copyright (C) 2004-2025 www.joomlapolis.com / Lightning MultiCom SA - and its licensors, all rights reserved
|
||||
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
|
||||
*/
|
||||
|
||||
use CBLib\Application\Application;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
|
||||
|
||||
HTMLHelper::_( 'behavior.keepalive' );
|
||||
|
||||
?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'beforeForm' ); ?>
|
||||
<form action="<?php echo $_CB_framework->viewUrl( 'login', true, null, 'html', $secureForm ); ?>" method="post" id="login-form" class="cbLoginForm">
|
||||
<input type="hidden" name="option" value="com_comprofiler" />
|
||||
<input type="hidden" name="view" value="login" />
|
||||
<input type="hidden" name="op2" value="login" />
|
||||
<input type="hidden" name="return" value="B:<?php echo $loginReturnUrl; ?>" />
|
||||
<input type="hidden" name="message" value="<?php echo (int) $params->get( 'login_message', 0 ); ?>" />
|
||||
<input type="hidden" name="loginfrom" value="<?php echo htmlspecialchars( ( defined( '_UE_LOGIN_FROM' ) ? _UE_LOGIN_FROM : 'loginmodule' ) ); ?>" />
|
||||
<?php echo Application::Session()->getFormTokenInput(); ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'start' ); ?>
|
||||
<?php if ( $preLogintText ) { ?>
|
||||
<div class="pretext <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $preLogintText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'almostStart' ); ?>
|
||||
<?php if ( $loginMethod != 4 ) { ?>
|
||||
<fieldset class="userdata">
|
||||
<p id="form-login-username">
|
||||
<?php if ( in_array( $showUsernameLabel, array( 1, 2, 3, 5 ) ) ) { ?>
|
||||
<?php if ( in_array( $showUsernameLabel, array( 2, 5 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleUsernameIcon fa fa-user" title="<?php echo htmlspecialchars( $userNameText ); ?>"></span>
|
||||
</span>
|
||||
<?php } else { ?>
|
||||
<label for="modlgn-username">
|
||||
<?php if ( $showUsernameLabel == 3 ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleUsernameIcon fa fa-user" title="<?php echo htmlspecialchars( $userNameText ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showUsernameLabel, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo htmlspecialchars( $userNameText ); ?>
|
||||
<?php } ?>
|
||||
</label>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input id="modlgn-username" type="text" name="username" class="<?php echo ( $styleUsername ? htmlspecialchars( $styleUsername ) : 'inputbox' ); ?>" size="<?php echo $usernameInputLength; ?>"<?php echo ( in_array( $showUsernameLabel, array( 4, 5 ) ) ? ' placeholder="' . htmlspecialchars( $userNameText ) . '"' : null ); ?> />
|
||||
</p>
|
||||
<p id="form-login-password">
|
||||
<?php if ( in_array( $showPasswordLabel, array( 1, 2, 3, 5 ) ) ) { ?>
|
||||
<?php if ( in_array( $showPasswordLabel, array( 2, 5 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModulePasswordIcon fa fa-lock" title="<?php echo htmlspecialchars( CBTxt::T( 'Password' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } else { ?>
|
||||
<label for="modlgn-passwd">
|
||||
<?php if ( $showPasswordLabel == 3 ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModulePasswordIcon fa fa-lock" title="<?php echo htmlspecialchars( CBTxt::T( 'Password' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showPasswordLabel, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo htmlspecialchars( CBTxt::T( 'Password' ) ); ?>
|
||||
<?php } ?>
|
||||
</label>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input id="modlgn-passwd" type="password" name="passwd" class="<?php echo ( $stylePassword ? htmlspecialchars( $stylePassword ) : 'inputbox' ); ?>" size="<?php echo $passwordInputLength; ?>"<?php echo ( in_array( $showPasswordLabel, array( 4, 5 ) ) ? ' placeholder="' . htmlspecialchars( CBTxt::T( 'Password' ) ) . '"' : null ); ?> />
|
||||
</p>
|
||||
<?php if ( count( $twoFactorMethods ) > 1 ) { ?>
|
||||
<p id="form-login-secretkey">
|
||||
<?php if ( in_array( $showSecretKeyLabel, array( 1, 2, 3, 5 ) ) ) { ?>
|
||||
<?php if ( in_array( $showSecretKeyLabel, array( 2, 5 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleSecretKeyIcon fa fa-star" title="<?php echo htmlspecialchars( CBTxt::T( 'Secret Key' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } else { ?>
|
||||
<label for="modlgn-secretkey">
|
||||
<?php if ( $showSecretKeyLabel == 3 ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleSecretKeyIcon fa fa-star" title="<?php echo htmlspecialchars( CBTxt::T( 'Secret Key' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showSecretKeyLabel, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo htmlspecialchars( CBTxt::T( 'Secret Key' ) ); ?>
|
||||
<?php } ?>
|
||||
</label>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<input id="modlgn-secretkey" autocomplete="one-time-code" type="text" name="secretkey" tabindex="0" class="<?php echo ( $styleSecretKey ? htmlspecialchars( $styleSecretKey ) : 'inputbox' ); ?>" size="<?php echo $secretKeyInputLength; ?>"<?php echo ( in_array( $showSecretKeyLabel, array( 4, 5 ) ) ? ' placeholder="' . htmlspecialchars( CBTxt::T( 'Secret Key' ) ) . '"' : null ); ?> />
|
||||
</p>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showRememberMe, array( 1, 3 ) ) ) { ?>
|
||||
<p id="form-login-remember">
|
||||
<label for="modlgn-remember"><?php echo htmlspecialchars( CBTxt::T( 'Remember Me' ) ); ?></label>
|
||||
<input id="modlgn-remember" type="checkbox" name="remember" class="inputbox" value="yes"<?php echo ( $showRememberMe == 3 ? ' checked="checked"' : null ); ?> />
|
||||
</p>
|
||||
<?php } elseif ( $showRememberMe == 2 ) { ?>
|
||||
<input id="modlgn-remember" type="hidden" name="remember" class="inputbox" value="yes" />
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'beforeButton', 'p' ); ?>
|
||||
<button type="submit" name="Submit" class="<?php echo ( $styleLogin ? htmlspecialchars( $styleLogin ) : 'button' ); ?>"<?php echo $buttonStyle; ?>>
|
||||
<?php if ( in_array( $showButton, array( 1, 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleLoginIcon fa fa-sign-in" title="<?php echo htmlspecialchars( CBTxt::T( 'Log in' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showButton, array( 0, 1, 4 ) ) ) { ?>
|
||||
<?php echo htmlspecialchars( CBTxt::T( 'Log in' ) ); ?>
|
||||
<?php } ?>
|
||||
</button>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'afterButton', 'p' ); ?>
|
||||
</fieldset>
|
||||
<?php } else { ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'beforeButton', 'p' ); ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'afterButton', 'p' ); ?>
|
||||
<?php } ?>
|
||||
<?php if ( $showForgotLogin || $showRegister ) { ?>
|
||||
<ul id="form-login-links">
|
||||
<?php if ( $showForgotLogin ) { ?>
|
||||
<?php if ( ! Application::Config()->getBool( 'forgotlogin_type', true ) ) { ?>
|
||||
<li id="form-login-forgot-password">
|
||||
<a href="<?php echo cbSef( 'index.php?option=com_users&view=reset' ); ?>"<?php echo ( $styleForgotLogin ? ' class="' . htmlspecialchars( $styleForgotLogin ) . '"' : null ); ?>>
|
||||
<?php if ( in_array( $showForgotLogin, array( 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleForgotLoginIcon fa fa-unlock-alt" title="<?php echo htmlspecialchars( Text::_( 'MOD_LOGIN_FORGOT_YOUR_PASSWORD' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showForgotLogin, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo Text::_( 'MOD_LOGIN_FORGOT_YOUR_PASSWORD' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<li id="form-login-forgot-username">
|
||||
<a href="<?php echo cbSef( 'index.php?option=com_users&view=remind' ); ?>"<?php echo ( $styleForgotLogin ? ' class="' . htmlspecialchars( $styleForgotLogin ) . '"' : null ); ?>>
|
||||
<?php if ( in_array( $showForgotLogin, array( 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleForgotLoginIcon fa fa-unlock-alt" title="<?php echo htmlspecialchars( Text::_( 'MOD_LOGIN_FORGOT_YOUR_USERNAME' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showForgotLogin, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo Text::_( 'MOD_LOGIN_FORGOT_YOUR_USERNAME' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } else { ?>
|
||||
<li id="form-login-forgot">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'lostpassword', true, null, 'html', $secureForm ); ?>"<?php echo ( $styleForgotLogin ? ' class="' . htmlspecialchars( $styleForgotLogin ) . '"' : null ); ?>>
|
||||
<?php if ( in_array( $showForgotLogin, array( 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleForgotLoginIcon fa fa-unlock-alt" title="<?php echo htmlspecialchars( CBTxt::T( 'Forgot Login?' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showForgotLogin, array( 1, 3 ) ) ) { ?>
|
||||
<?php echo CBTxt::T( 'Forgot Login?' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<?php if ( $showRegister ) { ?>
|
||||
<li id="form-login-register">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'registers', true, null, 'html', $secureForm ); ?>"<?php echo ( $styleRegister ? ' class="' . htmlspecialchars( $styleRegister ) . '"' : null ); ?>>
|
||||
<?php if ( in_array( $params->get( 'show_newaccount', 1 ), array( 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleRegisterIcon fa fa-edit" title="<?php echo htmlspecialchars( CBTxt::T( 'UE_REGISTER', 'Sign up' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $params->get( 'show_newaccount', 1 ), array( 1, 3 ) ) ) { ?>
|
||||
<?php echo CBTxt::T( 'UE_REGISTER', 'Sign up' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'almostEnd' ); ?>
|
||||
<?php if ( $postLoginText ) { ?>
|
||||
<div class="posttext <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $postLoginText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'end' ); ?>
|
||||
</form>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'afterForm' ); ?>
|
||||
127
src/html/mod_cblogin/default_logout.php
Normal file
127
src/html/mod_cblogin/default_logout.php
Normal file
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
/**
|
||||
* Community Builder (TM)
|
||||
* @version $Id: $
|
||||
* @package CommunityBuilder
|
||||
* @copyright (C) 2004-2025 www.joomlapolis.com / Lightning MultiCom SA - and its licensors, all rights reserved
|
||||
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
|
||||
*/
|
||||
|
||||
use CBLib\Application\Application;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
|
||||
|
||||
HTMLHelper::_( 'behavior.keepalive' );
|
||||
|
||||
?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'beforeForm' ); ?>
|
||||
<form action="<?php echo $_CB_framework->viewUrl( 'logout', true, null, 'html', $secureForm ); ?>" method="post" id="login-form" class="cbLogoutForm">
|
||||
<input type="hidden" name="option" value="com_comprofiler" />
|
||||
<input type="hidden" name="view" value="logout" />
|
||||
<input type="hidden" name="op2" value="logout" />
|
||||
<input type="hidden" name="return" value="B:<?php echo $logoutReturnUrl; ?>" />
|
||||
<input type="hidden" name="message" value="<?php echo (int) $params->get( 'logout_message', 0 ); ?>" />
|
||||
<?php echo Application::Session()->getFormTokenInput(); ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'start' ); ?>
|
||||
<?php if ( $preLogoutText ) { ?>
|
||||
<div class="pretext <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $preLogoutText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'almostStart' ); ?>
|
||||
<?php if ( (int) $params->get( 'greeting', 1 ) ) { ?>
|
||||
<div class="login-greeting <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $greetingText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ( (int) $params->get( 'show_avatar', 1 ) ) { ?>
|
||||
<div class="login-avatar <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $cbUser->getField( 'avatar', null, 'html', 'none', 'list', 0, true ); ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'beforeButton', 'p' ); ?>
|
||||
<div class="logout-button">
|
||||
<button type="submit" name="Submit" class="<?php echo ( $styleLogout ? htmlspecialchars( $styleLogout ) : 'button' ); ?>"<?php echo $buttonStyle; ?>>
|
||||
<?php if ( in_array( $showButton, array( 1, 2, 3 ) ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleLogoutIcon fa fa-sign-out" title="<?php echo htmlspecialchars( CBTxt::T( 'Log out' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( in_array( $showButton, array( 0, 1, 4 ) ) ) { ?>
|
||||
<?php echo htmlspecialchars( CBTxt::T( 'Log out' ) ); ?>
|
||||
<?php } ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'afterButton', 'p' ); ?>
|
||||
<?php if ( $profileViewText || $profileEditText || $showPrivateMessages || $showConnectionRequests ) { ?>
|
||||
<p>
|
||||
<ul class="logout-links">
|
||||
<?php if ( $showPrivateMessages ) { ?>
|
||||
<li class="logout-private-messages">
|
||||
<a href="<?php echo $privateMessageURL; ?>"<?php echo ( $stylePrivateMsgs ? ' class="' . htmlspecialchars( $stylePrivateMsgs ) . '"' : null ); ?>>
|
||||
<?php if ( $params->get( 'show_pms_icon', 0 ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModulePMIcon fa fa-envelope" title="<?php echo htmlspecialchars( CBTxt::T( 'Private Messages' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( $newMessageCount ) { ?>
|
||||
<?php echo ( $newMessageCount == 1 ? CBTxt::T( 'YOU_HAVE_COUNT_NEW_PRIVATE_MESSAGE', 'You have [count] new private message.', array( '[count]' => $newMessageCount ) ) : CBTxt::T( 'YOU_HAVE_COUNT_NEW_PRIVATE_MESSAGES', 'You have [count] new private messages.', array( '[count]' => $newMessageCount ) ) ); ?>
|
||||
<?php } else { ?>
|
||||
<?php echo CBTxt::T( 'You have no new private messages.' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showConnectionRequests ) { ?>
|
||||
<li class="logout-connection-requests">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'manageconnections' ); ?>"<?php echo ( $styleConnRequests ? ' class="' . htmlspecialchars( $styleConnRequests ) . '"' : null ); ?>>
|
||||
<?php if ( $params->get( 'show_connection_notifications_icon', 0 ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleConnectionsIcon fa fa-users" title="<?php echo htmlspecialchars( CBTxt::T( 'Connections' ) ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ( $newConnectionRequests ) { ?>
|
||||
<?php echo ( $newConnectionRequests == 1 ? CBTxt::T( 'YOU_HAVE_COUNT_NEW_CONNECTION_REQUEST', 'You have [count] new connection request.', array( '[count]' => $newConnectionRequests ) ) : CBTxt::T( 'YOU_HAVE_COUNT_NEW_CONNECTION_REQUESTS', 'You have [count] new connection requests.', array( '[count]' => $newConnectionRequests ) ) ); ?>
|
||||
<?php } else { ?>
|
||||
<?php echo CBTxt::T( 'You have no new connection requests.' ); ?>
|
||||
<?php } ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $profileViewText ) { ?>
|
||||
<li class="logout-profile">
|
||||
<a href="<?php echo $_CB_framework->userProfileUrl(); ?>"<?php echo ( $styleProfile ? ' class="' . htmlspecialchars( $styleProfile ) . '"' : null ); ?>>
|
||||
<?php if ( $params->get( 'icon_show_profile', 0 ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleProfileViewIcon fa fa-user" title="<?php echo htmlspecialchars( $profileViewText ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php echo $profileViewText; ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $profileEditText ) { ?>
|
||||
<li class="logout-profile-edit">
|
||||
<a href="<?php echo $_CB_framework->userProfileEditUrl(); ?>"<?php echo ( $styleProfileEdit ? ' class="' . htmlspecialchars( $styleProfileEdit ) . '"' : null ); ?>>
|
||||
<?php if ( $params->get( 'icon_edit_profile', 0 ) ) { ?>
|
||||
<span class="<?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<span class="cbModuleProfileEditIcon fa fa-pencil" title="<?php echo htmlspecialchars( $profileEditText ); ?>"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php echo $profileEditText; ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</p>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'almostEnd' ); ?>
|
||||
<?php if ( $postLogoutText ) { ?>
|
||||
<div class="posttext <?php echo htmlspecialchars( $templateClass ); ?>">
|
||||
<p><?php echo $postLogoutText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'end' ); ?>
|
||||
</form>
|
||||
<?php echo modCBLoginHelper::getPlugins( $params, $type, 'afterForm' ); ?>
|
||||
1
src/html/mod_cblogin/index.html
Normal file
1
src/html/mod_cblogin/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
66
src/html/mod_comprofilermoderator/default.php
Normal file
66
src/html/mod_comprofilermoderator/default.php
Normal file
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* Community Builder (TM)
|
||||
* @version $Id: $
|
||||
* @package CommunityBuilder
|
||||
* @copyright (C) 2004-2025 www.joomlapolis.com / Lightning MultiCom SA - and its licensors, all rights reserved
|
||||
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
|
||||
*/
|
||||
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
|
||||
|
||||
?>
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'start' ); ?>
|
||||
<?php if ( $preText ) { ?>
|
||||
<div class="pretext">
|
||||
<p><?php echo $preText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'almostStart' ); ?>
|
||||
<?php if ( modCBModeratorHelper::getPlugins( $params, 'beforeLinks' ) || $showBanned || $showImageApproval || $showUserReports || $showUnbanRequests || $showUserApproval || $showPrivateMessages || $showConnectionRequests || modCBModeratorHelper::getPlugins( $params, 'afterLinks' ) ) { ?>
|
||||
<ul class="m-0 unstyled list-unstyled cbModeratorLinks">
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'beforeLinks', 'li' ); ?>
|
||||
<?php if ( $showBanned ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkBanned">
|
||||
<a href="<?php echo $_CB_framework->userProfileUrl(); ?>"><?php echo ( $bannedStatus == 1 ? CBTxt::T( 'Profile Banned' ) : CBTxt::T( 'Unban Request Pending' ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showImageApproval ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkImageApproval">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'moderateimages' ); ?>"><?php echo ( $imageApprovalCount == 1 ? CBTxt::T( 'COUNT_IMAGE_APPROVAL', '[count] Image Approval', array( '[count]' => $imageApprovalCount ) ) : CBTxt::T( 'COUNT_IMAGE_APPROVALS', '[count] Image Approvals', array( '[count]' => $imageApprovalCount ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showUserReports ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkUserReports">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'moderatereports' ); ?>"><?php echo ( $userReportsCount == 1 ? CBTxt::T( 'COUNT_PROFILE_REPORT', '[count] Profile Report', array( '[count]' => $userReportsCount ) ) : CBTxt::T( 'COUNT_PROFILE_REPORTS', '[count] Profile Reports', array( '[count]' => $userReportsCount ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showUnbanRequests ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkUnbanRequests">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'moderatebans' ); ?>"><?php echo ( $unbanRequestCount == 1 ? CBTxt::T( 'COUNT_UNBAN_REQUEST', '[count] Unban Request', array( '[count]' => $unbanRequestCount ) ) : CBTxt::T( 'COUNT_UNBAN_REQUESTS', '[count] Unban Requests', array( '[count]' => $unbanRequestCount ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showUserApproval ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkUserApproval">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'pendingapprovaluser' ); ?>"><?php echo ( $userApprovalCount == 1 ? CBTxt::T( 'COUNT_USER_APPROVAL', '[count] User Approval', array( '[count]' => $userApprovalCount ) ) : CBTxt::T( 'COUNT_USER_APPROVALS', '[count] User Approvals', array( '[count]' => $userApprovalCount ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showPrivateMessages ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkPrivateMessages">
|
||||
<a href="<?php echo $privateMessageURL; ?>"><?php echo ( $newMessageCount == 1 ? CBTxt::T( 'COUNT_PRIVATE_MESSAGE', '[count] Private Message', array( '[count]' => $newMessageCount ) ) : CBTxt::T( 'COUNT_PRIVATE_MESSAGES', '[count] Private Messages', array( '[count]' => $newMessageCount ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if ( $showConnectionRequests ) { ?>
|
||||
<li class="cbModeratorLink cbModeratorLinkConnectionRequests">
|
||||
<a href="<?php echo $_CB_framework->viewUrl( 'manageconnections' ); ?>"><?php echo ( $newConnectionRequests == 1 ? CBTxt::T( 'COUNT_CONNECTION_REQUEST', '[count] Connection Request', array( '[count]' => $newConnectionRequests ) ) : CBTxt::T( 'COUNT_CONNECTION_REQUESTS', '[count] Connection Requests', array( '[count]' => $newConnectionRequests ) ) ); ?></a>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'afterLinks', 'li' ); ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'almostEnd' ); ?>
|
||||
<?php if ( $postText ) { ?>
|
||||
<div class="posttext">
|
||||
<p><?php echo $postText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBModeratorHelper::getPlugins( $params, 'end' ); ?>
|
||||
1
src/html/mod_comprofilermoderator/index.html
Normal file
1
src/html/mod_comprofilermoderator/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
42
src/html/mod_comprofileronline/default.php
Normal file
42
src/html/mod_comprofileronline/default.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
/**
|
||||
* Community Builder (TM)
|
||||
* @version $Id: $
|
||||
* @package CommunityBuilder
|
||||
* @copyright (C) 2004-2025 www.joomlapolis.com / Lightning MultiCom SA - and its licensors, all rights reserved
|
||||
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version 2
|
||||
*/
|
||||
if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }
|
||||
|
||||
?>
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'start' ); ?>
|
||||
<?php if ( $preText ) { ?>
|
||||
<div class="pretext">
|
||||
<p><?php echo $preText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'beforeUsers' ); ?>
|
||||
<?php if ( modCBOnlineHelper::getPlugins( $params, 'beforeLinks' ) || $cbUsers || modCBOnlineHelper::getPlugins( $params, 'afterUsers' ) ) { ?>
|
||||
<ul class="m-0 unstyled list-unstyled cbOnlineUsers">
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'beforeLinks' ); ?>
|
||||
<?php foreach ( $cbUsers as $cbUser ) { ?>
|
||||
<li class="cbOnlineUser">
|
||||
<?php
|
||||
if ( $params->get( 'usertext' ) ) {
|
||||
echo $cbUser->replaceUserVars( $params->get( 'usertext' ) );
|
||||
} else {
|
||||
echo $cbUser->getField( 'formatname', null, 'html', 'none', 'list', 0, true );
|
||||
}
|
||||
?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'afterUsers' ); ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'almostEnd' ); ?>
|
||||
<?php if ( $postText ) { ?>
|
||||
<div class="posttext">
|
||||
<p><?php echo $postText; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php echo modCBOnlineHelper::getPlugins( $params, 'end' ); ?>
|
||||
1
src/html/mod_comprofileronline/index.html
Normal file
1
src/html/mod_comprofileronline/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
122
src/html/mod_dpcalendar_counter/default.php
Normal file
122
src/html/mod_dpcalendar_counter/default.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2014 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
if (!$events) {
|
||||
return;
|
||||
}
|
||||
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_YEARS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_MONTHS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_WEEKS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_DAYS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_HOURS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_MINUTES');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_SECONDS');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_YEAR');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_MONTH');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_WEEK');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_DAY');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_HOUR');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_MINUTE');
|
||||
$translator->translateJS('MOD_DPCALENDAR_COUNTER_LABEL_SECOND');
|
||||
$translator->translateJS('COM_DPCALENDAR_CLOSE');
|
||||
|
||||
$document->loadStyleFile('default.css', 'mod_dpcalendar_counter');
|
||||
$document->loadScriptFile('default.js', 'mod_dpcalendar_counter');
|
||||
$document->addStyle($params->get('custom_css', ''));
|
||||
?>
|
||||
<div class="mod-dpcalendar-counter mod-dpcalendar-counter-<?php echo $module->id; ?>">
|
||||
<div class="mod-dpcalendar-counter__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textbefore', ''))); ?>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-counter__events">
|
||||
<?php foreach ($events as $event) { ?>
|
||||
<div class="mod-dpcalendar-counter__event"
|
||||
data-date="<?php echo $dateHelper->getDate($event->start_date, $event->all_day)->format('Y-m-d H:i:s'); ?>"
|
||||
data-modal="<?php echo $params->get('show_as_popup'); ?>"
|
||||
data-counting="<?php echo !$params->get('disable_counting'); ?>">
|
||||
<div class="mod-dpcalendar-counter__upcoming">
|
||||
<div class="mod-dpcalendar-counter__intro-text">
|
||||
<?php echo $translator->translate('MOD_DPCALENDAR_COUNTER_SOON_OUTPUT'); ?>
|
||||
</div>
|
||||
<?php if ($params->get('show_field_year', 1)) { ?>
|
||||
<span class="mod-dpcalendar-counter__year dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_field_month', 1)) { ?>
|
||||
<span class="mod-dpcalendar-counter__month dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_field_week', 1)) { ?>
|
||||
<span class="mod-dpcalendar-counter__week dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_field_day', 1)) { ?>
|
||||
<span class="mod-dpcalendar-counter__day dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_field_hour', 1)) { ?>
|
||||
<span class="mod-dpcalendar-counter__hour dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<span class="mod-dpcalendar-counter__minute dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
<span class="mod-dpcalendar-counter__second dp-counter-block">
|
||||
<span class="dp-counter-block__number"></span>
|
||||
<span class="dp-counter-block__content"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-counter__ongoing">
|
||||
<div class="mod-dpcalendar-counter__intro-text">
|
||||
<?php echo $translator->translate('MOD_DPCALENDAR_COUNTER_ONGOING_OUTPUT'); ?>
|
||||
</div>
|
||||
<a href="<?php echo $router->getEventRoute($event->id, $event->catid); ?>" class="mod-dpcalendar-counter__link dp-link">
|
||||
<?php echo $event->title; ?>
|
||||
</a>
|
||||
<?php if ($event->images->image_intro) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-counter__image">
|
||||
<figure class="dp-figure">
|
||||
<a href="<?php echo $router->getEventRoute($event->id, $event->catid); ?>" class="mod-dpcalendar-counter__link dp-link">
|
||||
<img class="dp-image" src="<?php echo $event->images->image_intro; ?>"
|
||||
alt="<?php echo $event->images->image_intro_alt; ?>"
|
||||
loading="lazy" <?php echo $event->images->image_intro_dimensions; ?>>
|
||||
</a>
|
||||
<?php if ($event->images->image_intro_caption) { ?>
|
||||
<figcaption class="dp-figure__caption"><?php echo $event->images->image_intro_caption; ?></figcaption>
|
||||
<?php } ?>
|
||||
</figure>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ($event->truncatedDescription) { ?>
|
||||
<div class="mod-dpcalendar-counter__description">
|
||||
<?php echo $event->truncatedDescription; ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-counter__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textafter', ''))); ?>
|
||||
</div>
|
||||
</div>
|
||||
1
src/html/mod_dpcalendar_counter/index.html
Normal file
1
src/html/mod_dpcalendar_counter/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
37
src/html/mod_dpcalendar_map/default.php
Normal file
37
src/html/mod_dpcalendar_map/default.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2014 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
$document->loadStyleFile('default.css', 'mod_dpcalendar_map');
|
||||
$document->loadScriptFile('views/map/default.js');
|
||||
$document->addStyle($params->get('custom_css', ''));
|
||||
|
||||
$layoutHelper->renderLayout('block.map', $displayData);
|
||||
|
||||
$translator->translateJS('COM_DPCALENDAR_FIELD_CONFIG_EVENT_LABEL_NO_EVENT_TEXT');
|
||||
?>
|
||||
<div class="mod-dpcalendar-map mod-dpcalendar-map-<?php echo $module->id; ?> dp-search-map"
|
||||
data-popup="<?php echo $params->get('show_as_popup'); ?>">
|
||||
<div class="mod-dpcalendar-map__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textbefore', ''))); ?>
|
||||
</div>
|
||||
<?php echo $layoutHelper->renderLayout('block.loader', $displayData); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.filter', $displayData); ?>
|
||||
<div class="mod-dpcalendar-map__map dp-map"
|
||||
style="width: <?php echo $params->get('width', '100%'); ?>; height: <?php echo $params->get('height', '300px'); ?>"
|
||||
data-zoom="<?php echo $params->get('zoom', 4); ?>"
|
||||
data-latitude="<?php echo $params->get('lat', 47); ?>"
|
||||
data-longitude="<?php echo $params->get('long', 4); ?>"
|
||||
data-ask-consent="<?php echo $params->get('map_ask_consent'); ?>">
|
||||
</div>
|
||||
<div class="mod-dpcalendar-map__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textafter', ''))); ?>
|
||||
</div>
|
||||
</div>
|
||||
1
src/html/mod_dpcalendar_map/index.html
Normal file
1
src/html/mod_dpcalendar_map/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
204
src/html/mod_dpcalendar_mini/_scripts.php
Normal file
204
src/html/mod_dpcalendar_mini/_scripts.php
Normal file
@@ -0,0 +1,204 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2018 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\Helper\DPCalendarHelper;
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\Router\Router;;
|
||||
use Joomla\Utilities\ArrayHelper;
|
||||
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_ALL_DAY');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_MONTH');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_WEEK');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_DAY');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_LIST');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_UNTIL');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_PAST');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_TODAY');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_TOMORROW');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_THIS_WEEK');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_NEXT_WEEK');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_THIS_MONTH');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_NEXT_MONTH');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_FUTURE');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_WEEK');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_VIEW_TEXTS_MORE');
|
||||
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_TOOLBAR_NEXT');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_TOOLBAR_PREVIOUS');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_TOOLBAR_TODAY');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_SHOW_DATEPICKER');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_TOOLBAR_PRINT');
|
||||
$translator->translateJS('COM_DPCALENDAR_VIEW_CALENDAR_TOOLBAR_ADD');
|
||||
|
||||
$translator->translateJS('JCANCEL');
|
||||
$translator->translateJS('COM_DPCALENDAR_CLOSE');
|
||||
$translator->translateJS('COM_DPCALENDAR_PREVIOUS');
|
||||
$translator->translateJS('COM_DPCALENDAR_NEXT');
|
||||
$translator->translateJS('COM_DPCALENDAR_FIELD_CAPACITY_UNLIMITED');
|
||||
|
||||
$document->addScriptOptions('calendar.names', $dateHelper->getNames());
|
||||
$document->addScriptOptions('timezone', $dateHelper->getDate()->getTimezone()->getName());
|
||||
$document->addScriptOptions('itemid', $app->getInput()->getInt('Itemid', 0));
|
||||
|
||||
// The options which will be passed to the js library
|
||||
$options = [];
|
||||
$options['requestUrlRoot'] = 'view=events&limit=0&format=raw&module_id=' . $module->id . '&Itemid=' . $app->getInput()->getInt('Itemid', 0);
|
||||
$options['calendarIds'] = [implode(',', $ids)];
|
||||
|
||||
// Set the default view
|
||||
$options['initialView'] = $params->get('default_view', 'month');
|
||||
|
||||
// Some general calendar options
|
||||
$options['weekNumbers'] = (bool)$params->get('week_numbers');
|
||||
$options['weekends'] = (bool)$params->get('weekend', 1);
|
||||
$options['fixedWeekCount'] = (bool)$params->get('fixed_week_count', 1);
|
||||
|
||||
$bd = $params->get('business_hours_days', []);
|
||||
if ($bd && !(is_countable($bd) ? count($bd) : 0 === 1 && !$bd[0])) {
|
||||
$options['businessHours'] = [
|
||||
'startTime' => $params->get('business_hours_start', ''),
|
||||
'endTime' => $params->get('business_hours_end', ''),
|
||||
'daysOfWeek' => $params->get('business_hours_days', [])
|
||||
];
|
||||
}
|
||||
|
||||
$options['firstDay'] = (int)$params->get('weekstart', 1);
|
||||
$options['hiddenDays'] = ArrayHelper::toInteger($params->get('hidden_days', []));
|
||||
$options['scrollTime'] = $params->get('first_hour', 6) === 'now' ? 'now' : $params->get('first_hour', 6) . ':00:00';
|
||||
$options['weekNumberCalculation'] = 'ISO';
|
||||
$options['displayEventEnd'] = true;
|
||||
$options['navLinks'] = true;
|
||||
|
||||
$max = $params->get('max_time', 24);
|
||||
if (is_numeric($max)) {
|
||||
$max .= ':00:00';
|
||||
}
|
||||
$options['slotMaxTime'] = $max;
|
||||
|
||||
$min = $params->get('min_time', 0);
|
||||
if (is_numeric($min)) {
|
||||
$min .= ':00:00';
|
||||
}
|
||||
$options['slotMinTime'] = $min;
|
||||
|
||||
$options['nowIndicator'] = (bool)$params->get('current_time_indicator', 1);
|
||||
$options['displayEventTime'] = $params->get('compact_events', 2) != 2;
|
||||
|
||||
if ($params->get('event_limit', '') != '-1') {
|
||||
$options['dayMaxEventRows'] = $params->get('event_limit', '') == '' ? 2 : $params->get('event_limit', '') + 1;
|
||||
}
|
||||
|
||||
// Set the height
|
||||
if ($params->get('calendar_height', 0) > 0) {
|
||||
$options['contentHeight'] = (int)$params->get('calendar_height', 0);
|
||||
} else {
|
||||
$options['height'] = 'auto';
|
||||
}
|
||||
|
||||
$options['slotEventOverlap'] = (bool)$params->get('overlap_events', 1);
|
||||
|
||||
// Set up the header
|
||||
$options['headerToolbar'] = ['left' => [], 'center' => [], 'right' => []];
|
||||
if ($params->get('header_show_navigation', 1)) {
|
||||
$options['headerToolbar']['left'][] = 'prev';
|
||||
$options['headerToolbar']['left'][] = 'next';
|
||||
}
|
||||
if ($params->get('header_show_today', 0)) {
|
||||
$options['headerToolbar']['left'][] = 'today';
|
||||
}
|
||||
if ($params->get('header_show_datepicker', 0)) {
|
||||
$options['headerToolbar']['left'][] = 'datepicker';
|
||||
}
|
||||
if ($params->get('header_show_create', 1) && DPCalendarHelper::canCreateEvent()) {
|
||||
$options['headerToolbar']['left'][] = 'add';
|
||||
}
|
||||
if ($params->get('header_show_title', 1)) {
|
||||
$options['headerToolbar']['center'][] = 'title';
|
||||
}
|
||||
if ($params->get('header_show_month', 1)) {
|
||||
$options['headerToolbar']['right'][] = 'month';
|
||||
}
|
||||
if ($params->get('header_show_week', 1)) {
|
||||
$options['headerToolbar']['right'][] = 'week';
|
||||
}
|
||||
if ($params->get('header_show_day', 1)) {
|
||||
$options['headerToolbar']['right'][] = 'day';
|
||||
} else {
|
||||
$options['navLinks'] = false;
|
||||
}
|
||||
if ($params->get('header_show_list', 1)) {
|
||||
$options['headerToolbar']['right'][] = 'list';
|
||||
}
|
||||
|
||||
$options['headerToolbar']['left'] = implode(',', $options['headerToolbar']['left']);
|
||||
$options['headerToolbar']['center'] = implode(',', $options['headerToolbar']['center']);
|
||||
$options['headerToolbar']['right'] = implode(',', $options['headerToolbar']['right']);
|
||||
|
||||
$resourceViews = $params->get('calendar_resource_views');
|
||||
if (!DPCalendarHelper::isFree() && $resourceViews && $resources) {
|
||||
$options['resources'] = $resources;
|
||||
$options['resourceViews'] = $resourceViews;
|
||||
$options['datesAboveResources'] = true;
|
||||
}
|
||||
|
||||
// Set up the views
|
||||
$options['views'] = [];
|
||||
$options['views']['month'] = [
|
||||
'titleFormat' => $dateHelper->convertPHPDateToJS($params->get('titleformat_month', 'F Y')),
|
||||
'eventTimeFormat' => $dateHelper->convertPHPDateToJS($params->get('timeformat_month', 'H:i')),
|
||||
'dayHeaderFormat' => $dateHelper->convertPHPDateToJS($params->get('columnformat_month', 'D'))
|
||||
];
|
||||
$options['views']['week'] = [
|
||||
'titleFormat' => $dateHelper->convertPHPDateToJS($params->get('titleformat_week', 'M j Y')),
|
||||
'eventTimeFormat' => $dateHelper->convertPHPDateToJS($params->get('timeformat_week', 'H:i')),
|
||||
'dayHeaderFormat' => $dateHelper->convertPHPDateToJS($params->get('columnformat_week', 'D n/j')),
|
||||
'slotDuration' => $dateHelper->minutesToDuration((int)$params->get('agenda_slot_minutes', 30)),
|
||||
'slotLabelInterval' => $dateHelper->minutesToDuration((int)$params->get('agenda_slot_minutes', 30)),
|
||||
'slotLabelFormat' => $dateHelper->convertPHPDateToJS($params->get('axisformat_week', 'H:i'))
|
||||
];
|
||||
$options['views']['day'] = [
|
||||
'titleFormat' => $dateHelper->convertPHPDateToJS($params->get('titleformat_day', 'F j Y')),
|
||||
'eventTimeFormat' => $dateHelper->convertPHPDateToJS($params->get('timeformat_day', 'H:i')),
|
||||
'dayHeaderFormat' => $dateHelper->convertPHPDateToJS($params->get('columnformat_day', 'l')),
|
||||
'slotDuration' => $dateHelper->minutesToDuration((int)$params->get('agenda_slot_minutes', 30)),
|
||||
'slotLabelInterval' => $dateHelper->minutesToDuration((int)$params->get('agenda_slot_minutes', 30)),
|
||||
'slotLabelFormat' => $dateHelper->convertPHPDateToJS($params->get('axisformat_day', 'H:i'))
|
||||
];
|
||||
$options['views']['list'] = [
|
||||
'titleFormat' => $dateHelper->convertPHPDateToJS($params->get('titleformat_list', 'M j Y')),
|
||||
'eventTimeFormat' => $dateHelper->convertPHPDateToJS($params->get('timeformat_list', 'H:i')),
|
||||
'dayHeaderFormat' => $dateHelper->convertPHPDateToJS($params->get('columnformat_list', 'D')),
|
||||
'listDayFormat' => $dateHelper->convertPHPDateToJS($params->get('dayformat_list', 'l')),
|
||||
'listDaySideFormat' => $dateHelper->convertPHPDateToJS($params->get('dateformat_list', 'F j, Y')),
|
||||
'duration' => ['days' => (int)$params->get('list_range', 30)],
|
||||
'noEventsContent' => $translator->translate('COM_DPCALENDAR_ERROR_EVENT_NOT_FOUND', true)
|
||||
];
|
||||
|
||||
// Some DPCalendar specific options
|
||||
$options['show_event_as_popup'] = $params->get('show_event_as_popup');
|
||||
$options['popupWidth'] = $params->get('popup_width');
|
||||
$options['popupHeight'] = $params->get('popup_height');
|
||||
$options['show_event_tooltip'] = $params->get('show_event_tooltip', 1);
|
||||
$options['show_map'] = $params->get('show_map', 1);
|
||||
$options['event_create_form'] = (int)$params->get('event_create_form', 1);
|
||||
$options['screen_size_list_view'] = $params->get('screen_size_list_view', 500);
|
||||
$options['use_hash'] = false;
|
||||
if (DPCalendarHelper::canCreateEvent()) {
|
||||
$router = new Router();
|
||||
$input = $app->getInput();
|
||||
$returnPage = $input->getInt('Itemid', 0) ? 'index.php?Itemid=' . $input->getInt('Itemid', 0) : null;
|
||||
$options['event_create_url'] = $router->getEventFormRoute('0', $returnPage, null, false);
|
||||
}
|
||||
|
||||
// Set the actual date
|
||||
$now = DPCalendarHelper::getDate($params->get('start_date'));
|
||||
$options['year'] = $now->format('Y', true);
|
||||
$options['month'] = $now->format('m', true);
|
||||
$options['date'] = $now->format('d', true);
|
||||
|
||||
$document->addScriptOptions('module.mini.' . $module->id . '.options', $options);
|
||||
50
src/html/mod_dpcalendar_mini/default.php
Normal file
50
src/html/mod_dpcalendar_mini/default.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2014 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use Joomla\CMS\Helper\ModuleHelper;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
if ($params->get('show_map', 1)) {
|
||||
$layoutHelper->renderLayout('block.map', $displayData);
|
||||
}
|
||||
|
||||
$document->loadScriptFile('views/calendar/default.js');
|
||||
$document->loadScriptFile('views/calendar/default.js');
|
||||
$document->loadStyleFile('default.css', 'mod_dpcalendar_mini');
|
||||
$document->addStyle($params->get('custom_css', ''));
|
||||
|
||||
require ModuleHelper::getLayoutPath('mod_dpcalendar_mini', '_scripts');
|
||||
|
||||
$compact = $params->get('compact_events', 2) == 1 ? 'compact' : 'expanded';
|
||||
?>
|
||||
<div class="mod-dpcalendar-mini mod-dpcalendar-mini_<?php echo $compact; ?> mod-dpcalendar-mini-<?php echo $module->id; ?>">
|
||||
<div class="mod-dpcalendar-mini__loader">
|
||||
<?php echo $layoutHelper->renderLayout('block.loader', $displayData); ?>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-mini__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textbefore', ''))); ?>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-mini__calendar dp-calendar"
|
||||
data-options="DPCalendar.module.mini.<?php echo $module->id; ?>.options"></div>
|
||||
<?php require ModuleHelper::getLayoutPath('mod_dpcalendar_mini', 'default_map'); ?>
|
||||
<?php require ModuleHelper::getLayoutPath('mod_dpcalendar_mini', 'default_quickadd'); ?>
|
||||
<?php require ModuleHelper::getLayoutPath('mod_dpcalendar_mini', 'default_icons'); ?>
|
||||
<div class="dp-filter">
|
||||
<form class="dp-form">
|
||||
<?php foreach ($ids as $id) { ?>
|
||||
<input type="hidden" name="filter[calendars][]" value="<?php echo $id; ?>">
|
||||
<?php } ?>
|
||||
<input type="hidden" name="list[start-date]">
|
||||
<input type="hidden" name="list[end-date]">
|
||||
</form>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-mini__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textafter', ''))); ?>
|
||||
</div>
|
||||
</div>
|
||||
22
src/html/mod_dpcalendar_mini/default_icons.php
Normal file
22
src/html/mod_dpcalendar_mini/default_icons.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2020 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\HTML\Block\Icon;
|
||||
?>
|
||||
<div class="mod-dpcalendar-mini__icons">
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::DELETE]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::EDIT]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::PLUS]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::PRINTING]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::CALENDAR]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::NEXT]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::BACK]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::USERS]); ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::MONEY]); ?>
|
||||
</div>
|
||||
20
src/html/mod_dpcalendar_mini/default_map.php
Normal file
20
src/html/mod_dpcalendar_mini/default_map.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2019 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
if (!$params->get('show_map', 0)) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<div class="mod-dpcalendar-mini__map dp-map"
|
||||
style="width: <?php echo $params->get('map_width', '100%'); ?>; height: <?php echo $params->get('map_height', '350px'); ?>"
|
||||
data-zoom="<?php echo $params->get('map_zoom', 4); ?>"
|
||||
data-latitude="<?php echo $params->get('map_lat', 47); ?>"
|
||||
data-longitude="<?php echo $params->get('map_long', 4); ?>"
|
||||
data-ask-consent="<?php echo $params->get('map_ask_consent'); ?>">
|
||||
</div>
|
||||
47
src/html/mod_dpcalendar_mini/default_quickadd.php
Normal file
47
src/html/mod_dpcalendar_mini/default_quickadd.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2023 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\Helper\DPCalendarHelper;
|
||||
use Joomla\CMS\Uri\Uri;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
if (!DPCalendarHelper::canCreateEvent()) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
<div class="mod-dpcalendar-mini__quickadd dp-quickadd">
|
||||
<form action="<?php echo $router->getEventFormRoute(0, Uri::getInstance()->toString()); ?>" method="post" class="dp-form form-validate">
|
||||
<?php echo $quickaddForm->renderField('start_date'); ?>
|
||||
<?php echo $quickaddForm->renderField('end_date'); ?>
|
||||
<?php echo $quickaddForm->renderField('title'); ?>
|
||||
<?php echo $quickaddForm->renderField('catid'); ?>
|
||||
<?php echo $quickaddForm->renderField('color'); ?>
|
||||
<input type="hidden" name="task" class="dp-input dp-input-hidden">
|
||||
<input type="hidden" name="urlhash" class="dp-input dp-input-hidden">
|
||||
<input type="hidden" name="jform[capacity]" value="0" class="dp-input dp-input-hidden">
|
||||
<?php if ($params->get('event_create_form', 1) == '1' || $params->get('event_create_form', 1) == '3') { ?>
|
||||
<input type="hidden" name="jform[all_day]" value="0" class="dp-input dp-input-hidden">
|
||||
<?php } ?>
|
||||
<input type="hidden" name="layout" value="edit" class="dp-input dp-input-hidden">
|
||||
<input type="hidden" name="jform[location_ids][]" class="dp-input dp-input-hidden">
|
||||
<input type="hidden" name="jform[rooms][]" class="dp-input dp-input-hidden">
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
<div class="dp-quickadd__buttons">
|
||||
<button type="button" class="dp-button dp-quickadd__button-submit">
|
||||
<?php echo $translator->translate('JSAVE'); ?>
|
||||
</button>
|
||||
<button type="button" class="dp-button dp-quickadd__button-edit">
|
||||
<?php echo $translator->translate('JACTION_EDIT'); ?>
|
||||
</button>
|
||||
<button type="button" class="dp-button dp-quickadd__button-cancel">
|
||||
<?php echo $translator->translate('JCANCEL'); ?>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
1
src/html/mod_dpcalendar_mini/index.html
Normal file
1
src/html/mod_dpcalendar_mini/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
22
src/html/mod_dpcalendar_upcoming/_scripts.php
Normal file
22
src/html/mod_dpcalendar_upcoming/_scripts.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2018 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
// Load the required modal JS libraries
|
||||
if ($params->get('show_as_popup') || $params->get('show_map')) {
|
||||
$document->loadScriptFile('default.js', 'mod_dpcalendar_upcoming');
|
||||
$translator->translateJS('COM_DPCALENDAR_CLOSE');
|
||||
}
|
||||
|
||||
if ($params->get('show_map')) {
|
||||
$layoutHelper->renderLayout('block.map', $displayData);
|
||||
}
|
||||
|
||||
// Load the stylesheet
|
||||
$document->loadStyleFile(str_replace('_:', '', (string)$params->get('layout', 'default')) . '.css', 'mod_dpcalendar_upcoming');
|
||||
$document->addStyle($params->get('custom_css', ''));
|
||||
172
src/html/mod_dpcalendar_upcoming/default.php
Normal file
172
src/html/mod_dpcalendar_upcoming/default.php
Normal file
@@ -0,0 +1,172 @@
|
||||
<?php
|
||||
/**
|
||||
* @package DPCalendar
|
||||
* @copyright Copyright (C) 2014 Digital Peak GmbH. <https://www.digital-peak.com>
|
||||
* @license https://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
|
||||
*/
|
||||
|
||||
\defined('_JEXEC') or die();
|
||||
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\Helper\Booking;
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\Helper\DPCalendarHelper;
|
||||
use DigitalPeak\Component\DPCalendar\Administrator\HTML\Block\Icon;
|
||||
use Joomla\CMS\Helper\ModuleHelper;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
if (!$events) {
|
||||
echo $translator->translate($params->get('no_events_text', 'MOD_DPCALENDAR_UPCOMING_NO_EVENT_TEXT'));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
require ModuleHelper::getLayoutPath('mod_dpcalendar_upcoming', '_scripts');
|
||||
?>
|
||||
<div class="mod-dpcalendar-upcoming mod-dpcalendar-upcoming-default mod-dpcalendar-upcoming-<?php echo $module->id; ?> dp-locations"
|
||||
data-popup="<?php echo $params->get('show_as_popup', 0); ?>">
|
||||
<div class="mod-dpcalendar-upcoming-default__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textbefore', ''))); ?>
|
||||
</div>
|
||||
<div class="mod-dpcalendar-upcoming-default__events">
|
||||
<?php foreach ($groupedEvents as $groupHeading => $events) { ?>
|
||||
<?php if ($groupHeading) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__group">
|
||||
<p class="mod-dpcalendar-upcoming-default__heading dp-group-heading"><?php echo $groupHeading; ?></p>
|
||||
<?php } ?>
|
||||
<?php foreach ($events as $event) { ?>
|
||||
<?php $displayData['event'] = $event; ?>
|
||||
<?php $startDate = $dateHelper->getDate($event->start_date, $event->all_day); ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__event dp-event dp-event_<?php echo $event->ongoing_start_date ? ($event->ongoing_end_date ? 'started' : 'finished') : 'future'; ?>">
|
||||
<?php echo $layoutHelper->renderLayout('block.flatcalendar', ['date' => $startDate, 'color' => $event->color]); ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__information">
|
||||
<?php if ($event->state == 3) { ?>
|
||||
<span class="dp-event_canceled">[<?php echo $translator->translate('MOD_DPCALENDAR_UPCOMING_CANCELED'); ?>]</span>
|
||||
<?php } ?>
|
||||
<a href="<?php echo $event->realUrl; ?>" class="dp-event-url dp-link"><?php echo $event->title; ?></a>
|
||||
<?php if ($params->get('show_display_events') && $event->displayEvent->afterDisplayTitle) { ?>
|
||||
<div class="dp-event-display-after-title"><?php echo $event->displayEvent->afterDisplayTitle; ?></div>
|
||||
<?php } ?>
|
||||
<?php if (($params->get('show_location') || $params->get('show_map')) && isset($event->locations) && $event->locations) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__location">
|
||||
<?php if ($params->get('show_location')) { ?>
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::LOCATION]); ?>
|
||||
<?php } ?>
|
||||
<?php foreach ($event->locations as $location) { ?>
|
||||
<div class="dp-location<?php echo $params->get('show_location') ? '' : ' dp-location_hidden'; ?>">
|
||||
<div class="dp-location__details"
|
||||
data-latitude="<?php echo $location->latitude; ?>"
|
||||
data-longitude="<?php echo $location->longitude; ?>"
|
||||
data-title="<?php echo $location->title; ?>"
|
||||
data-color="<?php echo $event->color; ?>"></div>
|
||||
<?php if ($params->get('show_location')) { ?>
|
||||
<a href="<?php echo $router->getLocationRoute($location); ?>" class="dp-location__url dp-link">
|
||||
<span class="dp-location__title"><?php echo $location->title; ?></span>
|
||||
<?php if (!empty($event->roomTitles[$location->id])) { ?>
|
||||
<span class="dp-location__rooms">[<?php echo implode(', ', $event->roomTitles[$location->id]); ?>]</span>
|
||||
<?php } ?>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<div class="dp-location__description">
|
||||
<?php echo $layoutHelper->renderLayout('event.tooltip', $displayData); ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__date">
|
||||
<?php echo $layoutHelper->renderLayout(
|
||||
'block.icon',
|
||||
['icon' => Icon::CLOCK, 'title' => $translator->translate('MOD_DPCALENDAR_UPCOMING_DATE')]
|
||||
); ?>
|
||||
<?php echo $dateHelper->getDateStringFromEvent($event, $params->get('date_format'), $params->get('time_format')); ?>
|
||||
</div>
|
||||
<?php if ($event->rrule) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__rrule">
|
||||
<?php echo $layoutHelper->renderLayout(
|
||||
'block.icon',
|
||||
['icon' => Icon::RECURRING, 'title' => $translator->translate('MOD_DPCALENDAR_UPCOMING_SERIES')]
|
||||
); ?>
|
||||
<?php echo nl2br((string) $dateHelper->transformRRuleToString($event->rrule, $event->start_date, $event->exdates)); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_price') && $event->prices) { ?>
|
||||
<?php foreach ($event->prices as $price) { ?>
|
||||
<?php $discounted = Booking::getPriceWithDiscount($price->value, $event); ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__price dp-event-price">
|
||||
<?php echo $layoutHelper->renderLayout(
|
||||
'block.icon',
|
||||
[
|
||||
'icon' => Icon::MONEY,
|
||||
'title' => $translator->translate('MOD_DPCALENDAR_UPCOMING_PRICES')
|
||||
]
|
||||
); ?>
|
||||
<span class="dp-event-price__label">
|
||||
<?php echo $price->label ?: $translator->translate('MOD_DPCALENDAR_UPCOMING_PRICES'); ?>
|
||||
</span>
|
||||
<span class="dp-event-price__regular<?php echo $discounted != $price->value ? ' dp-event-price__regular_has-discount' : ''; ?>">
|
||||
<?php echo $price->value === '' ? '' : DPCalendarHelper::renderPrice($price->value); ?>
|
||||
</span>
|
||||
<?php if ($discounted != $price->value) { ?>
|
||||
<span class="dp-event-price__discount"><?php echo DPCalendarHelper::renderPrice($discounted); ?></span>
|
||||
<?php } ?>
|
||||
<span class="dp-event-price__description">
|
||||
<?php echo $price->description; ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php if ($params->get('show_image', 1) && $event->images->image_intro) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__image">
|
||||
<figure class="dp-figure">
|
||||
<a href="<?php echo $event->realUrl; ?>" class="dp-event-url dp-link">
|
||||
<img class="dp-image" src="<?php echo $event->images->image_intro; ?>"
|
||||
aria-label="<?php echo $event->images->image_intro_alt; ?>"
|
||||
alt="<?php echo $event->images->image_intro_alt; ?>"
|
||||
loading="lazy" <?php echo $event->images->image_intro_dimensions; ?>>
|
||||
</a>
|
||||
<?php if ($event->images->image_intro_caption) { ?>
|
||||
<figcaption class="dp-figure__caption"><?php echo $event->images->image_intro_caption; ?></figcaption>
|
||||
<?php } ?>
|
||||
</figure>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_booking', 1) && Booking::openForBooking($event)) { ?>
|
||||
<a href="<?php echo $router->getBookingFormRouteFromEvent($event, $return, true, $moduleParams->get('default_menu_item', 0)); ?>"
|
||||
class="dp-link dp-link_cta">
|
||||
<?php echo $layoutHelper->renderLayout('block.icon', ['icon' => Icon::BOOK]); ?>
|
||||
<span class="dp-link__text">
|
||||
<?php echo $translator->translate('MOD_DPCALENDAR_UPCOMING_BOOK'); ?>
|
||||
</span>
|
||||
</a>
|
||||
<?php } ?>
|
||||
<?php if ($params->get('show_display_events') && $event->displayEvent->beforeDisplayContent) { ?>
|
||||
<div class="dp-event-display-before-content"><?php echo $event->displayEvent->beforeDisplayContent; ?></div>
|
||||
<?php } ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__description">
|
||||
<?php echo $event->truncatedDescription; ?>
|
||||
</div>
|
||||
<?php if ($params->get('show_display_events') && $event->displayEvent->afterDisplayContent) { ?>
|
||||
<div class="dp-event-display-after-content"><?php echo $event->displayEvent->afterDisplayContent; ?></div>
|
||||
<?php } ?>
|
||||
<?php $displayData['event'] = $event; ?>
|
||||
<?php echo $layoutHelper->renderLayout('schema.event', $displayData); ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php if ($groupHeading) { ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php if ($params->get('show_map')) { ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__map dp-map"
|
||||
style="width: <?php echo $params->get('map_width', '100%'); ?>; height: <?php echo $params->get('map_height', '350px'); ?>"
|
||||
data-zoom="<?php echo $params->get('map_zoom', 4); ?>"
|
||||
data-latitude="<?php echo $params->get('map_lat', 47); ?>"
|
||||
data-longitude="<?php echo $params->get('map_long', 4); ?>"
|
||||
data-ask-consent="<?php echo $params->get('map_ask_consent'); ?>">
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="mod-dpcalendar-upcoming-default__custom-text">
|
||||
<?php echo HTMLHelper::_('content.prepare', $translator->translate($params->get('textafter', ''))); ?>
|
||||
</div>
|
||||
</div>
|
||||
1
src/html/mod_dpcalendar_upcoming/index.html
Normal file
1
src/html/mod_dpcalendar_upcoming/index.html
Normal file
@@ -0,0 +1 @@
|
||||
<!DOCTYPE html><title></title>
|
||||
@@ -28,4 +28,4 @@ TPL_MOKOONYX_POSITION_TOP_B="Top-b"
|
||||
TPL_MOKOONYX_POSITION_TOPBAR="Top Bar"
|
||||
TPL_MOKOONYX_POSITION_DRAWER_LEFT="Drawer-Left"
|
||||
TPL_MOKOONYX_POSITION_DRAWER_RIGHT="Drawer-Right"
|
||||
TPL_MOKOONYX_XML_DESCRIPTION="<h3>MokoOnyx Template Description</h3> <p> <strong>MokoOnyx</strong> continues Joomla’s tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokoonyx/templates/light.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/light.custom.css</code>, or <code>templates/mokoonyx/templates/dark.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoOnyx → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS & JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokoonyx/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokoonyx/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href=\"https://www.joomla.org\" target=\"_blank\" rel=\"noopener\">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href=\"https://afeld.github.io/bootstrap-toc/\" target=\"_blank\" rel=\"noopener\">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>"
|
||||
TPL_MOKOONYX_XML_DESCRIPTION="<p><img src=\"https://img.shields.io/gitea/v/release/MokoConsulting/MokoOnyx?gitea_url=https%3A%2F%2Fgit.mokoconsulting.tech&logo=gitea&logoColor=white&label=version\" alt=\"Version\" /> <img src=\"https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white\" alt=\"License\" /> <img src=\"https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white\" alt=\"Joomla\" /> <img src=\"https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white\" alt=\"PHP\" /></p> <h3>MokoOnyx Template Description</h3> <p> <strong>MokoOnyx</strong> continues Joomla’s tradition of space-themed default templates— building on the legacy of <em>Solarflare</em> (Joomla 1.0), <em>Milkyway</em> (Joomla 1.5), and <em>Protostar</em> (Joomla 3.0). </p> <p> This template is a customized fork of the <strong>Cassiopeia</strong> template introduced in Joomla 4, preserving its modern, accessible, and mobile-first foundation while introducing new stylistic enhancements and structural refinements specifically tailored for use by Moko Consulting. </p> <h4>Custom Colour Themes</h4> <p> Starter palette files are included with the template. To create a custom colour scheme, copy <code>templates/mokoonyx/templates/light.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/light.custom.css</code>, or <code>templates/mokoonyx/templates/dark.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/dark.custom.css</code>. Customise the CSS variables to match your brand, then activate your palette in <em>System → Site Templates → MokoOnyx → Theme tab</em> by selecting "Custom" for the Light or Dark Mode Palette. A full variable reference is available in the <em>CSS Variables</em> tab in template options. </p> <h4>Custom CSS & JavaScript</h4> <p> For site-specific styles and scripts that should survive template updates, create the following files: </p> <ul> <li><code>media/templates/site/mokoonyx/css/user.css</code> — loaded on every page for custom CSS overrides.</li> <li><code>media/templates/site/mokoonyx/js/user.js</code> — loaded on every page for custom JavaScript.</li> </ul> <p> These files are gitignored and will not be overwritten by template updates. </p> <h4>Code Attribution</h4> <p> This template is based on the original <strong>Cassiopeia</strong> template developed by the <a href=\"https://www.joomla.org\" target=\"_blank\" rel=\"noopener\">Joomla! Project</a> and released under the GNU General Public License. </p> <p> Modifications and enhancements have been made by Moko Consulting in accordance with open-source licensing standards. </p> <p> It includes integration with <a href=\"https://afeld.github.io/bootstrap-toc/\" target=\"_blank\" rel=\"noopener\">Bootstrap TOC</a>, an open-source table of contents generator by A. Feld, licensed under the MIT License. </p> <p> All third-party libraries and assets remain the property of their respective authors and are credited within their source files where applicable. </p>"
|
||||
|
||||
@@ -39,13 +39,13 @@
|
||||
</server>
|
||||
</updateservers>
|
||||
<name>MokoOnyx</name>
|
||||
<version>01.00.07</version>
|
||||
<version>01.00.10</version>
|
||||
<scriptfile>script.php</scriptfile>
|
||||
<creationDate>2026-04-15</creationDate>
|
||||
<author>Jonathan Miller || Moko Consulting</author>
|
||||
<authorEmail>hello@mokoconsulting.tech</authorEmail>
|
||||
<copyright>(C)GNU General Public License Version 3 - 2026 Moko Consulting</copyright>
|
||||
<description><![CDATA[<div style="padding:1rem;border:2px solid #059669;border-radius:8px;background:#ecfdf5;margin-bottom:1rem;"> <h3 style="color:#065f46;margin:0 0 .5rem;">Migrating from MokoCassiopeia?</h3> <p style="margin:0 0 .75rem;">MokoOnyx automatically imports your MokoCassiopeia settings on first use. To trigger the migration:</p> <ol style="margin:0 0 .75rem 1.5rem;"> <li>Install MokoOnyx via <strong>System → Install → Extensions</strong></li> <li>Go to <strong>System → Site Templates</strong> and set <strong>MokoOnyx</strong> as your default template</li> <li><strong>Visit any page on your site</strong> — the migration runs automatically on first page load</li> <li>Check <strong>administrator/logs/mokoonyx_migrate.log.php</strong> to confirm migration completed</li> <li>Uninstall MokoCassiopeia from <strong>Extensions → Manage</strong></li> </ol> <p style="margin:0;font-size:.9em;color:#065f46;"> <strong>What gets migrated:</strong> template style params, custom colour palettes (light.custom.css, dark.custom.css), user.css, user.js, and update server URL. To re-run the migration, delete <code>templates/mokoonyx/.migrated</code> and reload any page. </p></div> <p><img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white" alt="PHP" /></p> <h3>MokoOnyx</h3> <p> <strong>MokoOnyx</strong> (formerly MokoCassiopeia) is a modern, lightweight enhancement layer built on Joomla's Cassiopeia template. It adds Font Awesome 7, Bootstrap 5 helpers, automatic Table of Contents, advanced Dark Mode theming, and optional Google Tag Manager / GA4 integration — all with minimal core overrides for maximum upgrade compatibility. </p> <h4>Custom Colour Themes</h4> <p> Copy <code>templates/mokoonyx/templates/light.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/light.custom.css</code> (or dark equivalent), customise the CSS variables, then select "Custom" in the Theme tab. </p> <h4>Custom CSS & JavaScript</h4> <ul> <li><code>media/templates/site/mokoonyx/css/user.css</code> — custom CSS overrides</li> <li><code>media/templates/site/mokoonyx/js/user.js</code> — custom JavaScript</li> </ul> <p>These files survive template updates.</p>]]></description>
|
||||
<description><![CDATA[<div style="padding:1rem;border:2px solid #059669;border-radius:8px;background:#ecfdf5;margin-bottom:1rem;"> <h3 style="color:#065f46;margin:0 0 .5rem;">Migrating from MokoCassiopeia?</h3> <p style="margin:0 0 .75rem;">MokoOnyx automatically imports your MokoCassiopeia settings on first use. To trigger the migration:</p> <ol style="margin:0 0 .75rem 1.5rem;"> <li>Install MokoOnyx via <strong>System → Install → Extensions</strong></li> <li>Go to <strong>System → Site Templates</strong> and set <strong>MokoOnyx</strong> as your default template</li> <li><strong>Visit any page on your site</strong> — the migration runs automatically on first page load</li> <li>Check <strong>administrator/logs/mokoonyx_migrate.log.php</strong> to confirm migration completed</li> <li>Uninstall MokoCassiopeia from <strong>Extensions → Manage</strong></li> </ol> <p style="margin:0;font-size:.9em;color:#065f46;"> <strong>What gets migrated:</strong> template style params, custom colour palettes (light.custom.css, dark.custom.css), user.css, user.js, and update server URL. To re-run the migration, delete <code>templates/mokoonyx/.migrated</code> and reload any page. </p></div> <p><img src="https://img.shields.io/gitea/v/release/MokoConsulting/MokoOnyx?gitea_url=https%3A%2F%2Fgit.mokoconsulting.tech&logo=gitea&logoColor=white&label=version" alt="Version" /> <img src="https://img.shields.io/badge/license-GPL--3.0--or--later-green.svg?logo=gnu&logoColor=white" alt="License" /> <img src="https://img.shields.io/badge/Joomla-5.x%20%7C%206.x-red.svg?logo=joomla&logoColor=white" alt="Joomla" /> <img src="https://img.shields.io/badge/PHP-8.1%2B-777BB4.svg?logo=php&logoColor=white" alt="PHP" /></p> <h3>MokoOnyx</h3> <p> <strong>MokoOnyx</strong> (formerly MokoCassiopeia) is a modern, lightweight enhancement layer built on Joomla's Cassiopeia template. It adds Font Awesome 7, Bootstrap 5 helpers, automatic Table of Contents, advanced Dark Mode theming, and optional Google Tag Manager / GA4 integration — all with minimal core overrides for maximum upgrade compatibility. </p> <h4>Custom Colour Themes</h4> <p> Copy <code>templates/mokoonyx/templates/light.custom.css</code> to <code>media/templates/site/mokoonyx/css/theme/light.custom.css</code> (or dark equivalent), customise the CSS variables, then select "Custom" in the Theme tab. </p> <h4>Custom CSS & JavaScript</h4> <ul> <li><code>media/templates/site/mokoonyx/css/user.css</code> — custom CSS overrides</li> <li><code>media/templates/site/mokoonyx/js/user.js</code> — custom JavaScript</li> </ul> <p>These files survive template updates.</p>]]></description>
|
||||
<inheritable>1</inheritable>
|
||||
<files>
|
||||
<filename>component.php</filename>
|
||||
|
||||
16
updates.xml
16
updates.xml
@@ -13,13 +13,13 @@
|
||||
<element>mokoonyx</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>01.00.06</version>
|
||||
<version>01.00.10</version>
|
||||
<creationDate>2026-04-21</creationDate>
|
||||
<infourl title='MokoOnyx Dev'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/tag/development</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/download/development/mokoonyx-01.00.06-dev.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/download/development/mokoonyx-01.00.10-dev.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>db041f2dedd84d1119b860ddd27fd613ab0c86ff7303a154b321926d2f369d11</sha256>
|
||||
<sha256>827a964d5147f5748f6b5e455434c4ed3accf18fa55f1b4a44ed2fd5ad23c173</sha256>
|
||||
<tags><tag>development</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
@@ -98,14 +98,14 @@
|
||||
<element>mokoonyx</element>
|
||||
<type>template</type>
|
||||
<client>site</client>
|
||||
<version>01.00.00</version>
|
||||
<creationDate>2026-04-19</creationDate>
|
||||
<version>01.00.07</version>
|
||||
<creationDate>2026-04-21</creationDate>
|
||||
<infourl title='MokoOnyx'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/tag/v01</infourl>
|
||||
<downloads>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/download/v01/mokoonyx-01.00.00.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoOnyx/releases/download/v01/mokoonyx-01.00.00.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx/releases/download/v01/mokoonyx-01.00.07.zip</downloadurl>
|
||||
<downloadurl type='full' format='zip'>https://github.com/mokoconsulting-tech/MokoOnyx/releases/download/v01/mokoonyx-01.00.07.zip</downloadurl>
|
||||
</downloads>
|
||||
<sha256>954c26f29af533c58658ed312b4b6261cc9e783dcf0cd9d879d34df6e8a421f4</sha256>
|
||||
<sha256>0afed942713e2573ab947ecadc8538d12e948f86f84654df3872d787b9cb5c41</sha256>
|
||||
<tags><tag>stable</tag></tags>
|
||||
<maintainer>Moko Consulting</maintainer>
|
||||
<maintainerurl>https://mokoconsulting.tech</maintainerurl>
|
||||
|
||||
Reference in New Issue
Block a user