Скрыть отдельные разделы формы RSFormPro, когда предел подачи достигнут - PullRequest
0 голосов
/ 16 февраля 2019

Я использую RsForm Pro на Joomla CMS, и там я создал форму.В моей форме у меня есть 5 разделов с флажком.Я хочу отображать отдельные разделы до определенного предела (скажем, максимум 20 пользователей), после того, как предел представления достигнут, раздел формы необходимо отключить.

Я обнаружил ограничение на отправку формы, но если 20 пользователей отправляют только один раздел в форме (не для флажка), остальные 4 не могут быть доступны для других пользователей.Другими словами, я не хочу отключать все разделы, если все разделы не достигли там ограничения.

Это код для формы отправки лимита:

// Define the maximum number of submissions. For this example we'll use 25.
$max = 25;

// Get a database connection.
$db = JFactory::getDbo();

// Setup the query. This query counts the number of submissions for the current form.
// $formId contains the ID of the current form.
$db->setQuery("SELECT COUNT(`SubmissionId`) FROM #__rsform_submissions WHERE `FormId`='".(int) $formId."'");
$submissions = $db->loadResult();

if ($submissions >= $max) {
    $formLayout = 'Sorry, we have no more spaces on this time. Please wait next registration. Thank you!.';
}

РЕДАКТИРОВАНИЕ РЕШЕНО:

$limit25 = 25;
$limit21 = 21;
$limit20 = 20;

$db = JFactory::getDbo();

$db->setQuery("SELECT COUNT(`FieldName`) FROM `nqm2i_rsform_submission_values` WHERE `nqm2i_rsform_submission_values`.`FieldName` = 'Bus_Blockchain_March 11th'");

$first_submission_value = $db->loadResult();

if ($first_submission_value >= $limit25) {
    echo '<style>.rsform-block-bus-blockchain-march-11th { display:none;}</style>';
}

$db->setQuery("SELECT COUNT(`FieldName`) FROM `nqm2i_rsform_submission_values` WHERE `nqm2i_rsform_submission_values`.`FieldName` = 'Bus_Blockchain_March 13'");

$secont_submission_value = $db->loadResult();

if ($second_submission_value >= $limit25) {
    echo '<style>.rsform-block-bus-blockchain-march-13 { display:none;}</style>';
}

$db->setQuery("SELECT COUNT(`FieldName`) FROM `nqm2i_rsform_submission_values` WHERE `nqm2i_rsform_submission_values`.`FieldName` = 'Bus_Blockchain_March 18'");

$third_submission_value = $db->loadResult();

if ($third_submission_value >= $limit25) {
    echo '<style>.rsform-block-bus-blockchain-march-18 { display:none;}</style>';
}

$db->setQuery("SELECT COUNT(`FieldName`) FROM `nqm2i_rsform_submission_values` WHERE `nqm2i_rsform_submission_values`.`FieldName` = 'evening_QA'");

$fourth_submission_value = $db->loadResult();

if ($fourth_submission_value >= $limit20) {
    echo '<style>.rsform-block-evening-qa {  display:none;}</style>';
}

$db->setQuery("SELECT COUNT(`FieldName`) FROM `nqm2i_rsform_submission_values` WHERE `nqm2i_rsform_submission_values`.`FieldName` = 'evening_QA_2'");

$fifth_submission_value = $db->loadResult();

if ($fifth_submission_value >= $limit21) {
    echo '<style>.rsform-block-evening-qa-2 { display:none;}</style>';
}

if(
    $first_submission_value >= $limit25
    && $secont_submission_value >= $limit25
    && $third_submission_value >= $limit25
    && $fourth_submission_value >= $limit20
    && $fifth_submission_value >= $limit21
) {
    $formLayout = 'Sorry, we have no more spaces on this time. Please wait next registration. Thank you!';
}

1 Ответ

0 голосов
/ 17 февраля 2019

Я вижу, что вы отредактировали свой вопрос, чтобы раскрыть свое решение.Вместо того, чтобы просить вас опубликовать свое решение в качестве ответа (что вы должны были сделать), я сделаю вам лучше - я потратил время на рефакторинг вашего кода, реализацию методов построения запросов Joomla, повышение его эффективности., чище, проще и проще в управлении.

Самое главное, потому что все взаимодействия с базой данных могут выполняться с помощью одного запроса, они должны быть.

Поскольку имена ваших полей легко связанык вашим именам классов, «массив поиска» или «массив отображения» позволит моему фрагменту надежно динамически доставлять желаемые результаты.Вам никогда не потребуется настраивать больше, чем $formId и $field_maxes.

Код: (проверено локально с моей собственной таблицей rsform pro)

$formId = 3;  // or whatever the correct formId value is
$field_maxes = [
    'Bus_Blockchain_March 11th' => 25,
    'Bus_Blockchain_March 13' => 25,
    'Bus_Blockchain_March 18' => 25,
    'evening_QA' => 20,
    'evening_QA_2' => 21
];

$classes_to_hide = [];                    // initiate as empty array
$formLayout = '';                         // initiate as empty string

$db = JFactory::getDbo();

$quoted_fields = implode(',', $db->q(array_keys($field_maxes)));  // create quoted comma-separated values

$query = $db->getQuery(true)
    ->select("FieldName, COUNT(1) AS " . $db->qn("Count"))
    ->from("#__rsform_submission_values")
    ->where([
        "FormId = " . (int) $formId,
        "FieldName IN ($quoted_fields)"
    ])
    ->group("FieldName")
    ->order("FIELD ($quoted_fields)");

// if you wish to see the rendered query, uncomment the next line (do not show to public)
// JFactory::getApplication()->enqueueMessage("<div>" . $query->dump() . "</div>", "notice");

try                                           // listen for syntax errors
{
    $db->setQuery($query);
    if (!$results = $db->loadAssocList())     // declare and check for empty result set
    {
        echo "No Results in Form";
    }
    else
    {
        foreach ($results as $row)            // iterate rows
        {
            if ($row['Count'] >= $field_maxes[$row['FieldName']]) {  // if fieldname has reached limit
                $classes_to_hide[] = ".rsform-" . str_replace(['_', ' '], '-', $row['FieldName']);
            }
        }

        if ($tally = sizeof($classes_to_hide))  // declare and check if not empty
        {
            echo "<style>" , implode(", ", $classes_to_hide) , " {display:none;}</style>";  // apply css styling to one or more designated classes
            if ($tally == sizeof($field_maxes))  // if all fieldnames are full
            {
                $formLayout = 'Sorry, we have no more spaces on this time. Please wait next registration. Thank you!';
            }
        }
    }
}
catch (Exception $e)
{
    JFactory::getApplication()->enqueueMessage("Query Syntax Error", "error");
    // if you have a syntax error and wish to see the message, uncomment the next line (do not show to public)
    //JFactory::getApplication()->enqueueMessage($e->getMessage(), "error");

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...