Took 43 minutes
This commit is contained in:
Tobias Hopp 2020-10-04 15:31:53 +02:00
parent ab03d3a263
commit 354cbe468b
5 changed files with 58 additions and 21 deletions

24
.idea/workspace.xml generated
View File

@ -21,6 +21,9 @@
<component name="ChangeListManager">
<list default="true" id="fc13552d-b118-4828-b78f-fc8714e0cfdc" name="Default Changelist" comment="Final COMMIT!!!">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/controller/FaqController.class.inc.php" beforeDir="false" afterPath="$PROJECT_DIR$/controller/FaqController.class.inc.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/model/FaqModel.class.inc.php" beforeDir="false" afterPath="$PROJECT_DIR$/model/FaqModel.class.inc.php" afterDir="false" />
<change beforePath="$PROJECT_DIR$/templates/faq.tmpl.html" beforeDir="false" afterPath="$PROJECT_DIR$/templates/faq.tmpl.html" afterDir="false" />
<change beforePath="$PROJECT_DIR$/vendor/js/faq.js" beforeDir="false" afterPath="$PROJECT_DIR$/vendor/js/faq.js" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
@ -32,7 +35,7 @@
<execution />
</component>
<component name="DarkyenusTimeTracker">
<option name="totalTimeSeconds" value="73933" />
<option name="totalTimeSeconds" value="76591" />
<option name="gitIntegration" value="true" />
<option name="naggedAbout" value="1" />
</component>
@ -77,7 +80,8 @@
<option name="presentableId" value="Default" />
<updated>1601618466935</updated>
<workItem from="1601618467981" duration="36776000" />
<workItem from="1601809534320" duration="1018000" />
<workItem from="1601809534320" duration="1558000" />
<workItem from="1601811106543" duration="2864000" />
</task>
<task id="LOCAL-00001" summary="Initial commit">
<created>1601618764031</created>
@ -170,7 +174,14 @@
<option name="project" value="LOCAL" />
<updated>1601810048772</updated>
</task>
<option name="localTasksCounter" value="14" />
<task id="LOCAL-00014" summary="Done issue #5 and #3">
<created>1601810664354</created>
<option name="number" value="00014" />
<option name="presentableId" value="LOCAL-00014" />
<option name="project" value="LOCAL" />
<updated>1601810664354</updated>
</task>
<option name="localTasksCounter" value="15" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@ -200,7 +211,8 @@
<MESSAGE value="&#10;Updating database-conf" />
<MESSAGE value="Final COMMIT!!!" />
<MESSAGE value="Fix issue #1" />
<option name="LAST_COMMIT_MESSAGE" value="Fix issue #1" />
<MESSAGE value="Done issue #5 and #3" />
<option name="LAST_COMMIT_MESSAGE" value="Done issue #5 and #3" />
</component>
<component name="WindowStateProjectService">
<state x="728" y="326" width="800" height="683" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1601632929047">
@ -239,10 +251,10 @@
<screen x="0" y="34" width="1920" height="1046" />
</state>
<state x="441" y="192" width="1037" height="736" key="SettingsEditor/0.34.1920.1046@0.34.1920.1046" timestamp="1601632853044" />
<state x="555" y="292" width="800" height="535" key="Vcs.Push.Dialog.v2" timestamp="1601810051854">
<state x="555" y="292" width="800" height="535" key="Vcs.Push.Dialog.v2" timestamp="1601810665321">
<screen x="0" y="34" width="1920" height="1046" />
</state>
<state x="555" y="292" width="800" height="535" key="Vcs.Push.Dialog.v2/0.34.1920.1046@0.34.1920.1046" timestamp="1601810051854" />
<state x="555" y="292" width="800" height="535" key="Vcs.Push.Dialog.v2/0.34.1920.1046@0.34.1920.1046" timestamp="1601810665321" />
<state x="809" y="122" width="639" height="876" key="com.intellij.database.view.ui.AbstractDbRefactoringDialog" timestamp="1601632983240">
<screen x="0" y="34" width="1920" height="1046" />
</state>

View File

@ -62,8 +62,9 @@ class FaqController extends DefaultController
$FAQModel = new FaqModel();
$room = $FAQModel->getRoom();
$question = Api::getVar( 'question' );
$nickname = APi::getVar( 'nickname' );
if( empty( $question ) || strlen( $question ) > 500 || strlen( $question ) < 10 )
if( empty( $question ) || empty( $nickname) || strlen( $question ) > 500 || strlen( $question ) < 10 || strlen( $nickname) < 3 || strlen( $nickname ) > 20 )
{
$view->setSuccess( false );
$view->setHeaderCode( 903 );
@ -71,7 +72,7 @@ class FaqController extends DefaultController
}
try {
$FAQModel->addQuestion( $room['id'], $question );
$FAQModel->addQuestion( $room['id'], $question, $nickname );
} catch( Exception $e )
{
$view->setSuccess( false );

View File

@ -75,10 +75,15 @@ class FaqModel
return $result['id'];
}
public function addQuestion(int $room_id, string $question)
/**
* @param int $room_id
* @param string $question
* @param string $nickname
*/
public function addQuestion(int $room_id, string $question, string $nickname )
{
$stmnt = Database::getConnection()->prepare( 'INSERT INTO questions ( room_id, question, created_by ) VALUES ( :room_id, :question, :created_by )' );
$stmnt->execute( array( 'room_id' => $room_id, 'question' => htmlspecialchars( $question ), 'created_by' => 'Anonymous' ) );
$stmnt->execute( array( 'room_id' => $room_id, 'question' => htmlspecialchars( $question ), 'created_by' => $nickname ) );
}

View File

@ -68,11 +68,11 @@
<div class="modal-body">
<span class="text-danger" id="askErrorMsg"></span>
<div class="form-group">
<label for="name" class="col-form-label">Name</label><br>
<input type="text" class="form-control" maxlength="15" id="name">
<label for="nickname" class="col-form-label">Name</label><br>
<input type="text" class="form-control" maxlength="20" minlength="3" id="nickname">
<br>
<label for="question" class="col-form-label">Question</label>
<textarea name="question" class="form-control" id="question" maxlength="500" rows="4"></textarea>
<textarea name="question" class="form-control" id="question" minlength="10" maxlength="500" rows="4"></textarea>
</div>
</div>
<div class="modal-footer">
@ -96,7 +96,7 @@
<span class="text-danger" id="answerErrorMsg"></span>
<div class="form-group">
<label for="answer" class="col-form-label">Answer</label>
<textarea name="answer" class="form-control" id="answer" maxlength="500" rows="4"></textarea>
<textarea name="answer" class="form-control" id="answer" minlength="5" maxlength="1000" rows="4"></textarea>
</div>
</div>
<div class="modal-footer">

33
vendor/js/faq.js vendored
View File

@ -13,6 +13,7 @@ answerErrorMsg = $('#answerErrorMsg' );
questions = $( '#questions' )
question = $('#question' );
askButton = $('#askBtn' );
nickname = $('#nickname' );
function request( a_uri, a_data, a_successhandler, a_errorhandler )
{
@ -56,6 +57,19 @@ function askQuestion()
askButton.prop( 'disabled', false );
return;
}
if ( !nickname.val() )
{
askErrorMsg.html( 'Please enter a name first!' );
askButton.prop( 'disabled', false );
return;
}
if( nickname.val().length > 20 || nickname.val().length < 3 )
{
askErrorMsg.html( 'The name should be 3-20 characters long.' );
askButton.prop( 'disabled', false );
return;
}
if( question.val().length > 500 || question.val().length < 10 )
{
@ -64,7 +78,7 @@ function askQuestion()
return;
}
request( 'addQuestion', {"question":question.val()},
request( 'addQuestion', {"question":question.val(),"nickname":nickname.val()},
function( result ){
askErrorMsg.html( '' );
askButton.prop( 'disabled', false );
@ -79,7 +93,7 @@ function askQuestion()
askErrorMsg.html( "Something wrong happened. We don't know why...<br>Try again later please!" );
break;
case 903:
askErrorMsg.html( "The question should contain at least 10 up to 500 characters!<br>Just not romans, but also not just 'help'." );
askErrorMsg.html( "The question should contain at least 10 up to 500 characters!<br>The nickname should contain at least 3 up to 20 characters!" );
break;
default:
$('.modal').modal('hide');
@ -122,13 +136,13 @@ function openReadMoreModal( id )
let answer_id = 0;
function openAnswerModal( id )
{
answerModalTitle.html( 'Answer ' + 'Anonymous' + " question" );
answerModalTitle.html( 'Answer ' + 'XXX' + " question" );
answerErrorMsg.html( '' );
answerModal.modal( 'show' );
request( 'getQuestion', {"question_id":id}, function( result )
{
readMoreModalTitle.html( 'Answer ' + result.data.created_by + " question" );
answerModalTitle.html( 'Answer ' + result.data.created_by + "'s question" );
if( result.data.answer !== null && result.data.answer.length > 5 )
{
answerText.val( result.data.answer );
@ -147,9 +161,9 @@ function answer()
return;
}
if( answerText.val().length < 5 || answerText.val().length > 500 )
if( answerText.val().length < 5 || answerText.val().length > 1000 )
{
answerErrorMsg.html( 'The answer should contain 10-500 characters!' );
answerErrorMsg.html( 'The answer should contain 10-1000 characters!' );
return;
}
@ -183,7 +197,7 @@ function getQuestions()
{
questions.append( '<div class="col-sm-6 col-lg-4 col-md-5"><div class="card" id="q_' + result.data.questions[i].id + '" style=" margin-bottom: 10px;">' +
' <div class="card-body">' +
' <h5 class="card-title">Question</h5>' +
' <h5 class="card-title text-warning">Question</h5>' +
' <h6 class="card-subtitle mb-2 text-muted">From ' + result.data.questions[i].created_by + '</h6>' +
' <p class="card-text">'+ result.data.questions[i].question + '</p>' +
' <a href="#" onclick="openReadMoreModal(\''+ result.data.questions[i].id + '\');" class="card-link">Read more</a>' +
@ -193,6 +207,11 @@ function getQuestions()
'</div> ' )
}
else if ( $( '#qa_' + result.data.questions[i].id ).length < 1 && result.data.questions[i].answer !== null && result.data.questions[i].answer.length > 5 )
{
$('#q_' + result.data.questions[i].id + ' p' ).html( result.data.questions[i].question + '<hr><span id="qa_' + result.data.questions[i].id + '">' + result.data.questions[i].answer + '</span>' );
$('#q_' + result.data.questions[i].id + ' h5').addClass( 'text-info' ).removeClass( 'text-warning' );
}
else if ( result.data.questions[i].answer !== $('#qa_' + result.data.questions[i].id ).html() )
{
$('#q_' + result.data.questions[i].id + ' p' ).html( result.data.questions[i].question + '<hr><span id="qa_' + result.data.questions[i].id + '">' + result.data.questions[i].answer + '</span>' );
}