Новости Joomla

Вышли релизы безопасности Joomla 6.1.3 и Joomla 5.4.8

Релиз безопасности Joomla 6.1.3 и Joomla 5.4.8

Проект Joomla! рад сообщить о выходе Joomla 6.1.3 и Joomla 5.4.8. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

👩‍💻 WT Otpravkapochtaru - библиотека сервиса Отправка Почты России для Joomla-разработчиков.

Joomla 5+ пакет для интеграции с API Почты России: нормализация данных, расчёт доставки, создание отправлений, партии, документы, возвраты, поиск отделений, справочники и SOAP-отслеживание.

v.3.0.0. Что нового?
Это дальнейшее развитие ранее закрытой Joomla-библиотеки для работы с API сервиса Отправка (для бизнеса) Почты России. Поэтому версия не 1.0.0, а 3.0.0.

Сейчас эта библиотека ушла от собственных реализаций и стала Joomla-обёрткой известного PHP SDK от Lapay Group.

Возможности библиотеки.
- получение настроек аккаунта, точек сдачи и текущего остатка запросов к API;
- нормализация адресов, ФИО и телефонов перед созданием отправления;
- расчёт тарифа и срока доставки;
- создание, поиск, изменение, удаление и возврат заказов в состояние «Новые»;
- проверка надёжности получателя;
- создание партий, просмотр партий и заказов внутри партии;
- генерация пакета печатных документов и формы Ф103;
- создание, изменение и удаление возвратных отправлений;
- поиск отделений по индексу, адресу и координатам, получение сервисов отделения;
- локальный список стран;
- SOAP-отслеживание операций по РПО и работа с билетами пакетного трекинга.

👩‍💻 Joomla-возможности.
В пакете библиотеки WT Otpravkapochtaru есть поля Joomla Form для расширений. Они позволяют работать в интерфейсе Joomla с некоторыми типами данных, получаемых по API из вашего личного кабинета в ЛК Почты России для бизнеса.
На данный момент в библиотеке доступны 3 поля списков, которые отображают доступные в аккаунте ОПС, типы и категории отправлений.
Поддерживаются зависимые списки: значение одного поля обновляется при изменении другого.

Системные требования.
Системные требования в основном связаны с системными требованиями апстрима библиотеки - LapayGroup PHP SDK.
- Joomla 5+
- PHP 8.3+
- Расширения PHP:
-- ext-mbstring
-- ext-simplexml
-- ext-soap (опционально, для трекинга)
-- ext-zip

Ссылки:
- Страница расширения
- GitHub библиотеки и документация

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 1 Ответов
  • 588 Просмотров
*

Alesso

  • Новичок
  • 1
  • 0 / 0
Имеется код компонента тестирования. Но есть один существенный недостаток. Нельзя завершить тестирование, пока не закончится время тестирования(дается 45 минут). После того как оно закончится, выводится результат теста. Хочу данное действие выполнять по кнопке "Закончить тест", чтобы человек мог в любое время этот тест закончить и получить результаты. Не могу понять какая функция здесь завершает этот тест. Подскажите как мне это реализовать. Прилагаю код.

Код

<form method="post" action="<?php echo JURI::root(true); ?>/index.php<?php if ($itemId): ?>?Itemid=<?php echo $itemId; ?><?php endif; ?>" name="formQue_<?php echo $questionVersionId; ?>" id="formQue_<?php echo $questionVersionId; ?>" style="margin: 5px 5px 5px 5px;">

<h4><?php AriQuizWebHelper::displayDbValue($quizInfo->QuizName); ?></h4>

<div style="text-align: center; width: 100%">
<input type="text" size="<?php echo $questionTime != null ? strlen($questionTime) : '1'; ?>" readonly="readonly" style="display: none;" <?php if ($questionTime != null) { ?>class="ariQuizTime<?php if ($questionTime < 31) echo ' ariQuizTimeEnd'; ?>"<?php } ?> id="tbxAriQuizTime_<?php echo $questionVersionId; ?>" value="<?php echo $questionTime != null ? $questionTime : ''; ?>" />
</div>
<?php
if ($hasSplitter) echo ' / ';
?>
<input type="text" size="<?php echo $totalTime != null ? strlen($totalTime) : '1'; ?>" readonly="readonly" style="display: none;" <?php if ($totalTime != null) { ?>class="ariQuizTime<?php if ($totalTime < 31) echo ' ariQuizTimeEnd'; ?>"<?php } ?> id="tbxAriQuizTotalTime_<?php echo $questionVersionId; ?>" value="<?php echo $totalTime != null ? $totalTime : ''; ?>" />
<?php printf(AriQuizWebHelper::getResValue('Label.QuestionInfo'), $statistics->QuestionIndex + 1, $quizInfo->QuestionCount); ?>
<div class="ariQuizProgressWrap" title="<?php echo $completedCount . ' / ' . $quizInfo->QuestionCount; ?>">
<div class="ariQuizProgress" style="width: <?php echo $progressPercent; ?>%;"><?php echo JHTML::image('components/' . $option . '/images/x.gif', '', array('border' => 0, 'width' => 1, 'height' => 7)); ?></div>
</div>


<div class="ariWrap">
<div class="ariQuizQuestionRight"><?php AriQuizWebHelper::displayDbValue($questionVersion->Question, false); ?></div>

<?php
$path = AriQuizFrontHelper::getQuestionTemplatePath($questionVersion);
if (!empty($path)) require_once($path);
?>
<!-- Question end -->
<input type="submit" class="btn btn-primary" value="Далее" name="ariEvent[save]" disabledAfterSubmit="true" onclick="return aris.validators.alertSummaryValidators.validate();" />
<?php
if ($quizInfo->CanSkip)
{
?>
<input type="submit" class="button" value="<?php AriQuizWebHelper::displayResValue('Label.Skip'); ?>" name="ariEvent[skip]" disabledAfterSubmit="true" />
<input type="submit" class="button" value="Закончить тест" disabledAfterSubmit="true" name="ariEvent[close]">
<?php
}
?>
</div>

<?php if ($tmpl): ?>
<input type="hidden" name="tmpl" value="<?php echo $tmpl; ?>" />
<?php endif; ?>
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="task" id="task" value="question" />
<input type="hidden" name="ticketId" value="<?php echo $ticketId; ?>" />
<input type="hidden" name="qid" value="<?php echo $questionVersion->QuestionId; ?>" />
<input type="hidden" name="timeOver" id="timeOver" value="false" />
</form>
<script type="text/javascript">
var frm = document.forms['formQue_<?php echo $questionVersionId; ?>'];
frm.onsubmit = function()
{
var frm = document.forms['formQue_<?php echo $questionVersionId; ?>'];
var elements = aris.DOM.getChildElementsByAttribute(frm, 'disabledAfterSubmit');
if (elements)
{
for (var i = 0; i < elements.length; i++)
{
var el = elements[i];
if (typeof(el.disabled)!= 'undefined')
{
var cloneEl = el.cloneNode(true);
cloneEl.disabled = true;
el.parentNode.insertBefore(cloneEl, el);
el.style.display = 'none';
}
}
}
}
</script>
<?php
if ($questionTime != null || $totalTime != null)
{
?>
<script type="text/javascript">
var ariQuestionTime = <?php echo is_null($questionTime)? 'null' : $questionTime; ?>;
var ariTotalTime = <?php echo is_null($totalTime)? 'null' : $totalTime; ?>;
var ariStartDate = (new Date()).getTime();

var timeUpdateTimer = YAHOO.util.Lang.later(
999,
null,
function()
{
var curDate = (new Date()).getTime();
var subSeconds = Math.round((curDate - ariStartDate) / 1000);
if (ariQuestionTime != null) ariQuestionTime -= subSeconds;
if (ariTotalTime != null) ariTotalTime -= subSeconds;
ariStartDate = curDate;
if ((ariQuestionTime != null && ariQuestionTime <= 0) ||
(ariTotalTime != null && ariTotalTime <= 0))
{
ariQuestionTime = 0;
ariTotalTime = 0;
timeUpdateTimer.cancel();
var frm = document.forms['formQue_<?php echo $questionVersionId; ?>'];
if (frm)
{
var timeOver = YAHOO.util.Dom.get('timeOver');
if (timeOver) timeOver.value = 'true';
frm.submit();
return ;
}
}

if (ariQuestionTime != null)
{
var tbxAriQuizTime = YAHOO.util.Dom.get('tbxAriQuizTime_<?php echo $questionVersionId; ?>');
if (ariQuestionTime < 31) YAHOO.util.Dom.addClass(tbxAriQuizTime, 'ariQuizTimeEnd');
tbxAriQuizTime.value = ariQuestionTime;
}

if (ariTotalTime != null)
{
var tbxAriQuizTotalTime = YAHOO.util.Dom.get('tbxAriQuizTotalTime_<?php echo $questionVersionId; ?>');
if (ariTotalTime < 31) YAHOO.util.Dom.addClass(tbxAriQuizTotalTime, 'ariQuizTimeEnd');
tbxAriQuizTotalTime.value = ariTotalTime;
}
},
null, true);
</script>
<?php
}
?>
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
То, что вы привели- всего лишь код вывода формы. В функционале участвуют еще другие файлы.
Там, правда, есть какие-то кусочки JS-кода с намеком на связь между значениями времени теста и событием submit, но опять же - это только кусочки, которые не дают понять полную картину.
Не будь паразитом, сделай что-нибудь самостоятельно!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ограниченные функции Администратора

Автор espam

Ответов: 0
Просмотров: 855
Последний ответ 05.06.2023, 22:25:24
от espam
С определением функции регистрации

Автор sesil

Ответов: 0
Просмотров: 995
Последний ответ 09.08.2021, 11:40:04
от sesil
Вызов определенной функции модели ajax

Автор Dram

Ответов: 16
Просмотров: 1292
Последний ответ 26.11.2020, 17:01:55
от Dram
Вызов процедуры (функции) из статьи

Автор igorigor76

Ответов: 4
Просмотров: 1091
Последний ответ 13.04.2017, 22:06:47
от ChaosHead
SQL изменение поля и получения результата

Автор avantyrist

Ответов: 12
Просмотров: 1339
Последний ответ 12.03.2017, 00:59:02
от avantyrist