Skip to content

Instantly share code, notes, and snippets.

@complex857
Created October 29, 2012 09:24
Show Gist options
  • Save complex857/3972563 to your computer and use it in GitHub Desktop.
Save complex857/3972563 to your computer and use it in GitHub Desktop.
calendizer
<?php
define('OUTDIR', dirname(__FILE__).'/out/');
define('IN_CSV', dirname(__FILE__).'/magyar_naptar_2013_indd_utf8.txt');
header('Content-Type:text/html; charset=utf-8');
$layouts = array(
-1 => 'plain',
/*
* +--+--+
* | | |
* +--+--+
* | | |
* +--+--+
*/
0 => 'topleft',
/*
* +--+--+
* |||| |
* +--+--+
* | | |
* +--+--+
*/
1 => 'bottomleft',
/*
* +--+--+
* | | |
* +--+--+
* |||| |
* +--+--+
*/
2 => 'topright',
/*
* +--+--+
* | ||||
* +--+--+
* | | |
* +--+--+
*/
3 => 'bottomright',
/*
* +--+--+
* | | |
* +--+--+
* | ||||
* +--+--+
*/
);
$day_of_week_no = array(
'Hétfő' => 1,
'Kedd' => 2,
'Szerda' => 3,
'Csütrötök' => 4,
'Péntek' => 5,
'Szombat' => 6,
'Vasárnap' => 7,
);
$en_week_days = array(
'Hétfő' => 'Monday',
'Kedd' => 'Tuesday',
'Szerda' => 'Wednesday',
'Csütörtök' => 'Thursday',
'Péntek' => 'Friday',
'Szombat' => 'Saturday',
'Vasárnap' => 'Sunday',
);
$month_names = array(
1 => array(
'honap_hu_full' => 'Január',
'honap_hu_sort' => 'Jan',
'honap_en_full' => 'January',
'honap_en_sort' => 'Jan',
),
2 => array(
'honap_hu_full' => 'Február',
'honap_hu_sort' => 'Feb',
'honap_en_full' => 'February',
'honap_en_sort' => 'Feb',
),
3 => array(
'honap_hu_full' => 'Március',
'honap_hu_sort' => 'Márc',
'honap_en_full' => 'March',
'honap_en_sort' => 'Mar',
),
4 => array(
'honap_hu_full' => 'Április',
'honap_hu_sort' => 'Ápr',
'honap_en_full' => 'April',
'honap_en_sort' => 'Apr',
),
5 => array(
'honap_hu_full' => 'Május',
'honap_hu_sort' => 'Máj',
'honap_en_full' => 'May',
'honap_en_sort' => 'May',
),
6 => array(
'honap_hu_full' => 'Június',
'honap_hu_sort' => 'Jún',
'honap_en_full' => 'June',
'honap_en_sort' => 'Jun',
),
7 => array(
'honap_hu_full' => 'Július',
'honap_hu_sort' => 'Júl',
'honap_en_full' => 'July',
'honap_en_sort' => 'Jul',
),
8 => array(
'honap_hu_full' => 'Augusztus',
'honap_hu_sort' => 'Aug',
'honap_en_full' => 'August',
'honap_en_sort' => 'Aug',
),
9 => array(
'honap_hu_full' => 'Szeptember',
'honap_hu_sort' => 'Szept',
'honap_en_full' => 'September',
'honap_en_sort' => 'Sep',
),
10 => array(
'honap_hu_full' => 'Október',
'honap_hu_sort' => 'Okt',
'honap_en_full' => 'October',
'honap_en_sort' => 'Oct',
),
11 => array(
'honap_hu_full' => 'November',
'honap_hu_sort' => 'Nov',
'honap_en_full' => 'November',
'honap_en_sort' => 'Nov',
),
12 => array(
'honap_hu_full' => 'December',
'honap_hu_sort' => 'Dec',
'honap_en_full' => 'December',
'honap_en_sort' => 'Dec',
),
);
clear();
$days_of_year = csv_to_array(IN_CSV, ',');
print 'got '.count($days_of_year).'<br>';
list($layout_order, $layout_pages) = generate_pages($days_of_year);
generate_csvs($layout_pages);
save_layout_order($layout_order);
print 'done<br>';
function generate_pages($days_of_year) {
global $layouts;
global $day_of_week_no;
global $month_names;
$pages = array(
'plain' => array(),
'topleft' => array(),
'topright' => array(),
'bottomleft' => array(),
'bottomright' => array(),
);
$layout_order = array();
// first day
$day = current($days_of_year);
$page_no = 0;
$old_max_month = null;
while ($day && current($days_of_year)) {
$page_no += 1;
$page = array(
'layout' => 'plain',
0 => array(),
1 => array(),
2 => array(),
3 => array(),
);
$month_nos = array();
$current_page_layout = 'plain';
// gather 4 or 5 days for one spread
$i = 0;
do{
if ($day === false) {
break;
}
$page[$i][] = $day = decorate_day($day);
// store month nos of the spread to get the dominant one later
$month_nos[] = $day['ho'];
// if its a saturday, get the sunday too to the same slot
if ($day['hetnapja'] == 'Szombat') {
$day = decorate_day(next($days_of_year));
// store month numbers of the spread to get the dominant one later
$month_nos[] = $day['ho'];
$page[$i][] = $day;
$current_page_layout = $layouts[$i];
}
$day = next($days_of_year);
++$i;
} while ($i < 4);
// create histogram of month counts, keys will be month number
$month_nos = array_count_values($month_nos);
// reverse assoc sort to put most frequent month no to the top of the array and reset its pointer
arsort($month_nos);
// get the fist key (the most dominant month number, doesnt care for equality)
$max_month_no = key($month_nos);
if ($old_max_month === null) {
$old_max_month = $max_month_no;
}
if ($old_max_month != $max_month_no) {
$page_no = 1;
}
$old_max_month = $max_month_no;
$left_days_start = $page[0][0]['nap'];
$left_days_end = $page[1][count($page[1])-1]['nap'];
$left_month_start = $page[0][0]['month_no'];
$left_month_end = $page[1][count($page[1])-1]['month_no'];
$right_days_start = $page[2][0]['nap'];
$right_days_end = $page[3][count($page[3])-1]['nap'];
$right_month_start = $page[2][0]['month_no'];
$right_month_end = $page[3][count($page[3])-1]['month_no'];
$page['left_days'] = ltrim($left_month_start, '0').'.'.$left_days_start.'.-'.ltrim($left_month_end, '0').'.'.$left_days_end.'.';
$page['right_days'] = ltrim($right_month_start, '0').'.'.$right_days_start.'.-'.ltrim($right_month_end, '0').'.'.$right_days_end.'.';
$page['@kisnaptar'] = 'T:\Gfx\Reckitt Benckiser\2012_naptar\template\Reckitt_Benckiser_2012_kisnaptar_'.$max_month_no.'.indd';
$page['@reklam'] = 'T:\Gfx\Reckitt Benckiser\2012_naptar\template\labjegyzek\páronként\\'.strtolower($month_names[$max_month_no]['honap_en_sort']).$page_no.'-'.($page_no+1).'.indd';
$page_no += 1;
// flatten days
$day_i = 0;
for ($slot=0; $slot<4; ++$slot) {
foreach ($page[$slot] as $days) {
foreach ($days as $day_k => $day_v) {
$page[$day_k.$day_i] = $day_v;
}
++$day_i;
}
unset($page[$slot]);
}
$page['layout'] = $current_page_layout;
// save generated page grouped by layouts
$pages[$current_page_layout][] = $page;
$layout_order[] = $current_page_layout;
}
return array($layout_order, $pages);
}
function generate_csvs($layout_pages) {
foreach ($layout_pages as $layout => $pages) {
if (empty($pages)) {
continue;
}
$outfile = OUTDIR.'/'.$layout.'.csv';
// print header
file_put_contents($outfile, '"'.join('","', array_keys(current($pages))).'"'."\r\n", FILE_APPEND);
foreach ($pages as $page) {
file_put_contents($outfile, '"'.join('","', $page).'"'."\r\n", FILE_APPEND);
}
}
}
function save_layout_order($layout_order) {
$outfile = OUTDIR.'/layouts.txt';
file_put_contents($outfile, join("\r\n", $layout_order));
}
function decorate_day($day) {
global $month_names;
global $en_week_days;
global $day_of_week_no;
static $l = 0;
static $dayno_to_hu_weekday = null;
if ($dayno_to_hu_weekday === null) {
$dayno_to_hu_weekday = array_flip($day_of_week_no);
}
$date = $day['ev'].'-'.str_pad($day['ho'], 2, '0', STR_PAD_LEFT).'-'.str_pad($day['nap'], 2, '0', STR_PAD_LEFT).' 00:00:00';
$month_no = date('n', strtotime($date));
$week_no = ltrim(date('W', strtotime($date)), '0');
$day = array_merge($day, $month_names[$month_no]);
$day['hetnapja'] = $dayno_to_hu_weekday[date('N', strtotime($date))];
$day['hetnapja_en'] = $en_week_days[$day['hetnapja']];
$day['week_no'] = $week_no;
$day['month_no'] = $month_no;
++$l;
return $day;
}
function csv_to_array($filename = '', $delimiter = ';', $skipfirstnline = 0) {
$input = file_get_contents($filename);
$header = null;
$data = array();
$csvData = str_getcsv($input, "\n");
$i = 0;
foreach($csvData as $csvLine){
if ($i < $skipfirstnline) {
++$i;
continue;
}
if(is_null($header)) {
$header = str_getcsv($csvLine, $delimiter);
}
else{
$items = str_getcsv($csvLine, $delimiter);
for($n = 0, $m = count($header); $n < $m; ++$n){
$prepareData[$header[$n]] = $items[$n];
}
$data[] = $prepareData;
}
}
return $data;
}
function clear() {
if (!is_dir(OUTDIR)) {
mkdir(OUTDIR, 0777, true);
}
array_map('unlink', glob(OUTDIR.'*'));
}
ev,ho,nap,nev
2012,12,29,"Tamás, Tamara"
2012,12,30,"Dávid"
2012,12,31,"Szilveszter"
2013,1,1,"Fruzsina"
2013,1,2,"Ábel"
2013,1,3,"Genovéva, Benjámin"
2013,1,4,"Titusz, Leona"
2013,1,5,"Simon"
2013,1,6,"Boldizsár"
2013,1,7,"Attila, Ramóna"
2013,1,8,"Gyöngyvér"
2013,1,9,"Marcell"
2013,1,10,"Melánia"
2013,1,11,"Ágota"
2013,1,12,"Ernő"
2013,1,13,"Veronika"
2013,1,14,"Bódog"
2013,1,15,"Lóránt, Loránd"
2013,1,16,"Gusztáv"
2013,1,17,"Antal, Antónia"
2013,1,18,"Piroska"
2013,1,19,"Sára, Márió"
2013,1,20,"Fábián, Sebestyén"
2013,1,21,"Ágnes"
2013,1,22,"Vince, Artúr"
2013,1,23,"Zelma, Rajmund"
2013,1,24,"Timót"
2013,1,25,"Pál"
2013,1,26,"Vanda, Paula"
2013,1,27,"Angelika"
2013,1,28,"Károly, Karola"
2013,1,29,"Adél"
2013,1,30,"Martina, Gerda"
2013,1,31,"Marcella"
2013,2,1,"Ignác"
2013,2,2,"Karolina, Aida"
2013,2,3,"Balázs"
2013,2,4,"Ráhel, Csenge"
2013,2,5,"Ágota, Ingrid"
2013,2,6,"Dorottya, Dóra"
2013,2,7,"Tódor, Rómeó"
2013,2,8,"Aranka"
2013,2,9,"Abigél, Alex"
2013,2,10,"Elvira"
2013,2,11,"Bertold, Marietta"
2013,2,12,"Lívia, Lídia"
2013,2,13,"Ella, Linda"
2013,2,14,"Bálint, Valentin"
2013,2,15,"Kolos, Georgina"
2013,2,16,"Julianna, Lilla"
2013,2,17,"Donát"
2013,2,18,"Bernadett"
2013,2,19,"Zsuzsanna"
2013,2,20,"Aladár, Álmos"
2013,2,21,"Eleonóra"
2013,2,22,"Gerzson"
2013,2,23,"Alfréd"
2013,2,24,"Mátyás"
2013,2,25,"Géza"
2013,2,26,"Edina"
2013,2,27,"Ákos, Bátor"
2013,2,28,"Elemér"
2013,3,1,"Albin"
2013,3,2,"Lujza"
2013,3,3,"Kornélia"
2013,3,4,"Kázmér"
2013,3,5,"Adorján, Adrián"
2013,3,6,"Leonóra, Inez"
2013,3,7,"Tamás"
2013,3,8,"Zoltán"
2013,3,9,"Franciska, Fanni"
2013,3,10,"Ildikó"
2013,3,11,"Szilárd"
2013,3,12,"Gergely"
2013,3,13,"Krisztián, Ajtony"
2013,3,14,"Matild"
2013,3,15,"Kristóf"
2013,3,16,"Henrietta"
2013,3,17,"Gertrúd, Patrik"
2013,3,18,"Sándor, Ede"
2013,3,19,"József, Bánk"
2013,3,20,"Klaudia"
2013,3,21,"Benedek"
2013,3,22,"Beáta, Izolda"
2013,3,23,"Emőke"
2013,3,24,"Gábor, Karina"
2013,3,25,"Irén, Irisz"
2013,3,26,"Emánuel"
2013,3,27,"Hajnalka"
2013,3,28,"Gedeon, Johanna"
2013,3,29,"Auguszta"
2013,3,30,"Zalán"
2013,3,31,"Árpád"
2013,4,1,"Hugó"
2013,4,2,"Áron"
2013,4,3,"Buda, Richárd"
2013,4,4,"Izidor"
2013,4,5,"Vince"
2013,4,6,"Vilmos, Bíborka"
2013,4,7,"Herman"
2013,4,8,"Dénes"
2013,4,9,"Erhard"
2013,4,10,"Zsolt"
2013,4,11,"Leó, Szaniszló"
2013,4,12,"Gyula"
2013,4,13,"Ida"
2013,4,14,"Tibor"
2013,4,15,"Anasztázia, Tas"
2013,4,16,"Csongor"
2013,4,17,"Rudolf"
2013,4,18,"Andrea, Ilma"
2013,4,19,"Emma"
2013,4,20,"Tivadar"
2013,4,21,"Konrád"
2013,4,22,"Csilla, Noémi"
2013,4,23,"Béla"
2013,4,24,"György"
2013,4,25,"Márk"
2013,4,26,"Ervin"
2013,4,27,"Zita"
2013,4,28,"Valéria"
2013,4,29,"Péter"
2013,4,30,"Katalin, Kitti"
2013,5,1,"Fülöp, Jakab"
2013,5,2,"Zsigmond"
2013,5,3,"Tímea, Irma"
2013,5,4,"Mónika, Flórián"
2013,5,5,"Györgyi"
2013,5,6,"Ivett, Frida"
2013,5,7,"Gizella"
2013,5,8,"Mihály"
2013,5,9,"Gergely, Lana"
2013,5,10,"Ármin, Pálma"
2013,5,11,"Ferenc"
2013,5,12,"Pongrác"
2013,5,13,"Szervác, Imola"
2013,5,14,"Bonifác"
2013,5,15,"Zsófia, Szonja"
2013,5,16,"Mózes, Botond"
2013,5,17,"Paszkál"
2013,5,18,"Erik, Alexandra"
2013,5,19,"Ivó, Milán"
2013,5,20,"Bernát, Felícia"
2013,5,21,"Konstantin"
2013,5,22,"Júlia, Rita"
2013,5,23,"Dezső"
2013,5,24,"Eszter, Eliza"
2013,5,25,"Orbán"
2013,5,26,"Fülöp, Evelin"
2013,5,27,"Hella"
2013,5,28,"Emil, Csanád"
2013,5,29,"Magdolna"
2013,5,30,"Janka, Zsanett"
2013,5,31,"Angéla, Petronella"
2013,6,1,"Tünde"
2013,6,2,"Kármen, Anita"
2013,6,3,"Klotild"
2013,6,4,"Bulcsú"
2013,6,5,"Fatime"
2013,6,6,"Norbert, Cintia"
2013,6,7,"Róbert"
2013,6,8,"Medárd"
2013,6,9,"Félix"
2013,6,10,"Margit, Gréta"
2013,6,11,"Barnabás"
2013,6,12,"Villő"
2013,6,13,"Antal, Anett"
2013,6,14,"Vazul"
2013,6,15,"Jolán, Vid"
2013,6,16,"Jusztin"
2013,6,17,"Laura, Alida"
2013,6,18,"Arnold, Levente"
2013,6,19,"Gyárfás"
2013,6,20,"Rafael"
2013,6,21,"Alajos, Leila"
2013,6,22,"Paulina"
2013,6,23,"Zoltán"
2013,6,24,"Iván"
2013,6,25,"Vilmos"
2013,6,26,"János, Pál"
2013,6,27,"László"
2013,6,28,"Levente, Irén"
2013,6,29,"Péter, Pál"
2013,6,30,"Pál"
2013,7,1,"Tihamér, Annamária"
2013,7,2,"Ottó"
2013,7,3,"Kornél, Soma"
2013,7,4,"Ulrik"
2013,7,5,"Emese, Sarolta"
2013,7,6,"Csaba"
2013,7,7,"Appolónia"
2013,7,8,"Ellák"
2013,7,9,"Lukrécia"
2013,7,10,"Amália"
2013,7,11,"Nóra, Lili"
2013,7,12,"Izabella, Dalma"
2013,7,13,"Jenő"
2013,7,14,"Őrs, Stella"
2013,7,15,"Henrik, Roland"
2013,7,16,"Valter"
2013,7,17,"Endre, Elek"
2013,7,18,"Frigyes"
2013,7,19,"Emília"
2013,7,20,"Illés"
2013,7,21,"Dániel, Daniella"
2013,7,22,"Magdolna"
2013,7,23,"Lenke"
2013,7,24,"Kinga, Kincső"
2013,7,25,"Kristóf, Jakab"
2013,7,26,"Anna, Anikó"
2013,7,27,"Olga, Liliána"
2013,7,28,"Szabolcs"
2013,7,29,"Márta, Flóra"
2013,7,30,"Judit, Xénia"
2013,7,31,"Oszkár"
2013,8,1,"Boglárka"
2013,8,2,"Lehel"
2013,8,3,"Hermina"
2013,8,4,"Domonkos, Dominika"
2013,8,5,"Krisztina"
2013,8,6,"Berta, Bettina"
2013,8,7,"Ibolya"
2013,8,8,"László"
2013,8,9,"Emőd"
2013,8,10,"Lőrinc"
2013,8,11,"Zsuzsanna, Tiborc"
2013,8,12,"Klára"
2013,8,13,"Ipoly"
2013,8,14,"Marcell"
2013,8,15,"Mária"
2013,8,16,"Ábrahám"
2013,8,17,"Jácint"
2013,8,18,"Ilona"
2013,8,19,"Huba"
2013,8,20,"István"
2013,8,21,"Sámuel, Hajna"
2013,8,22,"Menyhért, Mirjam"
2013,8,23,"Bence"
2013,8,24,"Bertalan"
2013,8,25,"Lajos, Patrícia"
2013,8,26,"Izsó"
2013,8,27,"Gáspár"
2013,8,28,"Ágoston"
2013,8,29,"Beatrix, Erna"
2013,8,30,"Rózsa"
2013,8,31,"Erika, Bella"
2013,9,1,"Egyed, Egon"
2013,9,2,"Rebeka, Dorina"
2013,9,3,"Hilda"
2013,9,4,"Rozália"
2013,9,5,"Viktor, Lőrinc"
2013,9,6,"Zakariás"
2013,9,7,"Regina"
2013,9,8,"Mária, Adrienn"
2013,9,9,"Ádám"
2013,9,10,"Nikolett, Hunor"
2013,9,11,"Teodóra"
2013,9,12,"Mária"
2013,9,13,"Kornél"
2013,9,14,"Szeréna, Roxána"
2013,9,15,"Enikő, Melitta"
2013,9,16,"Edit"
2013,9,17,"Zsófia"
2013,9,18,"Diána"
2013,9,19,"Vilhelmina"
2013,9,20,"Friderika"
2013,9,21,"Máté, Mirella"
2013,9,22,"Móric"
2013,9,23,"Tekla"
2013,9,24,"Gellért, Mercédesz"
2013,9,25,"Eufrozina, Kende"
2013,9,26,"Jusztina"
2013,9,27,"Adalbert"
2013,9,28,"Vencel"
2013,9,29,"Mihály"
2013,9,30,"Jeromos"
2013,10,1,"Malvin"
2013,10,2,"Petra"
2013,10,3,"Helga"
2013,10,4,"Ferenc"
2013,10,5,"Aurél"
2013,10,6,"Brúnó, Renáta"
2013,10,7,"Amália"
2013,10,8,"Koppány"
2013,10,9,"Dénes"
2013,10,10,"Gedeon"
2013,10,11,"Brigitta"
2013,10,12,"Miksa"
2013,10,13,"Kálmán, Ede"
2013,10,14,"Helén"
2013,10,15,"Teréz"
2013,10,16,"Gál"
2013,10,17,"Hedvig"
2013,10,18,"Lukács"
2013,10,19,"Nándor"
2013,10,20,"Vendel"
2013,10,21,"Orsolya"
2013,10,22,"Előd"
2013,10,23,"Gyöngyi"
2013,10,24,"Salamon"
2013,10,25,"Blanka, Bianka"
2013,10,26,"Dömötör"
2013,10,27,"Szabina"
2013,10,28,"Simon, Szimonetta"
2013,10,29,"Nárcisz"
2013,10,30,"Alfonz"
2013,10,31,"Farkas"
2013,11,1,"Marianna"
2013,11,2,"Achilles"
2013,11,3,"Győző"
2013,11,4,"Károly"
2013,11,5,"Imre"
2013,11,6,"Lénárd"
2013,11,7,"Rezső"
2013,11,8,"Zsombor"
2013,11,9,"Tivadar"
2013,11,10,"Réka"
2013,11,11,"Márton"
2013,11,12,"Jónás, Renátó"
2013,11,13,"Szilvia"
2013,11,14,"Aliz"
2013,11,15,"Albert, Lipót"
2013,11,16,"Ödön"
2013,11,17,"Hortenzia, Gergő"
2013,11,18,"Jenő"
2013,11,19,"Erzsébet"
2013,11,20,"Jolán"
2013,11,21,"Olivér"
2013,11,22,"Cecília"
2013,11,23,"Kelemen, Klementina"
2013,11,24,"Emma"
2013,11,25,"Katalin"
2013,11,26,"Virág"
2013,11,27,"Virgil"
2013,11,28,"Stefánia"
2013,11,29,"Taksony"
2013,11,30,"András, Andor"
2013,12,1,"Elza"
2013,12,2,"Melinda, Vivien"
2013,12,3,"Ferenc, Olívia"
2013,12,4,"Borbála, Barbara"
2013,12,5,"Vilma"
2013,12,6,"Miklós"
2013,12,7,"Ambrus"
2013,12,8,"Mária"
2013,12,9,"Natália"
2013,12,10,"Judit"
2013,12,11,"Árpád"
2013,12,12,"Gabriella"
2013,12,13,"Luca, Otília"
2013,12,14,"Szilárda"
2013,12,15,"Valér"
2013,12,16,"Etelka, Aletta"
2013,12,17,"Lázár, Olimpia"
2013,12,18,"Auguszta"
2013,12,19,"Viola"
2013,12,20,"Teofil"
2013,12,21,"Tamás"
2013,12,22,"Zéno"
2013,12,23,"Viktória"
2013,12,24,"Ádám, Éva"
2013,12,25,"Eugénia"
2013,12,26,"István"
2013,12,27,"János"
2013,12,28,"Kamilla"
2013,12,29,"Tamás, Tamara"
2013,12,30,"Dávid"
2013,12,31,"Szilveszter"
2014,1,1,"Fruzsina"
2014,1,2,"Ábel"
2014,1,3,"Genovéva, Benjámin"
2014,1,4,"Titusz, Leona"
2014,1,5,"Simon"
2014,1,6,"Boldizsár"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment