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"> <component name="ChangeListManager">
<list default="true" id="fc13552d-b118-4828-b78f-fc8714e0cfdc" name="Default Changelist" comment="Final COMMIT!!!"> <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$/.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" /> <change beforePath="$PROJECT_DIR$/vendor/js/faq.js" beforeDir="false" afterPath="$PROJECT_DIR$/vendor/js/faq.js" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
@ -32,7 +35,7 @@
<execution /> <execution />
</component> </component>
<component name="DarkyenusTimeTracker"> <component name="DarkyenusTimeTracker">
<option name="totalTimeSeconds" value="73933" /> <option name="totalTimeSeconds" value="76591" />
<option name="gitIntegration" value="true" /> <option name="gitIntegration" value="true" />
<option name="naggedAbout" value="1" /> <option name="naggedAbout" value="1" />
</component> </component>
@ -77,7 +80,8 @@
<option name="presentableId" value="Default" /> <option name="presentableId" value="Default" />
<updated>1601618466935</updated> <updated>1601618466935</updated>
<workItem from="1601618467981" duration="36776000" /> <workItem from="1601618467981" duration="36776000" />
<workItem from="1601809534320" duration="1018000" /> <workItem from="1601809534320" duration="1558000" />
<workItem from="1601811106543" duration="2864000" />
</task> </task>
<task id="LOCAL-00001" summary="Initial commit"> <task id="LOCAL-00001" summary="Initial commit">
<created>1601618764031</created> <created>1601618764031</created>
@ -170,7 +174,14 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1601810048772</updated> <updated>1601810048772</updated>
</task> </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 /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@ -200,7 +211,8 @@
<MESSAGE value="&#10;Updating database-conf" /> <MESSAGE value="&#10;Updating database-conf" />
<MESSAGE value="Final COMMIT!!!" /> <MESSAGE value="Final COMMIT!!!" />
<MESSAGE value="Fix issue #1" /> <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>
<component name="WindowStateProjectService"> <component name="WindowStateProjectService">
<state x="728" y="326" width="800" height="683" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1601632929047"> <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" /> <screen x="0" y="34" width="1920" height="1046" />
</state> </state>
<state x="441" y="192" width="1037" height="736" key="SettingsEditor/0.34.1920.1046@0.34.1920.1046" timestamp="1601632853044" /> <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" /> <screen x="0" y="34" width="1920" height="1046" />
</state> </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"> <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" /> <screen x="0" y="34" width="1920" height="1046" />
</state> </state>

View File

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

View File

@ -75,10 +75,15 @@ class FaqModel
return $result['id']; 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 = 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"> <div class="modal-body">
<span class="text-danger" id="askErrorMsg"></span> <span class="text-danger" id="askErrorMsg"></span>
<div class="form-group"> <div class="form-group">
<label for="name" class="col-form-label">Name</label><br> <label for="nickname" class="col-form-label">Name</label><br>
<input type="text" class="form-control" maxlength="15" id="name"> <input type="text" class="form-control" maxlength="20" minlength="3" id="nickname">
<br> <br>
<label for="question" class="col-form-label">Question</label> <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> </div>
<div class="modal-footer"> <div class="modal-footer">
@ -96,7 +96,7 @@
<span class="text-danger" id="answerErrorMsg"></span> <span class="text-danger" id="answerErrorMsg"></span>
<div class="form-group"> <div class="form-group">
<label for="answer" class="col-form-label">Answer</label> <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> </div>
<div class="modal-footer"> <div class="modal-footer">

33
vendor/js/faq.js vendored
View File

@ -13,6 +13,7 @@ answerErrorMsg = $('#answerErrorMsg' );
questions = $( '#questions' ) questions = $( '#questions' )
question = $('#question' ); question = $('#question' );
askButton = $('#askBtn' ); askButton = $('#askBtn' );
nickname = $('#nickname' );
function request( a_uri, a_data, a_successhandler, a_errorhandler ) function request( a_uri, a_data, a_successhandler, a_errorhandler )
{ {
@ -56,6 +57,19 @@ function askQuestion()
askButton.prop( 'disabled', false ); askButton.prop( 'disabled', false );
return; 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 ) if( question.val().length > 500 || question.val().length < 10 )
{ {
@ -64,7 +78,7 @@ function askQuestion()
return; return;
} }
request( 'addQuestion', {"question":question.val()}, request( 'addQuestion', {"question":question.val(),"nickname":nickname.val()},
function( result ){ function( result ){
askErrorMsg.html( '' ); askErrorMsg.html( '' );
askButton.prop( 'disabled', false ); 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!" ); askErrorMsg.html( "Something wrong happened. We don't know why...<br>Try again later please!" );
break; break;
case 903: 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; break;
default: default:
$('.modal').modal('hide'); $('.modal').modal('hide');
@ -122,13 +136,13 @@ function openReadMoreModal( id )
let answer_id = 0; let answer_id = 0;
function openAnswerModal( id ) function openAnswerModal( id )
{ {
answerModalTitle.html( 'Answer ' + 'Anonymous' + " question" ); answerModalTitle.html( 'Answer ' + 'XXX' + " question" );
answerErrorMsg.html( '' ); answerErrorMsg.html( '' );
answerModal.modal( 'show' ); answerModal.modal( 'show' );
request( 'getQuestion', {"question_id":id}, function( result ) 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 ) if( result.data.answer !== null && result.data.answer.length > 5 )
{ {
answerText.val( result.data.answer ); answerText.val( result.data.answer );
@ -147,9 +161,9 @@ function answer()
return; 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; 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;">' + 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">' + ' <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>' + ' <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>' + ' <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>' + ' <a href="#" onclick="openReadMoreModal(\''+ result.data.questions[i].id + '\');" class="card-link">Read more</a>' +
@ -193,6 +207,11 @@ function getQuestions()
'</div> ' ) '</div> ' )
} }
else if ( $( '#qa_' + result.data.questions[i].id ).length < 1 && result.data.questions[i].answer !== null && result.data.questions[i].answer.length > 5 ) 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>' ); $('#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>' );
} }