<?php
require_once('connection.php');



if(!isset($_SESSION)) 
    { 
   session_start();
	}
   //include('wellcome.php');
	if(!empty($_SESSION['UserId'])){
?>
<html>

<head>
     <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">

	<title>Power Links Ctg</title>

  <!-- Bootstrap CSS CDN -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <!-- Our Custom CSS -->

  <!-- Scrollbar Custom CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.css">
  
  


    

    <!-- Bootstrap Core CSS -->
    <link href="css/bootstrap.min.css" rel="stylesheet">
	

    <!-- MetisMenu CSS -->
    <link href="css/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">

    <!-- DataTables CSS -->
    <link href="css/plugins/dataTables.bootstrap.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/sb-admin-2.css" rel="stylesheet">
    <link href="css/custom.css" rel="stylesheet">
    <link href="js/plugins/fullcalender/fullcalendar.css" rel="stylesheet">

     <!-- Datepicker CSS -->
     <link href="css/datepicker.css" rel="stylesheet">

    <!-- Morris Charts CSS -->
    <link href="css/plugins/morris.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="font-awesome-4.1.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

     <script src="js/jquery-1.11.0.js"></script>
     <script src="js/plugins/metisMenu/metisMenu.js"></script>
	 <style>
	 
  
  <style>
      @import "https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700";
    body {
      font-family: 'Poppins', sans-serif;
      background: #fafafa;
    }
    
    p {
      font-family: 'Poppins', sans-serif;
      font-size: 1.1em;
      font-weight: 300;
      line-height: 1.7em;
      color: #999;
    }
    
    a,
    a:hover,
    a:focus {
      color: inherit;
      text-decoration: none;
      transition: all 0.3s;
    }
    
    .navbar {
      padding: 15px 10px;
      background: #fff;
      border: none;
      border-radius: 0;
      margin-bottom: 40px;
      box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
    }
    
    .navbar-btn {
      box-shadow: none;
      outline: none !important;
      border: none;
    }
    
    .line {
      width: 100%;
      height: 1px;
      border-bottom: 1px dashed #ddd;
      margin: 40px 0;
    }
    /* ---------------------------------------------------
    SIDEBAR STYLE
----------------------------------------------------- */
    
    #sidebar {
      width: 250px;
      position: fixed;
      top: 0;
      left: 0;
      height: 100vh;
      z-index: 999;
      
      color: #fff !important;
      transition: all 0.3s;
    }
    #sidebar {
    
    border-radius: 10px;
   
    
    background: #9152f8;
    background: -webkit-linear-gradient(top, #7579ff, #b224ef);
    background: -o-linear-gradient(top, #7579ff, #b224ef);
    background: -moz-linear-gradient(top, #7579ff, #b224ef);
    background: linear-gradient(top, #7579ff, #b224ef);
}
    
    #sidebar.active {
      margin-left: -250px;
    }
    
    #sidebar .sidebar-header {
      padding: 5px;
	   width: 250px;
	   height: 80px;
      background: green;
    }
    
    #sidebar ul.components {
      padding: 20px 0;
      border-bottom: 1px solid #47748b;
    }
    
    #sidebar ul p {
      color: #fff;
      padding: 10px;
    }
    
    #sidebar ul li a {
      padding: 10px;
      font-size: 1.1em;
      display: block;
      color:white;
    }
	
	
	   #sidebar ul li i {
  
      color:#008000;
	
    }
    
    #sidebar ul li a:hover {
      color: #7386D5;
      background: #fff;
    }
    
    #sidebar ul li.active>a,
    a[aria-expanded="true"] {
      color: #fff;
      background: #6d7fcc;
    }
    
    a[data-toggle="collapse"] {
      position: relative;
    }
    
    a[aria-expanded="false"]::before,
    a[aria-expanded="true"]::before {
      content: '\e259';
      display: block;
      position: absolute;
      right: 20px;
      font-family: 'Glyphicons Halflings';
      font-size: 0.6em;
    }
    
    a[aria-expanded="true"]::before {
      content: '\e260';
    }
    
    ul ul a {
      font-size: 0.9em !important;
      padding-left: 30px !important;
      background: #6d7fcc;
    }
    
	
	
    ul.CTAs {
      padding: 20px;
    }
    
    ul.CTAs a {
      text-align: center;
      font-size: 0.9em !important;
      display: block;
      border-radius: 5px;
      margin-bottom: 5px;
    }
    
    a.download {
      background: #fff;
      color: #7386D5;
    }
    
    a.article,
    a.article:hover {
      background: #6d7fcc !important;
      color: #fff !important;
    }
    /* ---------------------------------------------------
    CONTENT STYLE
----------------------------------------------------- */
    
    #content {
      width: calc(100% - 250px);
      padding: 30px;
      min-height: 20vh;
      transition: all 0.3s;
      position: absolute;
      top: 0;
      right: 0;
    }

    
    #content.active {
      width: 100%;
    }
    /* ---------------------------------------------------
    MEDIAQUERIES
----------------------------------------------------- */
    
    @media (max-width: 800px) {
      #sidebar {
        margin-left: -250px;
      }
      #sidebar.active {
        margin-left: 0;
      }
      #content {
        width: 100%;
      }
      #content.active {
        width: calc(100% - 250px);
      }
      #sidebarCollapse span {
        display: none;
      }
    }
  
  </style>
  
  

</head>

<body>




  <div class="wrapper">
    <!-- Sidebar Holder -->


	
    <nav id="sidebar">
	
	
      <div class="sidebar-header">
        <h3><a href="index.php"><span style="color:LightGoldenRodYellow ">POWER LINKS CTG<span></a> 

        </h3>

<button type="button" id="sidebarCollapse" class="btn btn-info navbar-btn" style= "margin-left: 250px; margin-top: -70px;">
        <i class="glyphicon glyphicon-align-left"></i>
        <span>X</span>
        </button>
        <button class="btn btn-primary submit-btn btn-rounded" style= "margin-left: 400px; margin-top: -70px;" ><i class="fa fa-home"></i> <a href="index.php"> Front Page</a></button>
        
        
      </div>
	  
	  <ul class="nav navbar-top-links navbar-right">
                <li>
                     <?php $sqli=$conn->query("Select * from user WHERE UserId='" . $_SESSION['UserId'] . "'");
        foreach ($sqli as $key => $user) {
  ?>
<td>
Well Come 
	 <?php echo $user["FirstName"]; ?> </br> BY <?php echo $user["CompanyName"]; ?>
	</td>
		<?php } ?>

			<li class="dropdown">
                    <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                        <i class="fa fa-user fa-fw"></i>  <i class="fa fa-caret-down"></i>
                    </a>
					
                    <ul class="dropdown-menu dropdown-user">
                      
                        <li class="divider"></li>
                        <li>
							<a href="logout.php">Logout</a>
                        </li>

                    </ul>
                    <!-- /.dropdown-user -->
                </li>

        </li>
	  
                </li>
                
               
                
            
                <!-- /.dropdown -->
            </ul>
 
	  

      <ul class="list-unstyled components">
	  
	  <ul class="nav navbar-top-links navbar-center">
  
	   </ul>
	   
        <li>
          <a href="home.php"><i class="glyphicon glyphicon-home"></i> </i>Home/হোম </a>

        </li>
        <li>
          <a href="displayproject.php"><i class="fa fa-university "></i> Project </br>প্রজেক্ট তালিকা </a>


        </li>
        <li>
          <a href="project_transations.php"><i class="fa fa-university "></i><i class="fa fa-money " style="padding-left: 100px;"></i></i></br>Add Project Payment</br>টাকা নেওয়া যোগ করুন</a>
        </li>
        <li>
          <a href="Employeedisplay.php"><i class="fa fa-users "></i>Employee</br>কর্মচারী তালিকা </a>
        </li>
        <li>
          <a href="EmployeeSalary.php"><i class="fa fa-users "></i><i class="fa fa-money " style="padding-left: 100px;"></i></i></br>EmployeeSalary</br>কর্মচারী হাজিরা </a>
        </li>


 
		
		 <li>
          <a href="Expense.php">Expense/খরচ </a>
        </li>
        
        		 <li>
          <a href="userp.php">User Profile</a>
        </li>

      </ul>
	  
	      <div id="footer-sec" style=" ">
        
<a href="https:powerlinksctg.com" target="_blank" style="padding-left: 50px;">| Powerlinksctg |</a></br>
 Developed By : Kaisar Hossain </br>
<a href="https://www.facebook.com/Powerlinksctgbd" target="_blank" style="padding-left: 50px;">| Facebook |</a>
</div>

    </nav>



    </div>
  

  <!-- jQuery CDN -->
  <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
  <!-- Bootstrap Js CDN -->
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <!-- jQuery Custom Scroller CDN -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js"></script>


</body>

</html>
  <script type="text/javascript">
    $(document).ready(function() {


      $('#sidebarCollapse').on('click', function() {
        $('#sidebar, #content').toggleClass('active');
        $('.collapse.in').toggleClass('in');
        $('a[aria-expanded=true]').attr('aria-expanded', 'false');
      });
    });
	
	function openNav() {
  document.getElementById("sidebar").style.width = "250px";
  document.getElementById("sidebarCollapse").style.marginLeft = "250px";
}


	
  </script>
<?php
	}else{
		header("location:login.php");
	}

?>  
