My Problem: Some agents are being used up to four times while other agents are only be assigned once in the entire month.
Details about the problem: I am trying to use two arrays to contain who has been used and how many times. $arrMAX[] contains information about how many times an agent has been used. $maxuse is the variable that dictates the max number of uses per agent in each month. $used[] is the array that contains which agents have been used.
Code: Select all
<?
$con=mysql_connect('LOCALHOST','MY.ROOT.USER','MY.ROOT.PASSWORD');
if (!$con){
die('Could not connect: ' . mysql_error());
}
mysql_select_db("MYAGENT.TABLE", $con);
session_start();
//TODAY'S DATE
$start = date("Y-m-d");
$startY = date("Y");
$startm =date("m");
$startd =date("d");
$nextM=$startm+1;
function leapYear($year){
if ($year % 400 == 0 || ($year % 4 == 0 && $year % 100 != 0)) return TRUE;
return FALSE;
}
function daysInMonth($month = 0, $year = ''){
$days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$d = array("Jan" => 31, "Feb" => 28, "Mar" => 31, "Apr" => 30, "May" => 31, "Jun" => 30, "Jul" => 31, "Aug" => 31, "Sept" => 30, "Oct" => 31, "Nov" => 30, "Dec" => 31);
if(!is_numeric($year) || strlen($year) != 4) $year = date('Y');
if($month == 2 || $month == 'Feb'){
if(leapYear($year)) return 29;
}
if(is_numeric($month)){
if($month < 1 || $month > 12) return 0;
else return $days_in_month[$month - 1];
}
else{
if(in_array($month, array_keys($d))) return $d[$month];
else return 0;
}
}
//Max days in next month
$maxdays =daysInMonth(02, $startY);
echo 'Number of days in next month: '.$maxdays.'<p>';
$daycount=1;
//Max number of times each agent can be used for month
$maxuse=(($maxdays*2)-4)/22;
$maxuse=ceil($maxuse);
$arrMAX["first"]=1;
echo 'Maxuse Per Agent Next Month: '.$maxuse.'<p>';
echo 'We are now trying to start generating a schedule';
for ($daycount; $daycount <= $maxdays; $daycount++) {
$next = date('Y-m-d', mktime(0, 0, 0, $nextM, $daycount, $startY));
$daytext=date('l', strtotime($next));
If ($daytext=="Sunday"){
$preexist=mysql_query('SELECT `start_date` FROM `event_schedules` where `start_date`=\''.$next.'\'');
while($checkexistance = mysql_fetch_array($preexist)){
$exist=true;
}
if ($exist){
unset($exist);
echo 'Date already exist: '.$next;
} else {
echo '<div style="background-color:lightgreen"><hr><h3>'.$daytext.'</h3>';
echo '<p>Day '.$daycount.'</div>';
echo 'Looking to insert into date: '.$next.'<p>';
//Select RANDOM EVENT (AGENT) TO ASSIGN TO DAY
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `event_categories_events` WHERE event_category_id = '2' ") or die(mysql_error());
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$floor_events = mysql_query( " SELECT * FROM `event_categories_events` WHERE event_category_id = '2' LIMIT $offset, 1 " );
//Grab Random Event from All Events (Agents) Assigned To The Floor Schedule Category
while($grabFloorEvent = mysql_fetch_array($floor_events)){
//For every event id we grab, grab the event (agent) details.
$agent=$grabFloorEvent['event_id'];
unset($used);
$used= array();
if ($arrMAX[$agent]>=3) {
$am--;
$daycount--;
break;
}
$used[]=$agent;
$arrMAX["$agent"]=+1;
$agent_details = mysql_query('SELECT * FROM `events` WHERE `id`=\''.$agent.'\'');
while($grabAgent_details = mysql_fetch_array($agent_details)){
$AgentName=$grabAgent_details['title'];
$AgentLink=$grabAgent_details['link'];
$AgentDescription=$grabAgent_details['description'];
$IsAgentPublished=$grabAgent_details['publish'];
$AgentNoticeEmail=$grabAgent_details['notice_email'];
mysql_query("INSERT INTO event_schedules
(event_id, start_date, start_time, end_date,end_time, frequency, daily_interval, weekly_interval)
VALUES ('$agent', '$next', '13:00:00', '$next', '16:00:00', '0', '1', '1')") or die(mysql_error());
echo "Name: $agent $AgentName <br>
Link: $AgentLink <br>
Description: $AgentDescription <br>
Published: $IsAgentPublished <br>
Notify: $AgentNoticeEmail <br> <br>";
break;
}
}
}
} elseif ($daytext=="Saturday"){
$preexist=mysql_query('SELECT `start_date` FROM `event_schedules` where `start_date`=\''.$next.'\'');
while($checkexistance = mysql_fetch_array($preexist)){
$exist=true;
}
if ($exist){
unset($exist);
echo 'Date already exist: '.$next;
} else {
for ($am=0; $am < 2; $am++) {
echo $am;
echo '<div style="background-color:lightgreen"><hr><h3>'.$daytext.'</h3>';
echo '<p>Day '.$daycount.'</div>';
echo 'Looking to insert into date: '.$next.'<p>';
//Select RANDOM EVENT (AGENT) TO ASSIGN TO DAY
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `event_categories_events` WHERE event_category_id = '2' ") or die(mysql_error());
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$floor_events = mysql_query( " SELECT * FROM `event_categories_events` WHERE event_category_id = '2' LIMIT $offset, 1 " );
//Grab Random Event from All Events (Agents) Assigned To The Floor Schedule Category
while($grabFloorEvent = mysql_fetch_array($floor_events)){
//For every event id we grab, grab the event (agent) details.
$agent=$grabFloorEvent['event_id'];
if (in_array($agent, $used) || $arrMAX["$agent"]>=3) {
$am--;
$daycount--;
break;
} else {
$used[]=$agent;
$arrMAX["$agent"]=+1;
$agent_details = mysql_query('SELECT * FROM `events` WHERE `id`=\''.$agent.'\'');
while($grabAgent_details = mysql_fetch_array($agent_details)){
$AgentName=$grabAgent_details['title'];
$AgentLink=$grabAgent_details['link'];
$AgentDescription=$grabAgent_details['description'];
$IsAgentPublished=$grabAgent_details['publish'];
$AgentNoticeEmail=$grabAgent_details['notice_email'];
$preexist=mysql_query('SELECT `start_date` FROM `event_schedules` where `start_date`=\''.$next.'\' && `event_id`=\''.$agent.'\'');
while($checkexistance = mysql_fetch_array($preexist)){
$exist=true;
}
if ($exist){
unset($exist);
$daycount=$daycount-1;
break;
}
if ($am==0){
mysql_query("INSERT INTO event_schedules
(event_id, start_date, start_time, end_date,end_time, frequency, daily_interval, weekly_interval)
VALUES ('$agent', '$next', '09:00:00', '$next', '12:30:00', '0', '1', '1')") or die(mysql_error());
echo'morning';
} else {
echo'noon';
mysql_query("INSERT INTO event_schedules
(event_id, start_date, start_time, end_date,end_time, frequency, daily_interval, weekly_interval)
VALUES ('$agent', '$next', '12:30:00', '$next', '16:00:00', '0', '1', '1')") or die(mysql_error());
}
echo "Name: $agent $AgentName <br>
Link: $AgentLink <br>
Description: $AgentDescription <br>
Published: $IsAgentPublished <br>
Notify: $AgentNoticeEmail <br> <br>";
break;
}
}
}
} }}else {
$preexist=mysql_query('SELECT `start_date` FROM `event_schedules` where `start_date`=\''.$next.'\'');
while($checkexistance = mysql_fetch_array($preexist)){
$exist=true;
}
if ($exist){
unset($exist);
echo 'Date already exist: '.$next;
} else {
for ($am=0; $am < 2; $am++) {
echo $am;
echo '<div style="background-color:lightgreen"><hr><h3>'.$daytext.'</h3>';
echo '<p>Day '.$daycount.'</div>';
echo 'Looking to insert into date: '.$next.'<p>';
//Select RANDOM EVENT (AGENT) TO ASSIGN TO DAY
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `event_categories_events` WHERE event_category_id = '2' ") or die(mysql_error());
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$floor_events = mysql_query( " SELECT * FROM `event_categories_events` WHERE event_category_id = '2' LIMIT $offset, 1 " );
//Grab Random Event from All Events (Agents) Assigned To The Floor Schedule Category
while($grabFloorEvent = mysql_fetch_array($floor_events)){
//For every event id we grab, grab the event (agent) details.
$agent=$grabFloorEvent['event_id'];
if (in_array($agent, $used) || $arrMAX["$agent"]>=3) {
$am--;
$daycount--;
break;
} else {
$used[]=$agent;
$arrMAX["$agent"]=+1;
$agent_details = mysql_query('SELECT * FROM `events` WHERE `id`=\''.$agent.'\'');
while($grabAgent_details = mysql_fetch_array($agent_details)){
$AgentName=$grabAgent_details['title'];
$AgentLink=$grabAgent_details['link'];
$AgentDescription=$grabAgent_details['description'];
$IsAgentPublished=$grabAgent_details['publish'];
$AgentNoticeEmail=$grabAgent_details['notice_email'];
if ($am==0){
mysql_query("INSERT INTO event_schedules
(event_id, start_date, start_time, end_date,end_time, frequency, daily_interval, weekly_interval)
VALUES ('$agent', '$next', '08:30:00', '$next', '13:00:00', '0', '1', '1')") or die(mysql_error());
echo'morning';
} else {
echo'noon';
mysql_query("INSERT INTO event_schedules
(event_id, start_date, start_time, end_date,end_time, frequency, daily_interval, weekly_interval)
VALUES ('$agent', '$next', '13:00:00', '$next', '17:00:00', '0', '1', '1')") or die(mysql_error());
}
echo "Name: $agent $AgentName <br>
Link: $AgentLink <br>
Description: $AgentDescription <br>
Published: $IsAgentPublished <br>
Notify: $AgentNoticeEmail <br> <br>";
break;
}
}}
}
}
}}
?>