Online Education Challenges
Online Education Challenges
BUILD OUT
A project report submitted for the partial fulfillment for the award of degree of
Submitted By
Assistant Professor,
PG Department of Computer Science
BONAFIDE CERTIFICATE
This is to certify that this project work entitled “HIRING PREDICTION TOOL” is a
award of degree of Master of Science (Information Technology) under our guidance and
My special thanks to all faculty members and staff members of PG Department of Computer
Science and Application for their support and encouragement for the successful completion
of the project.
I also thank my friends for providing moral support and timely help to finish the project.
I whole heartedly express my sincere thanks to my lovable parents and relatives who
encouraged me with moral and economic support.
ABSTRACT
The physical classroom learning nowadays is no longer applicable for the current younger
generations (Gen Y). Internet and distance learning which is generally known as online
education plays a vital roles in the country's education system. It is undeniable that online
education provides ample of benefits to young learners. Nevertheless, there are also many
negative implications from online education. Limited collaborative learning, increase in time
and effort are the several negative implications from online education. This study examines
the implications of online education among students especially in a private higher learning
institution and its effect towards Malaysian national education system. Information has been
collected through surveys, interviews and together with secondary data, and were analysed
using SPSS.
The studies found that there are various serious issues regarding online education and on its
effect on the quality of Malaysian Education System to certain extend. Several problems have
been identified and these issues have to be solved in order to sustain the quality of education
for future generations. Furthermore, Ministry of Higher Education (MOHE) should formulate
a standard policy, monitor closely the implementation of online education, evaluate and
review the method used in teaching and upgrade to maintain the quality of online education
in private higher education institution
INDEX
TITLE PAGE
S.NO
NO
INTRODUCTION
SYSTEM ANALYSIS
2 18
2.1 USE CASE DIAGRAM
SYSTEM DESIGN
3 29
3.1 CLASS DIAGRAM
4 SYSTEM IMPLEMENTATION
SYSTEM TESTING
5 35
5.1 UNIT TESTING
7. APPENDIX
CHAPTER 1
INTRODUCTION
Through its advanced technologies like automation and robotics, using simplified
design thinking models and placing students first, Banyanpro brings in a new way to learn,
practice & apply learning. Banyanpro has the necessary inbuilt tools that help everyone
involved. Ranging from yourself, your students as well as the IT department, all users can
access the portal with ease and convenience. Effective eLearning is what they promise.
Here’s how they do that.
COURSE MANAGEMENT
Tin Can API allows you to track the learning behavior of users. Curious to know how
your employees are learning on Compliance Policy.
Track individual learning behavior and verify their knowledge and skill on each topics
and sub-topics.
❖ Learning Paths
2
Add structure to your training programs by ability to control both the order and the
time-frame in which the courses become available to the learners.
❖ Learning Compliance
Complete control over the individuals or group learning progress and take corrective
measures based on learning compliance report.
LEARNING DELIVERY
❖ Digital Certificates
Design your own certificates that are issued for qualified learners for predefined
periods of time. You can use it for issuing certificate for completing compliance
training or any technical training.
❖ Digital Badges
Get recognition for learning and then share it on social media like Facebook, LinkedIn
or Twitter. A digital badge is an online representation of a skill you've earned and it
can't be duplicated.
❖ Blended Learning
Blend the online learning with traditional classroom methods by inviting learners
through video conference.
❖ Gamifications
Bring learning to life with Badges and Leader boards. Motivate your employees to
learn and earn points and compete with peers.
❖ Video Conferencing
Collaborate and learn with integrated video conference feature or customize based on
your requirement.
3
ASSESSMENT MANAGEMENT
❖ Question Bank
❖ Blooms Taxonomy
❖ Item Analysis
Assess the quality of each questions and it's options to improve the efficiency of your
Assessments.
❖ Invite
Invite candidates to assessments by sending unique link and allow them to take
assessments on their comfort anytime or anywhere.
❖ Web Proctoring
Ensure the authenticity of the test taker and prevent him/her from cheating by using
advanced Web proctoring features.
❖ Discussion Forum
Employees can teach each other, clarify assumptions and improve collaboration.
❖ Randomization
ENTERPRISE READY
Limit employee's access to certain features via custom user types or Roles.
❖ High Security
❖ Integrations
It's very simple to integrate Banyanpro with hundreds of other third-party web apps
like Slack, GitHub etc.
Banyanpro supports LDAP, SAML2 and Active directory to improve the user
experience.
❖ Branching
Group your learning environment to branches and each group is like a separate
department.
❖ API
An extensive list of Rest-API to communicate with other learning portal and get the
data you need.
❖ GDPR Compliant
Comply with GDPR with features that let you respect users’ privacy to collect
approval, exclude users who have opted out of data collection and allow users to self-
delete.
WHITE LABELLING
❖ Highly Customizable
Choose your own domain customize your emails templates based on your
organization needs.
❖ Themeable
Customize the look and feel of your portal by choosing color to match your
organization.
5
❖ Make it yours
Add your logo and favicon, change the colors, and create branded sign in page.
SYSTEM
❖ Responsive
❖ Multilingual
Banyanpro supports localization and internalization. You can configure your regional
languages based on your leaner preference.
❖ Infrastructure
Azure cloud blazing fast servers, improve the speed of delivery and availability.
❖ Web Standards
In a nutshell Banyanpro is
❖ Easy to use
Banyanpro is really easy to use. They built it to increase your satisfaction and fun from
personalized learning.
❖ Highly Customizable
Your own Banyanpro with custom domain, your logo and theme.
6
❖ 99.9% Availability
Banyanpro is cloud based so no need to install, update or backup any software or
hardware.
Assess your candidates’ skills and job fit with our proctored assessments. They offer General
Aptitude, Psychometric, Software Programming and Database to help you analyze the quality
of your candidates'. Pick your assessments and hire the best fit.
7
Choose our predefined assessments for the skills you need or add individual questions from
question bank to a new empty Assessment. You can also create your own custom question
bank and add questions to build an assessment tailored to your needs.
INVITE CANDIDATES -
Save time by inviting all your candidates to an assessment through one simple user interface.
Enter their email addresses or bulk upload, choose a deadline for an assessment, and hit the
invite button.
The Invited candidates will receive an email with a link to the online assessment. Candidates
take the assessment from the comfort of their homes at their convenience. Secure your online
exam with banyanpro.
8
All candidates will be sorted and graded into PASS or FAIL . They also provide a feature to
filter the candidates on various parameters and notify candidates by sending them pass or fail
emails. You can download and use the assessment report to ask the candidate for more details
during an interview.
ASSESSMENT TYPES
Assess candidates on Verbal, Non-Verbal, Logical, and IQ for multiple roles to ascertain their
analytical and problem-solving skills.
Programming -
Conduct online programming challenges on C, C++, JAVA, C#, Python, JavaScript and PHP.
Banyanpro supports 13 different programming languages to evaluate candidates hands-on
Technical, Logical and Problem-Solving skills.
Psychometric Test -
Evaluate candidates with Real projects which includes different layers, Front end, Business
Logic and Database programming. Banyanpro supports assessments for .NET Full stack, Java
Full Stack and MEAN Stack.
Personalized Learning
Every human is unique, need special care to provide learning experiences for reaching
individual achievements.
Power to Author
Learner Centric
• Learn by doing
• Encourage peer learning using collaboration power
• Improve learning engagement using Gamification elements
• Mobile friendly
• 24/7 support
• Helps you reach a mass audience
• Good customization features
FEATURES
10
Create courses from Video, Audio, PDF, and Documents. Curate course from any
multimedia elements like YouTube and Web Pages.
❖ Learning Paths -
Select the courses which you want to tied together for learners to progress through,
mastering a particular subject.
Assessments make it easy to ensure that the critical knowledge is properly delivered.
❖ Blended Learning -
❖ Learner Progress -
Enhance your brand by building a theme that conveys your own company personality and
style. Banyanpro lets you choose your theme by using a user-friendly interface.
LEARNING TYPES
❖ Bundle of Courses -
Starting learning for free with a wide range of free online courses covering different
subjects.
❖ Learning Paths -
11
Boost your skills. Stay sharp. Get ahead. A structured training programme of your
choosing, and dramatically reduce your time to learning proficiency.
❖ Cloud Labs -
Real cloud environments that help developers and IT professionals. Self-paced labs that
provide hands-on practice with Cloud technologies in a live environment.
TECHNOLOGIES
BanyanPro enables teams to assess candidates on the technologies listed below, with ease.
PROGRAMMING LANGUAGES
C
General-purpose, imperative computer programming language.
C++
Imperative, object-oriented and generic programming language.
C#
A simple, modern, general-purpose, object-oriented programming language by Microsoft.
PYTHON
General-purpose, high-level programming language.
12
JAVA
General-purpose, concurrent, class-based programming language.
PASCAL
Small, efficient language using structured programming and data structuring.
R
Statistical computing and graphics programming language.
PERL
Family of high-level, interpreted, dynamic programming languages.
JAVASCRIPT
Scripting language of the Web.
JQUERY
jQuery is a JavaScript library designed to simplify HTML DOM tree traversal and
manipulation.
SHELL
Computer program designed to be run by the Unix shell.
INFORMATICA
Data integration/ETL tool.
NODEJS
A cross-platform runtime environment for developing server-side web applications.
REACT
A JavaScript library to build user interfaces.
SELENIUM
Used for test automation only web applications.
UFT
HP Unified Functional Testing (UFT) / QTP.
DATABASES
ANSI SQL
Structured Programming Language for storing, manipulating and retrieving data in databases.
13
ORACLE
All Content · Database · Fusion Middleware · Enterprise Manager
MYSQL
RDBMS being used for developing various web-based software applications.
MS SQL SERVER
ORDBMS, platform dependent, both GUI and command-based software.
MONGODB
Database and leading NoSQL database. MongoDB is written in C++.
APPLICATION FRAMEWORKS
HTML5
HTML5 is the latest and most enhanced version of HTML.
CSS3
CSS3 is a latest standard of css earlier versions(CSS2).
ANGULAR
Super heroic JavaScript MVW framework.
To keep pace with ever-changing business demands Banyanpro uses Cloud Labs
HOW IT WORKS?
Banyanpro supports more than 50 technology labs, guided exercises and hands-on. Choose
the cloud lab and fly.
INVITE CANDIDATES -
Save time by inviting all your candidates to a assessment through one simple user Invite or
enrol the learners and assign chosen cloud lab.
You can track their progress and provide timely feedback for improvements.
• Scalable
Scalable to any enterprise size and easy integration with other Apps.
Pay as you go. No need to spend on infrastructure hence total cost savings.
• Fully secured
FEATURES
Upskill or Reskill your employees on the latest technologies with Banyanpro cloud labs.
Make your students industry ready by providing Banyanpro cloud labs on latest
technology stacks.
15
Nowadays, online learning turns out to be more and more practiced. Many traditional
universities started to share their courses online for free. It represents an easy and
comfortable method to achieve knowledge in almost every field, from law and accounting, to
human sciences, such as psychology and sociology or history. Online learning is a great
alternative to traditional universities, especially for people who can’t afford the time and
money to take real courses
• Registration is offered. Then a registered user logs into our web application
• Users can access the web application once they are verified by the admin
• Based on their role they will be taken to home page or admin page
• Users can post the contents, follow the skills, like, dislike and report the posts and
update their profile
• Admin can verify or delete the verification request from the users
• Admin will add the skills and bit titles, for the top most posts admin will provide
achievements
16
• Content writing
• Responsive design
17
1. Necessary resources – 1 Pc
2. Number of developers – 1
3. Required skills
a. Knowledge about HTML, CSS, JavaScript, ReactJs, NodeJS,ExpressJS and
MongoDB,
b. Microsoft Visual Studio code IDE
c. Post Man
d. MongoDB Atlas
4. Hardware requirements:
a. Intel® Pentium® or AMD processor, 2 GHz with MMX or equivalent
b. 4 GB RAM or more
c. 75 MB of available disk space or more
5. Environment and development tools required for the development process
a. Microsoft windows 7 or higher
b. Microsoft Visual Studio Code IDE
• RESTful Webservice
• JWT
• Git
• Nodemon
• Bootstrap
• Material -UI
• ExpressJS
When user selects to store details entered on client side (i.e. on DB) then the data is
saved in string format.
18
CHAPTER 2
SYSTEM ANALYSIS
Actor User
Actor User
19
Actor User
Actor User
Actor User
20
Actor User
Actor User
Actor User
Actor User
Basic Flow According to the page the user can search the posts and skills
Actor User
Actor User
Actor User
22
Actor User
Actor User
Actor User
Actor Candidate
Logout from the tool by clicking on Logout button from the profile
Basic Flow
dropdown icon.
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Basic Flow Gives achievements for the top posts of the day
Actor Admin
Actor Admin
25
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Actor Admin
Basic Flow Delete the questions and answers for the quiz
Actor Admin
CHAPTER 3
SYSTEM DESIGN
1. Post
2. Profile
3. Skill
4. Authorization
Post
Manages the posts that are posted by the users and they are accessed by other users for
flexible work that are liked disliked and reported by the users
Profile
The profile module represents the information of the user where they can store their
user information and it can also have a verification flag to identify their profile status. This
acts as a dashboard for the user and may have other smaller modules which serves their
purpose
Skill
Skills access the features based on user privileges. This module represents the
information of the skills and are subdivided into bit type contents
Authorization
Control access to features based on user privileges. Based on their privilege’s users
can access certain features. Only the authorized users can access those features.
32
CHAPTER 4
SYSTEM IMPLEMENTATION
Visual Studio Code is a source-code editor that can be used with a variety of programming
languages, including Java, JavaScript, Go, Node.js and C++.It is based on the Electron
framework, which is used to develop Node.js web apps that run on the Blink layout engine.
Visual Studio Code employs the same editor component (codenamed "Monaco") used in
Azure DevOps (formerly called Visual Studio Online and Visual Studio Team Services).
Visual Studio Code can be extended via extensions, available through a central repository.
This includes additions to the editor and language support. A notable feature is the ability to
create extensions that add support for new languages, themes, and debuggers, perform static
code analysis, and add code linters using the Language Server Protocol.
Visual Studio Code includes multiple extensions for FTP, allowing the software to be used as
a free alternative for web development. Code can be synced between the editor and the
server, without downloading any extra software.
Visual Studio Code allows users to set the code page in which the active document is saved,
the newline character, and the programming language of the active document. This allows it
to be used on any platform, in any locale, and for any given programming language.
33
NAVIGATION STRUCTURE
• Home
• User login
o Home page
o View detailed post
• Skill
o View all skills
▪ Follow and unfollow skills
• Admin login
o Admin page to take action on all verification requests and reports
o Admin views top posts
o Admin adds skill details and bit details
PRODUCT FEATURES
• Application installation is not required; users access the application on the web
• Updates and upgrades to newer versions are automatic
• Any computer with an Internet connection can become an access point to an
application, no matter what operating system is installed.
• The risk of viral infection is greatly decreased when running an application on the
web instead of an executable.
35
CHAPTER 5
SYSTEM TESTING
Feeding the system with all combinations of data should test all the calculations. For
valid data, programs should respond in the positive way and for invalid data programs
are to be created such that it catches the errors and shows the user.
The contact no: consists of ten digits including the special characters, so during
testing one should ensure that the programs do not accept anything other than the ten -
digit code for the employee no.
Another e.g. for valid and invalid data check is that, in case ten-digit no is entered
during the entry of transaction, and that number does not exist in the master file, or if
the number entered is an exit case, then the programs should not allow the entry of
such cases.
Thus, all conditions present in the program should be tested. Before
proceeding, one must make sure that all the programs are working independently.
Enter correct data It should let do the It will show the Pass
of all required field registration. message of
successful
registration.
3 Enter null in It will not give It will not show any Pass
Search Posts mandatory fields. any searched result.
result.
38
Enter correct data It should add the It will add the post Pass
of all required field. post successfully.
CHAPTER 6
CONCLUSION
While developing the system a conscious effort has been made to create and
develop a software package, making use of available tools, techniques and resources –
that would generate a proper System While making the system, an eye has been kept on
making it as user-friendly, as cost-effective and as flexible as possible. As such one may
hope that the system will be acceptable to any user and will adequately meet his/her
needs. As in case of any system development processes where there are a number of
shortcomings, there have been some shortcomings in the development of this system
also.
The purpose of the Build Out is achieved. By providing extremely rich and
minimalistic graphical user interface, web application is fast and in an aesthetic form.
Now User can enchance there skills by providing the content that may be useful for
others and the person who uploads it. This will also allow the candidates to upskill
themselves by finding out their weakness.
This tool is designed to work on any devices and the page is responsive to the size of
the display. Eye catching UI and sleek design gives a seamless user experience. Multiple
users can use the web application without sacrificing any performance is a major advantage.
Future Enhancements
BIBLIOGRAPHY
[3] Douglas Crockford. JavaScript: The good parts. O'Reilly Media, 2008
[4] Douglas Crockford. JavaScript: The world's most misunderstood programming language
has become the world's most popular programming
language. http://javascript.crockford.com/popular.html, 2008. Accessed May 24, 2008.
[5] ECMA. Standard ECMA-262, ECMAScript language specification, 3rd edition. ECMA
International, December 1999.http://www.ecma-
international.org/publications/standards/Ecma-262.htm ...
Home page
44
User-Posts page
48
Admin-Home page
</div>
</nav>
<div class="app-container">
<div className="admin-cards">
<span></span>
<div className="card-body">
<Carousel>
<Carousel.Item>
<a href="#react"><img
className="d-block w-100"
src="https://effectussoftware.com/blog/wp-content/uploads/2020/02/What-is-React-
JS.jpg"
alt="First slide"
/></a>
</Carousel.Item>
<Carousel.Item>
<a href="#java"><img
className="d-block w-100"
src="https://www.softzone.es/app/uploads-softzone.es/2020/09/Programar-Java.jpg"
alt="Second slide"
/></a>
</Carousel.Item>
<Carousel.Item>
<a href="#nodejs"><img
className="d-block w-100"
54
src="https://developers.redhat.com/sites/default/files/styles/article_feature/public/blog/2021/0
3/nodejs-reference-architecture_2x.png?itok=foFxRy8O"
alt="Third slide"
/></a>
</Carousel.Item>
<Carousel.Item>
<a href="#python"><img
className="d-block w-100"
src="https://content.techgig.com/thumb/msid-79386213,width-860,resizemode-4/5-
Myths-around-Python-programming-language-that-every-programmer-must-
know.jpg?88712"
alt="Fourth slide"
/></a>
</Carousel.Item>
<Carousel.Item>
<a href="#angular"><img
className="d-block w-100"
src="https://www.amarinfotech.com/wp-content/uploads/2020/01/Why-Angularjs-is-the-
best-front-end-framework.jpg"
alt="Fifth slide"
/></a>
</Carousel.Item>
</Carousel>
</div>
</div>
55
<div class="c-con">
<div class="c-card" id="react">
<div class="c-card-img">
<img className="d-block" src="https://effectussoftware.com/blog/wp-
content/uploads/2020/02/What-is-React-JS.jpg" alt="React"></img>
</div>
<div class="c-card-con">
<p>React (also known as React.js or ReactJS) is an open-source front-end
JavaScript library for building user interfaces or UI components. It is maintained by
Facebook and a community of individual developers and companies. React can be used as a
base in the development of single-page or mobile applications. However, React is only
concerned with state management and rendering that state to the DOM, so creating React
applications usually requires the use of additional libraries for routing, as well as certain
client-side functionality.</p>
<a href="https://reactjs.org/">React Tutorial</a>
<a href="https://reactjs.org/docs/getting-started.html">View Documentation</a>
</div>
</div>
<div class="c-card" id="java">
<div class="c-card-img">
<img className="d-block" src="https://www.softzone.es/app/uploads-
softzone.es/2020/09/Programar-Java.jpg" alt="Java"></img>
</div>
<div class="c-card-con">
<p>Java is a high-level, class-based, object-oriented programming language that is
designed to have as few implementation dependencies as possible. It is a general-purpose
programming language intended to let application developers write once, run anywhere
(WORA), meaning that compiled Java code can run on all platforms that support Java
without the need for recompilation. Java applications are typically compiled to bytecode that
can run on any Java virtual machine (JVM) regardless of the underlying computer
architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities
than either of them.</p>
<a href="https://www.oracle.com/java/technologies/">Java Tutorial</a>
<a href="https://www.oracle.com/java/technologies/">View Documentation</a>
</div>
</div>
56
<div class="c-card-img">
<img
className="d-block"
src="https://www.amarinfotech.com/wp-content/uploads/2020/01/Why-Angularjs-is-the-
best-front-end-framework.jpg"
alt="Angular"
/>
</div>
<div class="c-card-con">
<p>AngularJS is used as the frontend of the MEAN stack, consisting of MongoDB
database, Express.js web application server framework, AngularJS itself (or Angular), and
Node.js server runtime environment.</p>
<a href="https://angularjs.org/">Angular Tutorial</a>
<a href="https://angularjs.org/">View Documentation</a>
</div>
</div>
</div>
</div>
</div>
<footer class="c-footer">
<div class="c-inner">
Copyright BuildOut. All rights reserved. For internal use only.
</div>
</footer>
</div>
)
}
export default New
58
User Register.js
const[name,setName]=useState('');
const[email,setEmail]=useState('');
const[phoneNo,setphoneNo]=useState('');
const[passwordd,setPassword]=useState('');
// const[errors,setErrors]=useState({})
function validateForm() {
if(!name)
return("Name Required")
}
function ValidateEmail()
{
if (!email)
{
return ("Email Required")
}
59
else if (!/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-
]+)*$/.test(email))
{
return("Invalid Email")
}
}
function validatephoneno(){
if(!phoneNo)
{
return("Phone No Required")
}
else if(!/^\d{10}$/.test(phoneNo)){
return("Number Should Be Greater Than 10")
}
}
function validatepassword(){
if(!passwordd){
return("Password Required")
}
else if(!/^(?=.*[0-9])(?=.*[!@#$%^&*])[a-zA-Z0-9!@#$%^&*]{7,15}$/.test(passwordd))
{
return("password should have one uppercase,number and special character ")
}
}
const submit=(a,c,d,e)=>{
const register={
user_name:a,
email_id:c,
phoneNo:d,
password:e,
60
}
Axios.post('http://localhost:8000/users/addUser',register)
.then((res)=>{ console.log(res.data)
alert(res.data.message)
return Axios.post('http://localhost:8000/verify/verification',{
user_id:res.data.data._id,
})
.then((res)=>{
console.log(res.data) })
.catch((e)=>console.log(e))
})
.catch((e)=>{alert(e.message)})
console.log(register)
}
const handlesubmit=(e)=>{
e.preventDefault()
}
return (
<div class="wrapper">
<nav className='navbars'>
<Link to='/navbar/home' className='navbar-links'>
BUILD OUT
<i class='fab fa-firstdraft' />
</Link>
<div class="topbar-items">
<ul className="navbar-menu">
61
<li className="navbar-item">
<Link to='/login' className='navbar-links'>
Login
</Link>
</li>
<li className="navbar-item">
<Link to='/Register' className='navbar-links'>
Register
</Link>
</li>
</ul>
</div>
</nav>
<div class="app-container bit-container">
<div class="admin-cards reg-form">
<span></span>
<div class="card-body">
<div className="form-inputs">
<label htmlFor="email" className="form-label"> Email</label>
<input type="email" name='email'placeholder=" Enter Your EMAIL"
className="form-control " onChange={(e)=>setEmail(e.target.value)} />
62
{ValidateEmail()}
</div>
<div className="form-inputs">
<label htmlFor="phone NO" className="form-label"> Phone NO:</label>
<input type="text"name='phoneNo' placeholder=" Enter Your PHONE NO"
className="form-control"onChange={(e)=>setphoneNo(e.target.value)} maxLength='10'/>
{validatephoneno()}
</div>
<div className="form-inputs">
<label htmlFor="password" className="form-label"> Password</label>
<input type="password" name='password'placeholder=" Enter Your
PASSWORD" className="form-control"onChange={(e)=>setPassword(e.target.value)}/>
{validatepassword()}
</div>
<div class="reg-button">
<a className="login"
onClick={()=>{submit(name,email,phoneNo,passwordd);props.history.goBack()}}
disabled={validateForm()}>Register </a>
</div>
</form>
</div>
</div>
</div>
<footer class="c-footer">
<div class="c-inner">
Copyright BuildOut. All rights reserved. For internal use only.
</div>
</footer>
</div>
63
)
}
export default Register
User login.js
return (
<div class="wrapper">
<nav className='navbars'>
<Link to='/navbar/home' className='navbar-links'>
BUILD OUT
<i class='fab fa-firstdraft' />
</Link>
<div class="topbar-items">
<ul className="navbar-menu">
64
<li className="navbar-item">
<Link to='/login' className='navbar-links'>
Login
</Link>
</li>
<li className="navbar-item">
<Link to='/Register' className='navbar-links'>
Register
</Link>
</li>
</ul>
</div>
</nav>
<div class="card-body">
<form class="login-form form-group">
<h3>Login</h3>
<div className="login-inputs" >
<label htmlFor="email" className="form-label" > Email</label>
<input type="email" name='email' placeholder=" Enter Your Email"
className="form-control" onChange={(e)=>setEmail_id(e.target.value)}/>
</div>
<div className="login-inputs">
<label htmlFor="password" className="form-label" > Password</label>
<input type="password" name='password' placeholder=" Enter Your Password"
className="form-control" onChange={(e)=>setPassword(e.target.value)}/>
</div>
<div class="login-button">
<a class="login"
onClick={()=>{
dispatch(login(email_id,password))
}
} > Login</a>
<Link class="login" to='/loginotp'>Login with otp </Link>
</div>
</form>
</div>
</div>
</div>
<footer class="c-footer">
<div class="c-inner">
Copyright BuildOut. All rights reserved. For internal use only.
66
</div>
</footer>
</div>
)
}
Post.js
const dispatch=useDispatch();
const user = useSelector(state => state.user.user)
console.log(user)
const Display = useSelector(state => state.display.display)
console.log(Display)
67
return (
<div class="row">
{Display.map(e=>id === e.skill._id ?
<div className="col-xl-12 col-lg-12 col-12">
<div className="admin-cards">
<span></span>
<div className="card-head">
<Avatar alt={"title"} src={e.skill.photo} />
<div className="card-head-in">
<div className="card-head-name">
<h5>{e.skill.Title}</h5>
<div class="name">
{e.user.user_name}
</div>
</div>
</div>
</div>
<div className="card-body">
<div className="card-body-in">
<strong> Title:</strong> {e.bit.title}
</div>
<div className="card-body-in">
<strong> Content:</strong>{e.content}
</div>
<div className="card-foot">
<ThumbUpAltIcon className={e.like.includes(user._id)?"like_icon":"like_icons"}
onClick={()=>{dispatch(like(e._id,user._id));}} size={100}/>{e.like.length}
68
<ThumbDownIcon
className={e.dislike.includes(user._id)?"dislike_icon":"dislike_icons"}
onClick={()=>{dispatch(dislike(e._id,user._id))}} size={100}/>{e.dislike.length}
<div class="d-flex flex-fill align-items-center justify-content-center">
<div className="link">
<Link to={{pathname:'/navbar/postDetails',state:e}} >View</Link>
</div>
<div class="link">
<Link to={{pathname:'/navbar/quiz',state:e.bit._id}}>Attend Quiz </Link>
</div>
</div>
<div className="warning">
</div>
)
}
Styles.css
.app-container {
min-height: calc(100vh - calc(4.5rem + 2.5rem));
padding: 2rem;
}
@media (min-width: 1280px) {
.admin-home-cards {
margin: 0 12rem;
}
}
/* .admin-home-cards{
display:flex;
flex-direction: column;
} */
.admin-home-cards {
display: flex;
flex-direction: column;
position: relative;
}
.admin-cards {
display: flex;
flex-direction: column;
margin-bottom: 3rem;
/* box-shadow: 10px 10px 10px rgb(0 0 0 / 20%); */
border-radius: 0.75rem;
background: transparent;
border: 2px solid #2bae66ff;
70
color: #000;
width: 100%;
transition: 0.5s;
position: relative;
}
.admin-cards:hover {
transform: translateY(-20px);
}
/* .admin-cards:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 0.75rem;
background: linear-gradient(45deg, #ffbc00, #ff0058);
}
.admin-cards:after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #00d0ff;
filter: blur(10px);
} */
.skill_name a {
color: #000;
71
text-transform: capitalize;
cursor: pointer;
}
.skill_name a:hover {
text-decoration: none;
color: #2bae66ff;
}
.admin-warning {
justify-content: flex-end;
display: flex;
flex: 1;
}
/* .admin-cards span {
position: absolute;
top: 2px;
left: 2px;
right: 2px;
bottom: 2px;
z-index: 2;
background: #000;
border-radius: 0.75rem;
} */
.admin-cards .card-head {
position: relative;
z-index: 10;
border-radius: 0.75rem 0.75rem 0 0;
display: flex;
align-items: center;
72
justify-content: flex-start;
padding: 0.5rem;
color: #fff;
/* border-bottom: 2px solid #15f4ee; */
background: #2bae66ff;
}
.admin-cards .card-head-in {
display: flex;
margin-left: 1rem;
justify-content: space-between;
align-items: center;
flex: 1;
color: white;
}
.card-head-name {
flex: 1;
padding-left: 1rem;
}
.card-head-name .name {
margin-left: 1rem;
}
.admin-cards .card-body {
padding: 1rem;
position: relative;
z-index: 10;
}
.admin-cards .card-body-in {
margin-bottom: 0.5rem;
display: -webkit-box;
73
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.admin-cards .card-foot {
display: flex;
align-items: flex-start;
margin-top: 2rem;
margin-bottom:1rem;
margin-right:1rem;
}
.card-foot .warning {
justify-content: flex-end;
display: flex;
}
.card-foot .link {
display: flex;
align-items: center;
justify-content: center;
margin-left: 1rem;
}
.card-foot .link a {
color: #000;
border: 2px solid #2bae66ff;
border-radius: 0.5rem;
text-decoration: none;
padding: 0 1rem;
font-weight: 500;
transition: 0.5s;
}
74
.like_icon,
.dislike_icon {
margin-right: 2px;
}
.dislike_icon {
margin-left: 1rem;
}
/* Skill page */
.card-head-in .title {
color: white;
font-size: 1rem;
font-weight: 600;
text-decoration: none;
}
.col-2 {
display: flex;
}
.card-body p {
font-size: 1rem;
margin-left: 1rem;
}
.skill-card-foot {
display: flex;
padding: 0 1rem 1rem;
flex: 1;
align-items: flex-end;
}
75
.skill-card-foot .skill-button {
flex: 1;
}
.skill-card-foot.home-skill-button .skill-button {
flex: 0 0;
color: #000;
border: 2px solid #2bae66ff;
border-radius: 0.5rem;
padding: 0.5rem 1rem;
font-weight: 600;
text-transform: capitalize;
text-decoration: none;
cursor: pointer;
display: flex;
justify-content: center;
}
.skill-card-foot.home-skill-button {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
}
.skill-button a {
padding: 0.25rem 1rem;
background: transparent;
text-transform: uppercase;
cursor: pointer;
color: #000;
border: 2px solid #2bae66ff;
border-radius: 1rem;
76
font-weight: 600;
}
.add-skill {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.add-skill .add-skill-box {
box-shadow: 1px 1px 6px 2px #2bae66ff;
padding: 3rem;
color: #000;
font-size: 1.25rem;
font-weight: 600;
}
.skill-title,
.skill-file,
.skill-text {
margin-bottom: 1rem;
}
.skill-button {
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
}
.skill-button a:hover {
/* box-shadow: 0 5px 10px 0 #15f4ee inset, 0 5px 10px 0 #15f4ee,
0 5px 10px 0 #15f4ee inset, 0 5px 10px 0 #15f4ee; */
77
text-decoration: none;
}
/* Editbit */
.app-container.bit-container {
display: flex;
align-items: center;
justify-content: center;
}
.bit-card {
padding: 2rem;
position: relative;
display: flex;
flex-direction: column;
border: 2px solid #2bae66ff;
border-radius: 0.5rem;
justify-content: center;
align-self: center;
}
.bit-card .bit-card-in {
margin-bottom: 1rem;
background: transparent;
color: #000;
border: 2px solid #2bae66ff;
border-radius: 0.5rem;
padding: 1rem;
display: flex;
text-transform: capitalize;
min-width: 20rem;
}
78
.admin-cards.add-post {
width: auto;
padding: 2rem;
}
.margin-left {
margin-left: 1rem;
}
.mt-3 {
margin-top: 1rem;
}
.add-post-select {
display: flex;
margin-bottom: 1rem;
}
.addpost-text {
margin-bottom: 2rem;
}
.bit-icons {
display: flex;
flex: 1;
align-items: center;
justify-content: flex-end;
}
.edit-icon {
margin-right: 1rem;
}
.bit {
margin-top: 1rem;
79
/* navbar */
nav {
background: #2bae66ff;
height: 4.5rem;
display: flex;
align-items: center;
font-size: 1.2rem;
padding: 1rem;
border-bottom: 2px solid #2bae66ff;
position: sticky;
z-index: 999;
top: 0;
font-family: sans-serif;
}
nav .navbar-links {
color: #fff;
font-size: 30px;
text-decoration: none;
padding: 0.5rem 1rem;
margin: 1rem 1rem;
}
nav ul .navbar-links {
color: #fff;
font-size: 18px;
text-decoration: none;
padding: 0.5rem 1rem;
font-family: poppins;
border-radius: 10px;
80
.navbar-item .navbar-search {
border: 2px solid #15f4ee;
}
.navbar-item {
color: #fff;
}
.makeStyles-searchIcon-3 {
color: #fff;
}
.MuiInputBase-root {
border: 2px solid #fff;
border-radius: 0.5rem;
box-shadow: 5px 5px 56px #fff;
}
.navbard-item.profile-item svg {
width: 2em;
height: 2em;
}
.wrapper {
background-color: #fff;
81
/* post details */
.post-img {
height: 30px;
}
.card-head img {
height: 4rem;
width: auto;
}
.card-foot-in {
display: flex;
flex: 1;
padding-left: 2rem;
}
/* profile */
.profile {
display: flex;
justify-content: center;
align-items: center;
height: auto;
color: #000;
text-decoration: none;
font-size: 1.25rem;
font-weight: 500;
/* border:2px solid #15f4ee;
border-radius: .5rem; */
}
.profile:hover {
82
text-decoration: none;
color: #000;
}
.profile-card {
border: 2px solid #2bae66ff;
padding: 0.25rem 1rem;
margin-bottom: 0.5rem;
border-radius: 3rem;
display: flex;
align-items: center;
justify-content: flex-start;
min-width: 10rem;
margin-right: 1rem;
}
.skill-button.postdetail-btn {
margin-top: 3rem;
color: black;
}
.postdetail-btn a {
color: black;
}
.profile-skills {
position: relative;
display: flex;
flex: 1;
align-items: center;
flex-wrap: nowrap;
}
.profile-follow {
min-height: 20rem;
83
}
.skill_name {
color: black;
display: flex;
align-items: center;
justify-content: space-between;
flex: 1;
}
/* login */
.login-page {
width: auto;
}
.login-form {
margin: 3rem;
color: #000;
}
.form-label {
color: #000;
}
.login-button {
margin-top: 1rem;
}
.login {
padding: 0.25rem 1rem;
border: 2px solid #2bae66ff;
border-radius: 0.5rem;
color: #000;
font-weight: 600;
font-size: large;
cursor: pointer;
84
}
.login:last-child {
margin-left: 1rem;
}
.login:hover {
text-decoration: none;
color: #000;
}
.form-control:hover {
box-shadow: 1px 2px 30px #fff;
}
.reg-form {
width: 50%;
padding: 3rem;
}
.card-body h3 {
text-align: center;
}
.reg-button {
display: flex;
align-items: center;
justify-content: center;
margin-top: 1rem;
}
.carousel-control-prev,
.carousel-control-next {
top: 50%;
85
.app-container.post-con {
display: flex;
}
.reports .card-body h2 {
text-align: center;
border-bottom: 2px solid #15f4ee;
padding: 1rem;
}
.reports .card-body {
padding: 0;
}
.report-body {
margin: 0 1rem;
border-bottom: 1px solid #ccc;
padding: 1rem 0;
}
.report-body .icon {
flex: 1;
display: flex;
justify-content: flex-end;
}
.Quiz {
background-color: #fff;
padding: 1rem 1.125rem;
box-shadow: 0 1px 5px rgb(158 164 186 / 20%);
border-radius: 0.375rem;
margin-bottom: 1rem;
border: 1px solid #000;
}
87
.quiz-button {
margin-top: 2rem;
}
.quiz-btn {
margin-right: 1rem;
}
.create__icon {
margin-left: 0;
}
88
BackEnd
const express = require('express');
const {checkPermission}=require('../Middleware/permission')
const router =express.Router();
await newskill.save()
.then((e)=>res.status(201).send({data:e}))
}
catch (err) {
res.status(404).send({err:"invalid data"});
}
});
// router.post('/adduser',async(req,res)=>{
// try{
// const adduse= new Skill.find({});
// }
// })
89
try {
const skill = await Skill.find({});
res.send(skill);
} catch (error) {
res.status(404).send({ error: 'Path not found' });
}
});
try {
const skill = await Skill.findById({_id:req.body._id});
res.send(skill);
console.log(skill);
} catch (error) {
res.status(404).send({ error: 'Path not found' });
}
});
catch (error) {
res.status(500).send({ error: 'bit not found' });
}
});
// skill id to count to bits presented
router.post('/count',checkPermission(),async (req,res)=>{
try{
const skill=await Bit.find({skill_id:req.body.skill_id});
const count=skill.length;
console.log(count);
res.status(200).send({"Total Skill Bits":count})
}
catch (error) {
res.status(500).send({ error: 'skill not found' });
}
});
router.post('/newuser',checkPermission(),async (req,res)=>{
try{
const user=await Skill.find({user_id:req.body.user_id});
const userdetails= user.map((e)=>{
return{
user_id:e._id,
title:e.Title,
Description:e.Description
91
}
})
res.status(200).send({"user":userdetails})
}
catch (error) {
res.status(500).send({ error: 'user not found' });
}
});
router.post('/getskill',checkPermission(),async (req,res)=>{
try{
const user=await Skill.find({followers:req.body.user_id})
console.log(user);
const skill=user.map((e)=>{
return{
Title:e.Title
}
})
res.send(skill)
}
catch (error) {
res.status(500).send({error:'error message'})
}
});
router.post('/userskills',checkPermission(),async (req,res)=>{
try{
const skill=await Skill.find({followers:req.body.user_id});
const skilldetails= skill.map((e)=>{
92
return{
user_id:e.user_id,
skill_id:e._id,
title:e.Title,
Description:e.Description,
photo:e.photo
}
})
res.status(200).send({"skills":skilldetails})
console.log(skill)
}
catch (error) {
res.status(500).send({ error: 'skill not found' });
}
});
router.get('/allusers',checkPermission(),(req,res)=>{
Skill.find()
.populate("followers","_id user_name")
.then((skills)=>{
res.send(skills)
}).catch(err=>{
console.log(err)
})
})
router.get('/userskills',checkPermission(),(req,res)=>{
Skill.find({followers:req.body._id})
.populate("followers")
93
.then((skills)=>{
res.send(skills.followers)
}).catch(err=>{
console.log(err)
res.status(404).send({message:"not followed any skill"})
})
})
//delete a skill
router.delete('/deleteskill/:id',checkPermission(), async (req, res) => {
try {
const skill = await Skill.findById(req.params.id);
if (!skill) {
return res.status(404).send({ error: 'skill not found' });
}
skill.remove()
res.send(skill);
} catch (error) {
res.status(500).send({ error: 'Internal server error' });
}
});
router.post('/follow',checkPermission(),async(req,res)=>{
const skill = await Skill.findOne({ _id:req.body._id});
console.log(skill)
const user = req.body.user_id
console.log(user)
const follow = skill.followers.includes(user)
94
console.log(follow);
if (follow === true) {
skill.followers.remove(user)
}
else{
skill.followers.push(user)
}
try {
await skill.save();
res.status(201).send(skill);
} catch (err) {
res.status(500).send("invalid skill")
}})
if (!isValidOperation) {
return res.status(400).send({ error: 'Invalid Operation' });
}
try {
95
});
module.exports = router