Jump to content

Edit PHP calendar - html title attribute


JadWS

Recommended Posts

Hey there,

I have been looking around on stackoverflow and on google for a solution to my problem but always ran to one of the two problems, it's either not what I request or I could not apply it to my code. So long story short I have a web app that contains a calendar ( php calendar ) and I wish that once the admin hover over a certain number ( referring to a day of a month ) i'd fetch all transaction info from my db related to that date but if the user ( rank = 0 ) hover over a date he only fetches his own info from the db and then echo them as "title" attribute. In my limited knowledge of dynamic websites and ajax I can not figure out how to connect both the calendar date after fetching the hovered number and the info related to that date from my db. Hope it was clear enough and I'll provide you with all the code and db structure needed and hope you can help me through.

 

Transactions.php

  <! Calender to be added >
  <div class = "form-container">
    <div class = "form-group">
      <?php
        require 'calendar.php';
            $calendar = new Calendar();
            echo $calendar->show();
        ?>
    </div>
  </div>
  <! Calender end >

calendar.php :

<?php
class Calendar {

    /* Constructor */
    public function __construct(){
      $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
    }

    /********************* PROPERTY ********************/

    private $dayLabels = array("Mon","Tue","Wed","Thu","Fri","Sat","Sun");
    private $currentYear = 0;
    private $currentMonth = 0;
    private $currentDay = 0;
    private $currentDate = null;
    private $daysInMonth = 0;
    private $naviHref = null;

    /********************* PUBLIC **********************/

    /* print out the calendar */
    public function show() {

        $year  = null;
        $month = null;

        if ($year == null && isset($_GET['year'])) {
            $year = $_GET['year'];
        } else if($year == null) {
            $year = date("Y",time());
        }

        if ($month == null && isset($_GET['month'])) {
            $month = $_GET['month'];
        } else if($month == null) {
            $month = date("m", time());
        }

        $this->currentYear = $year;
        $this->currentMonth = $month;
        $this->daysInMonth = $this-> _daysInMonth($month,$year);

        $content = '<div id="calendar">'.
                        '<div class="box">'.
                          $this->_createNavi().
                        '</div>'.
                        '<div class="box-content" title = "'.$this->_daysInMonth($month,$year).'">'.
                                '<ul class="label">'.$this->_createLabels().'</ul>';
                                $content.='<div class="clear"></div>';
                                $content.='<ul class="dates">';
                                $weeksInMonth = $this->_weeksInMonth($month,$year);
                                // Create weeks in a month
                                for( $i=0; $i<$weeksInMonth; $i++ ){
                                    //Create days in a week
                                    for($j=1;$j<=7;$j++){
                                        $content.=$this->_showDay($i*7+$j);
                                    }
                                }
                                $content.= '</ul>';
                                $content.= '<div class="clear"></div>';
                        $content.= '</div>';
        $content.='</div>';
        return $content;
    }

    /********************* PRIVATE **********************/
    /**
    * create the li element for ul
    */
    private function _showDay($cellNumber){

        if($this->currentDay==0){

            $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01'));

            if(intval($cellNumber) == intval($firstDayOfTheWeek)){

                $this->currentDay=1;

            }
        }

        if( ($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth) ){

            $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay)));

            $cellContent = $this->currentDay;

            $this->currentDay++;

        }else{

            $this->currentDate =null;

            $cellContent=null;
        }


        return '<li id="li-'.$this->currentDate.'" class="'.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')).
                ($cellContent==null?'mask':'').'" onmousemove="printDate(this)">'.$cellContent.'</li>';
    }

    /**
    * create navigation
    */
    private function _createNavi(){

        $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;

        $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear;

        $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;

        $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear;

        return
            '<div class="header">'.
                '<a class="prev" href="'.$this->naviHref.'?month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">Prev</a>'.
                    '<span class="title">'.date('Y M',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
                '<a class="next" href="'.$this->naviHref.'?month='.sprintf("%02d", $nextMonth).'&year='.$nextYear.'">Next</a>'.
            '</div>';
    }

    /**
    * create calendar week labels
    */
    private function _createLabels(){

        $content='';

        foreach($this->dayLabels as $index=>$label){

            $content.='<li class="'.($label==6?'end title':'start title').' title">'.$label.'</li>';

        }

        return $content;
    }



    /**
    * calculate number of weeks in a particular month
    */
    private function _weeksInMonth($month=null,$year=null){

        if( null==($year) ) {
            $year =  date("Y",time());
        }

        if(null==($month)) {
            $month = date("m",time());
        }

        // find number of days in this month
        $daysInMonths = $this->_daysInMonth($month,$year);

        $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

        $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

        $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

        if($monthEndingDay<$monthStartDay){

            $numOfweeks++;

        }

        return $numOfweeks;
    }

    /**
    * calculate number of days in a particular month
    */
    private function _daysInMonth($month=null,$year=null){

        if(null==($year))
            $year =  date("Y",time());

        if(null==($month))
            $month = date("m",time());

        return date('t',strtotime($year.'-'.$month.'-01'));
    }

}

db structure : ( table : transactions )

|------------------------------------------------
|Column             |Type          |Null| Default
|-------------------------------------------------
|//**ID**//         |int(11)       |No  |
|ProductName        |varchar(250)  |No  |
|Price              |decimal(10,0) |No  |
|Currency           |varchar(250)  |No  |
|UserID             |int(11)       |No  |
|DateBought         |date          |No  |
|DateBoughtDetailed |time          |No  |
|MoneyHanded        |decimal(10,0) |No  |
|MoneyReceived      |decimal(10,0) |No  |
|Pending            |int(11)       |No  |

example data :

|----------------------------------------------------------------------------------------------------
|ID|ProductName|Price|Currency|UserID|DateBought|DateBoughtDetailed|MoneyHanded|MoneyReceived|Pending
|----------------------------------------------------------------------------------------------------
|1 |Labneh     |5000 |LBP     |1     |2017-02-27|18:27:54          |5000       |0            |0
|2 |Labneh     |5000 |LBP     |1     |2017-02-27|18:30:09          |5000       |0            |0
|3 |Laban      |5000 |LBP     |1     |2017-03-06|15:35:31          |150000     |145000       |0
|4 |Laban      |5000 |LBP     |1     |2017-03-06|15:36:00          |150000     |145000       |0
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.