Index: reactapp/src/Components/OpinionTree.js
===================================================================
--- reactapp/src/Components/OpinionTree.js	(revision 702ca779afcdb48bcc15202ffc07dfb4be2efebd)
+++ reactapp/src/Components/OpinionTree.js	(revision 6221ab65b38aad2d2b041055cb1aa8825b624f00)
@@ -9,11 +9,79 @@
   StyledFontAwesomeIcon,
 } from "./Styled/OpinionCard.style";
-
 import { solid } from "@fortawesome/fontawesome-svg-core/import.macro";
 import { dateConverter } from "../Util/dateConverter";
-
-function OpinionTree({ professor }) {
+import AuthApi from "../api/AuthApi";
+import { useNavigate } from "react-router-dom";
+import { useContext, useState } from "react";
+import {
+  Modal,
+  ModalContent,
+  ModalClose,
+  ModalHeader,
+  ModalBody,
+  ModalTextarea,
+  ModalFooter,
+} from "../Components/Styled/Modal.style";
+import axios from "../api/axios";
+
+function OpinionTree({ professor, user, userLoaded }) {
   var renderedOpinionIds = [];
   var postCount; // za da ne go pokazuva ispod postot
+
+  let navigate = useNavigate();
+  const { auth, setAuth } = useContext(AuthApi);
+
+  let [replyModalDisplay, setReplyModalDisplay] = useState("none");
+  const [replyContent, setReplyContent] = useState("");
+
+  const handleLike = () => {
+    if (auth) {
+      return;
+    } else {
+      navigate("/login");
+    }
+  };
+
+  const handleDislike = () => {
+    if (auth) {
+      return;
+    } else {
+      navigate("/login");
+    }
+  };
+
+  const handleReply = () => {
+    if (auth) {
+      setReplyModalDisplay("block");
+    } else {
+      navigate("/login");
+    }
+  };
+
+  const handleModalCloseClick = () => {
+    setReplyModalDisplay("none");
+  };
+
+  const handleContentChange = (e) => {
+    setReplyContent(e.target.value);
+  };
+
+  const handleReplySubmit = async (e, postId) => {
+    e.preventDefault();
+
+    const response = await axios(
+      `http://192.168.0.19:8080/secure/professor/${professor.professorId}/replyToOpinion/${postId}`,
+      {
+        method: "post",
+        data: {
+          content: replyContent,
+        },
+        withCredentials: true,
+      }
+    );
+
+    window.location.reload(false);
+    //console.log(response);
+  };
 
   function displayChildPosts(child, parentPostAuthorUsername, replyIndent) {
@@ -34,19 +102,26 @@
               )}
             </OpinionReplyCardContentTime>
-            <StyledFontAwesomeIcon
-              icon={solid("thumbs-up")}
-              right={50 + "px"}
-              color="greenyellow"
-            />
-            <StyledFontAwesomeIcon
-              icon={solid("thumbs-down")}
-              right={10 + "px"}
-              color="indianred"
-            />
-            <StyledFontAwesomeIcon
-              icon={solid("reply")}
-              right={90 + "px"}
-              color="black"
-            />
+            {auth && userLoaded && user.user.id !== child.author.id && (
+              <>
+                <StyledFontAwesomeIcon
+                  icon={solid("thumbs-up")}
+                  right={50 + "px"}
+                  color="greenyellow"
+                  onClick={handleLike}
+                />
+                <StyledFontAwesomeIcon
+                  icon={solid("thumbs-down")}
+                  right={10 + "px"}
+                  color="indianred"
+                  onClick={handleDislike}
+                />
+                <StyledFontAwesomeIcon
+                  icon={solid("reply")}
+                  right={90 + "px"}
+                  color="black"
+                  onClick={handleReply} //todo
+                />
+              </>
+            )}
           </OpinionReplyCardContent>
           {child.children.map((childOfChild) =>
@@ -69,4 +144,31 @@
           return (
             <div key={opinion.postId}>
+              <Modal display={replyModalDisplay}>
+                <ModalContent>
+                  <ModalHeader>
+                    <ModalClose onClick={handleModalCloseClick}>
+                      &times;
+                    </ModalClose>
+                    <h3 style={{ marginTop: "5px" }}>
+                      Реплика на {opinion.author.username}
+                    </h3>
+                  </ModalHeader>
+                  <form onSubmit={(e) => handleReplySubmit(e, opinion.postId)}>
+                    <ModalBody>
+                      <label htmlFor="content">
+                        <b>Содржина</b>:
+                        <ModalTextarea
+                          id="content"
+                          rows="8"
+                          cols="100"
+                          value={replyContent}
+                          onChange={handleContentChange}
+                        />
+                      </label>
+                    </ModalBody>
+                    <ModalFooter type="submit">РЕПЛИЦИРАЈ</ModalFooter>
+                  </form>
+                </ModalContent>
+              </Modal>
               <OpinionCard>
                 <OpinionCardContent>
@@ -83,19 +185,26 @@
                     )}
                   </OpinionCardContentTime>
-                  <StyledFontAwesomeIcon
-                    icon={solid("thumbs-up")}
-                    right={50 + "px"}
-                    color="greenyellow"
-                  />
-                  <StyledFontAwesomeIcon
-                    icon={solid("thumbs-down")}
-                    right={10 + "px"}
-                    color="indianred"
-                  />
-                  <StyledFontAwesomeIcon
-                    icon={solid("reply")}
-                    right={90 + "px"}
-                    color="black"
-                  />
+                  {auth && userLoaded && user.user.id !== opinion.author.id && (
+                    <>
+                      <StyledFontAwesomeIcon
+                        icon={solid("thumbs-up")}
+                        right={50 + "px"}
+                        color="greenyellow"
+                        onClick={handleLike}
+                      />
+                      <StyledFontAwesomeIcon
+                        icon={solid("thumbs-down")}
+                        right={10 + "px"}
+                        color="indianred"
+                        onClick={handleDislike}
+                      />
+                      <StyledFontAwesomeIcon
+                        icon={solid("reply")}
+                        right={90 + "px"}
+                        color="black"
+                        onClick={handleReply}
+                      />
+                    </>
+                  )}
                 </OpinionCardContent>
                 {opinion.children.map((child) =>
Index: reactapp/src/Components/Search.js
===================================================================
--- reactapp/src/Components/Search.js	(revision 702ca779afcdb48bcc15202ffc07dfb4be2efebd)
+++ reactapp/src/Components/Search.js	(revision 6221ab65b38aad2d2b041055cb1aa8825b624f00)
@@ -15,5 +15,5 @@
 
   useEffect(() => {
-    const url = `http://192.168.0.17:8080/public/professors/nameContains/${transliterate(
+    const url = `http://192.168.0.19:8080/public/professors/nameContains/${transliterate(
       query
     )}`;
Index: reactapp/src/Components/Styled/Modal.style.js
===================================================================
--- reactapp/src/Components/Styled/Modal.style.js	(revision 702ca779afcdb48bcc15202ffc07dfb4be2efebd)
+++ reactapp/src/Components/Styled/Modal.style.js	(revision 6221ab65b38aad2d2b041055cb1aa8825b624f00)
@@ -27,5 +27,5 @@
   top: 0;
   width: 100%;
-  height: 100%;
+  height: auto;
   overflow: auto;
   background-color: rgb(0, 0, 0);
@@ -47,5 +47,5 @@
   background-color: #fefefe;
   margin: 15% auto;
-  padding: 0;
+  padding: 20px;
   border: 1px solid #888;
   width: 80%;
@@ -72,8 +72,8 @@
   color: white;
   height: 40px;
-  margin-bottom: 10px;
+  margin-bottom: 30px;
 `;
 
-export const ModalFooter = styled.div`
+export const ModalFooter = styled.button`
   padding: 2px 16px;
   background-color: rgba(0, 102, 204, 1);
@@ -81,5 +81,5 @@
   color: white;
   height: 40px;
-  margin-top: 10px;
+  margin-top: 30px;
   transition: 0.4s;
   &:hover {
@@ -87,4 +87,9 @@
     cursor: pointer;
   }
+  font-family: "Roboto Mono", monospace;
+  width: 100%;
+  border: 0;
+  font-size: 18px;
+  font-weight: bold;
 `;
 
@@ -109,3 +114,4 @@
   padding: 12px 16px;
   border: 1px solid #ccc;
+  resize: none;
 `;
Index: reactapp/src/Components/Styled/OpinionCard.style.js
===================================================================
--- reactapp/src/Components/Styled/OpinionCard.style.js	(revision 702ca779afcdb48bcc15202ffc07dfb4be2efebd)
+++ reactapp/src/Components/Styled/OpinionCard.style.js	(revision 6221ab65b38aad2d2b041055cb1aa8825b624f00)
@@ -61,4 +61,5 @@
   &:hover {
     color: ${(props) => props.color};
+    cursor: pointer;
   }
 `;
Index: reactapp/src/Components/UserHeader.js
===================================================================
--- reactapp/src/Components/UserHeader.js	(revision 702ca779afcdb48bcc15202ffc07dfb4be2efebd)
+++ reactapp/src/Components/UserHeader.js	(revision 6221ab65b38aad2d2b041055cb1aa8825b624f00)
@@ -4,29 +4,6 @@
 import Logout from "./Logout";
 
-function UserHeader() {
-  const [user, setUser] = useState(null);
-  const [loaded, setLoaded] = useState(false);
-
-  useEffect(() => {
-    const fetchData = async () => {
-      try {
-        const response = await axios.get(
-          "http://192.168.0.17:8080/secure/currentUser",
-          { withCredentials: true }
-        );
-        var cyclicGraph = await response.data;
-        var jsogStructure = JSOG.encode(cyclicGraph);
-        cyclicGraph = JSOG.decode(jsogStructure);
-        setUser(cyclicGraph);
-        setLoaded(true);
-      } catch (error) {
-        console.log("Fetching error", error);
-      }
-    };
-
-    fetchData();
-  }, []);
-
-  return loaded ? (
+function UserHeader({ user, userLoaded }) {
+  return userLoaded ? (
     <div style={{ float: "left", marginTop: 20, marginLeft: 40 }}>
       Најавен/а: <a href="/user_dashboard">{user.username}</a> <Logout />{" "}
