diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..28a804d8932aba40f168fd757a74cb718a955a1a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="JavaScriptSettings"> + <option name="languageLevel" value="ES6" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..a866abcc67e5140ff4bddc3065f711c07eab2462 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/tugasbesar1_2018.iml" filepath="$PROJECT_DIR$/.idea/tugasbesar1_2018.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/.idea/tugasbesar1_2018.iml b/.idea/tugasbesar1_2018.iml new file mode 100644 index 0000000000000000000000000000000000000000..c956989b29ad0767edc6cf3a202545927c3d1e76 --- /dev/null +++ b/.idea/tugasbesar1_2018.iml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="WEB_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..16b346fa142e87bde9ab65c9c7e87da29c3a2b52 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,461 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="10848368-dfb8-4584-81d9-34a66ff8229c" name="Default Changelist" comment=""> + <change beforePath="$PROJECT_DIR$/app/controller/user/AuthMiddleware.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/AuthMiddleware.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/app/controller/user/User.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/User.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/app/controller/user/UserDb.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/UserDb.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/app/controller/user/UserUsecase.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/controller/user/UserUsecase.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/app/view/profile.php" beforeDir="false" afterPath="$PROJECT_DIR$/app/view/profile.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/config/devel.php" beforeDir="false" afterPath="$PROJECT_DIR$/config/devel.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/public/index.php" beforeDir="false" afterPath="$PROJECT_DIR$/public/index.php" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/public/static/css/header.css" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/css/header.css" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/public/static/js/header.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/js/header.js" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/public/static/js/login.js" beforeDir="false" afterPath="$PROJECT_DIR$/public/static/js/login.js" afterDir="false" /> + </list> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FUSProjectUsageTrigger"> + <session id="585135910"> + <usages-collector id="statistics.lifecycle.project"> + <counts> + <entry key="project.open.time.1" value="1" /> + <entry key="project.opened" value="1" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.extensions.open"> + <counts> + <entry key="css" value="3" /> + <entry key="gitignore" value="1" /> + <entry key="html" value="3" /> + <entry key="js" value="4" /> + <entry key="php" value="7" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.types.open"> + <counts> + <entry key="CSS" value="3" /> + <entry key="HTML" value="3" /> + <entry key="JavaScript" value="4" /> + <entry key="PHP" value="7" /> + <entry key="PLAIN_TEXT" value="1" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.extensions.edit"> + <counts> + <entry key="css" value="1071" /> + <entry key="html" value="941" /> + <entry key="js" value="590" /> + <entry key="php" value="115" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.types.edit"> + <counts> + <entry key="CSS" value="1071" /> + <entry key="HTML" value="941" /> + <entry key="JavaScript" value="590" /> + <entry key="PHP" value="115" /> + </counts> + </usages-collector> + </session> + </component> + <component name="FileEditorManager"> + <leaf> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/public/static/html/edit-profile.html"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="525"> + <caret line="35" column="64" selection-start-line="35" selection-start-column="64" selection-end-line="35" selection-end-column="64" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/public/static/html/header.html"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/public/static/css/header.css"> + <provider selected="true" editor-type-id="text-editor"> + <state> + <caret column="5" lean-forward="true" selection-start-column="5" selection-end-column="5" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/public/static/js/header.js"> + <provider selected="true" editor-type-id="text-editor"> + <state> + <caret column="34" lean-forward="true" selection-start-column="34" selection-end-column="34" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/public/static/js/edit-profile.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="405"> + <caret line="27" column="41" selection-start-line="27" selection-start-column="41" selection-end-line="27" selection-end-column="41" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/public/static/js/login.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="165"> + <caret line="11" column="32" lean-forward="true" selection-start-line="11" selection-end-line="12" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/app/controller/user/routes.php"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/app/controller/user/UserUsecase.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="255"> + <caret line="47" column="56" lean-forward="true" selection-start-line="47" selection-start-column="56" selection-end-line="47" selection-end-column="56" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/app/controller/user/UserDb.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="342"> + <caret line="47" lean-forward="true" selection-start-line="47" selection-end-line="47" /> + </state> + </provider> + </entry> + </file> + <file pinned="false" current-in-tab="false"> + <entry file="file://$PROJECT_DIR$/app/view/edit-profile.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="90"> + <caret line="6" column="3" selection-start-line="6" selection-start-column="3" selection-end-line="6" selection-end-column="3" /> + </state> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="FileTemplateManagerImpl"> + <option name="RECENT_TEMPLATES"> + <list> + <option value="HTML File" /> + <option value="CSS File" /> + <option value="JavaScript File" /> + </list> + </option> + </component> + <component name="FindInProjectRecents"> + <findStrings> + <find>updateUser</find> + </findStrings> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/public/static/css/profile.css" /> + <option value="$PROJECT_DIR$/public/static/html/profile.html" /> + <option value="$PROJECT_DIR$/app/view/edit-profile.php" /> + <option value="$PROJECT_DIR$/public/index.php" /> + <option value="$PROJECT_DIR$/public/static/js/header.js" /> + <option value="$PROJECT_DIR$/public/static/js/profile.js" /> + <option value="$PROJECT_DIR$/config/devel.php" /> + <option value="$PROJECT_DIR$/public/static/css/edit-profile.css" /> + <option value="$PROJECT_DIR$/public/static/css/header.css" /> + <option value="$PROJECT_DIR$/public/static/html/edit-profile.html" /> + <option value="$PROJECT_DIR$/app/controller/user/UserDb.php" /> + <option value="$PROJECT_DIR$/app/controller/user/UserUsecase.php" /> + <option value="$PROJECT_DIR$/public/static/js/edit-profile.js" /> + </list> + </option> + </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + <sorting>DEFINITION_ORDER</sorting> + </component> + <component name="ProjectFrameBounds" extendedState="6"> + <option name="width" value="1920" /> + <option name="height" value="1080" /> + </component> + <component name="ProjectView"> + <navigator proportions="" version="1"> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="app" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="app" type="462c0819:PsiDirectoryNode" /> + <item name="controller" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="app" type="462c0819:PsiDirectoryNode" /> + <item name="controller" type="462c0819:PsiDirectoryNode" /> + <item name="user" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="app" type="462c0819:PsiDirectoryNode" /> + <item name="view" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="public" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="public" type="462c0819:PsiDirectoryNode" /> + <item name="static" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="public" type="462c0819:PsiDirectoryNode" /> + <item name="static" type="462c0819:PsiDirectoryNode" /> + <item name="css" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="public" type="462c0819:PsiDirectoryNode" /> + <item name="static" type="462c0819:PsiDirectoryNode" /> + <item name="img" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="tugasbesar1_2018" type="b2602c69:ProjectViewProjectNode" /> + <item name="tugasbesar1_2018" type="462c0819:PsiDirectoryNode" /> + <item name="public" type="462c0819:PsiDirectoryNode" /> + <item name="static" type="462c0819:PsiDirectoryNode" /> + <item name="js" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Scope" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="DefaultHtmlFileTemplate" value="HTML File" /> + <property name="WebServerToolWindowFactoryState" value="false" /> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="list.type.of.created.stylesheet" value="CSS" /> + <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" /> + <property name="nodejs_npm_path_reset_for_default_project" value="true" /> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="10848368-dfb8-4584-81d9-34a66ff8229c" name="Default Changelist" comment="" /> + <created>1540366993461</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1540366993461</updated> + <workItem from="1540366994913" duration="7734000" /> + </task> + <servers /> + </component> + <component name="TimeTrackingManager"> + <option name="totallyTimeSpent" value="7734000" /> + </component> + <component name="ToolWindowManager"> + <frame x="0" y="0" width="1920" height="1080" extended-state="6" /> + <editor active="true" /> + <layout> + <window_info id="Favorites" order="0" side_tool="true" /> + <window_info active="true" content_ui="combo" id="Project" order="1" visible="true" weight="0.2497332" /> + <window_info id="Structure" order="2" side_tool="true" weight="0.25" /> + <window_info anchor="bottom" id="Terminal" order="0" weight="0.32979852" /> + <window_info anchor="bottom" id="Database Changes" order="1" show_stripe_button="false" /> + <window_info anchor="bottom" id="Event Log" order="2" side_tool="true" /> + <window_info anchor="bottom" id="Version Control" order="3" show_stripe_button="false" /> + <window_info anchor="bottom" id="Docker" order="4" show_stripe_button="false" /> + <window_info anchor="bottom" id="Message" order="5" /> + <window_info anchor="bottom" id="Find" order="6" /> + <window_info anchor="bottom" id="Run" order="7" /> + <window_info anchor="bottom" id="Debug" order="8" weight="0.4" /> + <window_info anchor="bottom" id="Cvs" order="9" weight="0.25" /> + <window_info anchor="bottom" id="Inspection" order="10" weight="0.4" /> + <window_info anchor="bottom" id="TODO" order="11" /> + <window_info anchor="right" id="Database" order="0" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="1" type="SLIDING" weight="0.4" /> + <window_info anchor="right" id="Ant Build" order="2" weight="0.25" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="3" weight="0.2497332" /> + </layout> + </component> + <component name="TypeScriptGeneratedFilesManager"> + <option name="version" value="1" /> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/public/static/html/profile.html"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="150"> + <caret line="10" column="35" selection-start-line="10" selection-start-column="35" selection-end-line="10" selection-end-column="35" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/index.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="840"> + <caret line="56" column="26" selection-start-line="56" selection-start-column="26" selection-end-line="56" selection-end-column="26" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/css/profile.css"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="801"> + <caret line="67" lean-forward="true" selection-start-line="67" selection-end-line="67" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/js/profile.js"> + <provider selected="true" editor-type-id="text-editor"> + <state> + <caret selection-end-line="6" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/view/profile.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="15"> + <caret line="1" selection-start-line="1" selection-end-line="4" selection-end-column="49" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/config/devel.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="75"> + <caret line="5" column="39" selection-start-line="5" selection-start-column="39" selection-end-line="5" selection-end-column="39" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/.gitignore"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="30"> + <caret line="2" lean-forward="true" selection-start-line="2" selection-end-line="2" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/css/edit-profile.css"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="180"> + <caret line="12" column="17" selection-start-line="12" selection-start-column="17" selection-end-line="12" selection-end-column="17" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/html/header.html"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/css/header.css"> + <provider selected="true" editor-type-id="text-editor"> + <state> + <caret column="5" lean-forward="true" selection-start-column="5" selection-end-column="5" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/view/edit-profile.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="90"> + <caret line="6" column="3" selection-start-line="6" selection-start-column="3" selection-end-line="6" selection-end-column="3" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/html/edit-profile.html"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="525"> + <caret line="35" column="64" selection-start-line="35" selection-start-column="64" selection-end-line="35" selection-end-column="64" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/js/header.js"> + <provider selected="true" editor-type-id="text-editor"> + <state> + <caret column="34" lean-forward="true" selection-start-column="34" selection-end-column="34" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/controller/user/UserDb.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="342"> + <caret line="47" lean-forward="true" selection-start-line="47" selection-end-line="47" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/controller/user/UserUsecase.php"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="255"> + <caret line="47" column="56" lean-forward="true" selection-start-line="47" selection-start-column="56" selection-end-line="47" selection-end-column="56" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/app/controller/user/routes.php"> + <provider selected="true" editor-type-id="text-editor" /> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/js/login.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="165"> + <caret line="11" column="32" lean-forward="true" selection-start-line="11" selection-end-line="12" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/public/static/js/edit-profile.js"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="405"> + <caret line="27" column="41" selection-start-line="27" selection-start-column="41" selection-end-line="27" selection-end-column="41" /> + </state> + </provider> + </entry> + </component> +</project> \ No newline at end of file diff --git a/app/controller/user/AuthMiddleware.php b/app/controller/user/AuthMiddleware.php index 15813d0d1f6d4cae8bb59a044b77c416eee4a2a8..2b850e1a36af086e87f4df81dc95a397fd51e11d 100644 --- a/app/controller/user/AuthMiddleware.php +++ b/app/controller/user/AuthMiddleware.php @@ -8,7 +8,7 @@ if ($_COOKIE["Authorization"]){ $user_id = verifyJWT($_COOKIE["Authorization"]); if ($user_id){ - setcookie("user_id", $user_id, time()+300, "/"); + setcookie("user_id", $user_id, time()+3000, "/"); $next($nextRequest); exit; } diff --git a/app/controller/user/User.php b/app/controller/user/User.php index f66ec40be2324437668a5cbcfc4139877466ad60..878945ff2f929f0fb1e0295df25912414ad35288 100644 --- a/app/controller/user/User.php +++ b/app/controller/user/User.php @@ -5,14 +5,16 @@ public $fullname; public $email; public $address; + public $phone; private $hpass; - function __construct($user_id,$username,$fullname,$email,$address,$hpass){ + function __construct($user_id,$username,$fullname,$email,$address,$phone,$hpass){ $this->user_id = $user_id; $this->username = $username; $this->fullname = $fullname; $this->email = $email; $this->address = $address; + $this->phone = $phone; $this->hpass = $hpass; } diff --git a/app/controller/user/UserDb.php b/app/controller/user/UserDb.php index 1d59300ae70129dae2006f8b71b106df2287a9c6..0c69ccecfdb1432846e755abd2d6376195b69d02 100644 --- a/app/controller/user/UserDb.php +++ b/app/controller/user/UserDb.php @@ -18,34 +18,35 @@ $username = $row["username"]; $email = $row["email"]; $address = $row["address"]; + $phone = $row["phone"]; $hpass = $row["hpass"]; - $user = new User($user_id, $username, $fullname, $email, $address, $hpass); + $user = new User($user_id, $username, $fullname, $email, $address, $phone, $hpass); }; return $user; } function createUser($user){ $userRes = null; - $sql = 'INSERT INTO user(username,fullname,email,address,hpass) VALUES(?,?,?,?,?)'; + $sql = 'INSERT INTO user(username,fullname,email,address,phone,hpass) VALUES(?,?,?,?,?,?)'; $stmt = $this->conn->prepare($sql); - if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address, $user->getPassword()])){ + if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address,$user->phone, $user->getPassword()])){ $user_id = 0; $last_insert_id = $this->conn->query("SELECT LAST_INSERT_ID()"); foreach($last_insert_id as $row){ $user_id = $row["LAST_INSERT_ID()"]; }; - $userRes = new User($user_id, $user->username, $user->fullname, $user->email, $user->address, $user->getPassword()); + $userRes = new User($user_id, $user->username, $user->fullname, $user->email, $user->address, $user->phone, $user->getPassword()); } return $userRes; } function updateUser($user){ - $sql = 'UPDATE user SET username=?, fullname=?, email=?, address=?, hpass=? WHERE user_id=?'; + $sql = 'UPDATE user SET username=?, fullname=?, email=?, address=?, phone=?, hpass=? WHERE user_id=?'; $stmt = $this->conn->prepare($sql); - if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address, $user->getPassword(), $user->user_id])){ + if ($stmt->execute([$user->username, $user->fullname, $user->email, $user->address, $user->phone, $user->getPassword(), $user->user_id])){ return $user; } else { return null; diff --git a/app/controller/user/UserUsecase.php b/app/controller/user/UserUsecase.php index c773eac6e70ff9867ba387e5508547a6a6bf9555..e9bd775bba1afb5b02ed99c14a8eef6fa926bef1 100644 --- a/app/controller/user/UserUsecase.php +++ b/app/controller/user/UserUsecase.php @@ -26,11 +26,12 @@ $fullname = $request->payload["fullname"]; $email = $request->payload["email"]; $address = $request->payload["address"]; + $phone = $request->payload["phone"]; $password = $request->payload["password"]; $hpass = hash('sha256', $password); if (!$this->userDb->isEmailOrUsernameExist($email,$username)){ - $user = new User(null,$username,$fullname,$email,$address, $hpass); + $user = new User(null,$username,$fullname,$email,$address,$phone,$hpass); $user = $this->userDb->createUser($user); if ($user){ writeResponse(200, "Success register user", $user); @@ -44,14 +45,15 @@ function editProfile(Request $request){ $user_id = (int)$request->params["user_id"]; - $user = $this->userDb->getUserById($user_id)[0]; + $user = $this->userDb->getUserById($user_id); if ($user){ $user->username = array_key_exists("username",$request->payload) ? $request->payload["username"] : $user->username; $user->fullname = array_key_exists("fullname",$request->payload) ? $request->payload["fullname"]: $user->fullname; $user->email = array_key_exists("email",$request->payload) ? $request->payload["email"] : $user->email; $user->address = array_key_exists("address",$request->payload) ? $request->payload["address"] : $user->address; - + $user->phone= array_key_exists("phone",$request->payload) ? $request->payload["phone"] : $user->phone; + $newPass = array_key_exists("password",$request->payload) ? hash('sha256', $request->payload["username"]) : $user->getPassword(); $user->setPassword($newPass); @@ -83,7 +85,7 @@ if ($user_id) { $payload = array( "user_id"=> (int)$user_id, - "exp"=> time()+300 + "exp"=> time()+3000 ); $jwt = generateJWT($payload); writeResponse(200, "Login Success", $jwt); diff --git a/app/view/edit-profile.php b/app/view/edit-profile.php new file mode 100644 index 0000000000000000000000000000000000000000..9228f27e2cba4550ed83c5389f5a36177d245a38 --- /dev/null +++ b/app/view/edit-profile.php @@ -0,0 +1,11 @@ +<?php +/** + * Created by PhpStorm. + * User: adylan + * Date: 24/10/18 + * Time: 15:17 + */ + include __STATIC__.'/html/header.html'; + include __STATIC__.'/html/edit-profile.html'; + include __STATIC__.'/html/footer.html'; +?> \ No newline at end of file diff --git a/app/view/profile.php b/app/view/profile.php index d0e46b8a3cbcf888dd69bd7267ac722f79ba0fa9..9ef377e11dc38ef0ea389d33d6ad3607fc58f4d3 100644 --- a/app/view/profile.php +++ b/app/view/profile.php @@ -1,6 +1,6 @@ <?php include __STATIC__.'/html/header.html'; // Include content here; - echo "Implement plz"; + include __STATIC__.'/html/profile.html'; include __STATIC__.'/html/footer.html'; ?> \ No newline at end of file diff --git a/config/devel.php b/config/devel.php index 7a9949ef27af01a4190ad6b83cb445ec68148915..ad2af678967799b27b8760715bed5fd89e87b67d 100644 --- a/config/devel.php +++ b/config/devel.php @@ -3,7 +3,7 @@ "db" => array( "host" => "localhost", "user" => "root", - "password" => "06071998", + "password" => "rahasiailahi", "db_name" => "tayo_book_store" ), "base_url" => "http://localhost:4000/", diff --git a/public/index.php b/public/index.php index b5ff8549ce42c8019865629763c43e9fbc23f66d..f364ff46f00bc3460a498c4fcf927f7ae88f1629 100644 --- a/public/index.php +++ b/public/index.php @@ -54,9 +54,10 @@ $router->add("/register/", "GET", 'render', null, 'register.php'); $router->add("/history/", "GET", 'render', $authMiddleware, 'history.php'); $router->add("/profile/", "GET", 'render', $authMiddleware, 'profile.php'); + $router->add("/profile/edit/", "GET", "render", $authMiddleware, "edit-profile.php"); $router->add("/logout/", "GET", 'render', $authMiddleware, 'logout.php'); $router->add("/review/", "GET", "render", $authMiddleware, "review.php"); - // TODO: Add Order Routes +// TODO: Add Order Routes $errorCallback = function(){ writeResponse(404, "Page not found."); diff --git a/public/static/css/edit-profile.css b/public/static/css/edit-profile.css new file mode 100644 index 0000000000000000000000000000000000000000..da086a20c9fb92860f37c7560dea2c9304b405fc --- /dev/null +++ b/public/static/css/edit-profile.css @@ -0,0 +1,102 @@ +.edit-profile-container { + width: 60%; + height: 100%; + margin: 0 auto; +} + +.edit-profile-content{ + padding: 5%; +} + +input, textarea{ + background-color: #ffffff; + color: black; +} +.edit-profile-headline { + color: #FF6029; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + padding: 50px; + font-size: 5em; + margin: 0; +} + +.edit-profile-picture{ + display: flex; + justify-content: space-between; + margin-bottom: 10%; +} + + +.edit-picture-img { + max-width: 250px; + max-height: 250px; + border: 2pt solid black; +} + +.picture-input-file{ + margin: 10px; +} + +.picture-input-text{ + flex-grow: 1; +} + +.edit-picture-input { + display: flex; + margin-left: 5%; + flex-grow: 1; + margin-top: auto; + margin-bottom: auto; +} + +.edit-profile-identity{ + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +.row { + margin: 1%; + font-size: 1.5em; +} + +.identity-column { + width: 30%; +} + +.input-column { + width: 70%; + +} + +.edit-button-container{ + margin-top: 5%; + display: flex; + justify-content: space-between; + width: 100%; +} +.edit-button { + border-radius: 5px; + font-size: 1.5em; + padding: 5px 20px 5px 20px; + background-color: white; +} + +.orange-button{ + color: #FF6029; + border: 1pt solid #FF6029; +} + +.orange-button:hover{ + color: #ffffff; + background: #FF6029; +} + +.blue-button{ + color: #00aeef; + border: 1pt solid #00aeef; +} + +.blue-button:hover{ + color: #ffffff; + background: #00aeef; +} + diff --git a/public/static/css/header.css b/public/static/css/header.css index 8f36eb7ca426640ff38bb0fa3aa4817a4a8f4419..11a7f79b210f86e51ca3fe7835e4bc4dffda8c01 100644 --- a/public/static/css/header.css +++ b/public/static/css/header.css @@ -28,7 +28,7 @@ nav { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; font-style: italic; margin-top:10%; - margin-right:10px; + margin-right:35px; } #logo { diff --git a/public/static/css/profile.css b/public/static/css/profile.css new file mode 100644 index 0000000000000000000000000000000000000000..193e66f14fff6c51db7132c94be986ff9ec9d093 --- /dev/null +++ b/public/static/css/profile.css @@ -0,0 +1,67 @@ +body{ + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; +} + +.main-container{ + width: 100%; + height: 100%; +} + +.profile-picture-jumbotron { + background-color: #003B4C; + display: flex; + justify-content: center; + margin: 0; +} + +.profile-picture-container{ + margin: 0 auto; + width: 50%; + padding:1.5%; + text-align: center; +} + +.profile-img { + max-height: 75%; + border-radius : 100%; + border: 10pt solid yellow; +} + +.profile-name { + font-family: Helvetica, Verdana, sans-serif; + color: white; + text-align: center; + font-size: 4.5em; + margin: 2%; +} + +.detail-container{ + width: 70%; + height: 100%; + margin: 0 auto; +} + +.profile-table{ + width:100%; + padding-left: 3%; + padding-right: 3%; + font-size: 3em; + font-family: 'Courier New', Courier, monospace; +} + +.table-headline{ + font-size: 5em; + color:#FF6029; +} + +.profile-icon { + position: relative; + float: right; + max-height: 50px; +} + +.edit-icon{ + float: right; + margin: 2%; + height: 50px; +} diff --git a/public/static/html/edit-profile.html b/public/static/html/edit-profile.html new file mode 100644 index 0000000000000000000000000000000000000000..adc2c984e1c0b0d636163847ee87c69f400f0549 --- /dev/null +++ b/public/static/html/edit-profile.html @@ -0,0 +1,45 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Edit Profile</title> + <link rel="stylesheet" href="/static/css/edit-profile.css"> +</head> +<body> + <div class="edit-profile-container"> + <h1 class="edit-profile-headline">Edit Profile</h1> + <div class="edit-profile-content"> + <div class="edit-profile-picture"> + <img src="/static/img/tayoblue.jpg" class="edit-picture-img"> + <div class="edit-picture-input"> + <input type="text" class="picture-input-text" > + <input type="file" name="pic" accept="image/*" class="picture-input-file" > + </div> + </div> + <div class="edit-profile-identity"> + <div class="row"> + <span class="identity-column" >Name </span> + <input type="text" class="input-column" id="edit_name"> + </div> + <div class="row"> + <span class="identity-column">Address </span> + <textarea class="input-column" rows="10" id="edit_address"></textarea> + </div> + <div class="row"> + <span class="identity-column">Phone Number </span> + <input type="text" class="input-column" id="edit_phone"> + </div> + </div> + + <div class="edit-button-container"> + <button class="edit-button orange-button" id="back_button">BACK</button> + <button class="edit-button blue-button" id="save_button">SAVE</button> + </div> + </div> + + + </div> + +</body> +<script src="/static/js/edit-profile.js"></script> +</html> \ No newline at end of file diff --git a/public/static/html/profile.html b/public/static/html/profile.html new file mode 100644 index 0000000000000000000000000000000000000000..e4e9f5c2774a41d27191284b51d14a4326ae0312 --- /dev/null +++ b/public/static/html/profile.html @@ -0,0 +1,44 @@ +<link rel="stylesheet" href="/static/css/profile.css"> +<div class="main-container"> + <div class="profile-picture-jumbotron"> + <div class="profile-picture-container"> + </div> + <div class="profile-picture-container"> + <img src="/static/img/tayoblue.jpg" class="profile-img"></img> + <h1 class="profile-name" id="profile_name">Username</h1> + </div> + <div class="profile-picture-container"> + <a href="/profile/edit/"><img src="/static/img/pencil.png" class="edit-icon"></a> + </div> + + + </div> + + <div class="detail-container"> + <h1 class="table-headline">My Profile</h1> + <table class="profile-table" cellpadding="15"> + <tr class="table-row" height=75> + <td width="10%" ><img class="profile-icon" src="/static/img/profile.png"></td> + <td width="40%">Username</td> + <td id="username_column">Tayo</td> + </tr> + <tr class="table-row" height=75> + <td><img class="profile-icon" src="/static/img/email.png"></td> + <td>Email</td> + <td id="email_column">email</td> + </tr> + <tr class="table-row" height=75> + <td><img class="profile-icon" src="/static/img/house.png"></td> + <td>Address</td> + <td id="address_column">address</td> + </tr> + <tr class="table-row" height=75> + <td><img class="profile-icon" src="/static/img/phone.png"></td> + <td>Phone Number</td> + <td id="phone_column">phone</td> + </tr> + </table> + </div> +</div> + +<script src="/static/js/profile.js"></script> \ No newline at end of file diff --git a/public/static/img/email.png b/public/static/img/email.png new file mode 100644 index 0000000000000000000000000000000000000000..37c7f7dce74fd15b71ffbb26b1fe4a9f5a37c7bf Binary files /dev/null and b/public/static/img/email.png differ diff --git a/public/static/img/house.png b/public/static/img/house.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb9274490a5802975bd394042a25400a3838cba Binary files /dev/null and b/public/static/img/house.png differ diff --git a/public/static/img/pencil.png b/public/static/img/pencil.png new file mode 100644 index 0000000000000000000000000000000000000000..5934ba51213de8ed981fb21c0c79aef0920879e9 Binary files /dev/null and b/public/static/img/pencil.png differ diff --git a/public/static/img/phone.png b/public/static/img/phone.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c3811682a7f677324241641f20f472c3acd128 Binary files /dev/null and b/public/static/img/phone.png differ diff --git a/public/static/img/profile.jpg b/public/static/img/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14ec7e21dd6f94e2be96c0c10a6dd885faf346cd Binary files /dev/null and b/public/static/img/profile.jpg differ diff --git a/public/static/img/profile.png b/public/static/img/profile.png new file mode 100644 index 0000000000000000000000000000000000000000..816e8ae1133c0459912f4a904904a8581ee6d4c7 Binary files /dev/null and b/public/static/img/profile.png differ diff --git a/public/static/js/edit-profile.js b/public/static/js/edit-profile.js new file mode 100644 index 0000000000000000000000000000000000000000..435b7e0d4cfded2c435af11e07b064aecc56c5ff --- /dev/null +++ b/public/static/js/edit-profile.js @@ -0,0 +1,54 @@ +let nameText = document.getElementById('edit_name'); +let addressText = document.getElementById('edit_address'); +let phoneText = document.getElementById('edit_phone'); +let backButton = document.getElementById('back_button'); +let saveButton = document.getElementById('save_button'); + +function getUserDetail(){ + const userId = parseInt(getCookie("user_id")); + + doAjax('/api/user/'+userId+'/',"GET",null,function(response){ + const data = response.data; + console.log(data); + if (data){ + const fullnameData = data.fullname; + const addressData = data.address; + const phoneData = data.phone; + + nameText.value = fullnameData; + addressText.innerHTML = addressData; + phoneText.value = phoneData; + + } + }); +} + +function updateUser(){ + const fullnameData = nameText.value; + const addressData = addressText.value; + const phoneData = phoneText.value; + + let payload = { + "fullname":fullnameData, + "address":addressData, + "phone":phoneData + } + const userId = parseInt(getCookie("user_id")); + + doAjax('/api/user/'+userId+'/',"PUT",payload,function(result){ + window.location.replace('http://localhost:4000/profile/'); + }); +} + +window.onload = function() { + backButton.addEventListener('click', function(e){ + e.preventDefault(); + window.history.back(); + }); + + saveButton.addEventListener('click', function(e){ + e.preventDefault(); + updateUser(); + }); + getUserDetail(); +}; \ No newline at end of file diff --git a/public/static/js/header.js b/public/static/js/header.js index 6b732a8dcdb5189798a83c539a4639c9d09b2795..881a70cbbfe2475a1d31af940b50693b5a6cd64e 100644 --- a/public/static/js/header.js +++ b/public/static/js/header.js @@ -13,7 +13,7 @@ const enableTabColor = function(){ if (urlPath === "/history/" || urlPath.includes("/review")){ historyTab.style.backgroundColor = orangeColor; } - if (urlPath === "/profile/"){ + if (urlPath.includes("/profile/")){ profileTab.style.backgroundColor = orangeColor; } diff --git a/public/static/js/login.js b/public/static/js/login.js index 296e4c0ab4b971566b50aeaa7b86926699a831ab..0aae10fe27d5aec180b44c0aeb7b722ae670de20 100644 --- a/public/static/js/login.js +++ b/public/static/js/login.js @@ -8,7 +8,7 @@ const doLogin = function(){ } doAjax('/auth/login/',"POST", payload, function(response){ - setCookie("Authorization", response.data.token, 300); + setCookie("Authorization", response.data.token, 3000); window.location.replace('http://localhost:4000/browse/'); }, function(response){ alert("Invalid username or password"); diff --git a/public/static/js/profile.js b/public/static/js/profile.js new file mode 100644 index 0000000000000000000000000000000000000000..77a9074bd728cd7b114c23bed8387d1c4b53c51a --- /dev/null +++ b/public/static/js/profile.js @@ -0,0 +1,34 @@ +let nameText = document.getElementById('profile_name'); +let usernameText = document.getElementById('username_column'); +let emailText = document.getElementById('email_column'); +let addressText = document.getElementById('address_column'); +let phoneText = document.getElementById('phone_column'); + + +function getUserDetail(){ + const userId = parseInt(getCookie("user_id")); + + doAjax('/api/user/'+userId+'/',"GET",null,function(response){ + const data = response.data; + console.log(data); + if (data){ + const fullnameData = data.fullname; + const usernameData = data.username; + const emailData = data.email; + const addressData = data.address; + const phoneData = data.phone; + + nameText.innerHTML = fullnameData; + usernameText.innerHTML = "@"+usernameData; + emailText.innerHTML = emailData; + addressText.innerHTML = addressData; + phoneText.innerHTML = phoneData; + + } + }); +} + + +window.onload = function(){ + getUserDetail(); +} \ No newline at end of file