public function CreateSyllabary($name)
 {
     $syllabary = Syllabary::create(array('name' => $name));
     $symbol1 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><circle id="svg_18" r="105.621967" cy="256" cx="256" stroke-width="5" stroke="#000000" fill="#000000"/></svg>'));
     $symbol2 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="50%" x2="100%" y2="50%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol3 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="0" x2="100%" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol4 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="100%" y1="0" x2="0" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol5 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg"><rect xmlns="http://www.w3.org/2000/svg" id="svg_1" height="168" width="392" y="156" x="54" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="null" fill="black"/></svg>'));
     $symbol6 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><circle id="svg_18" r="105.621967" cy="256" cx="256" stroke-width="5" stroke="#000000" fill="#000000"/></svg>'));
     $symbol7 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="50%" x2="100%" y2="50%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol8 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="0" x2="100%" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol9 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="100%" y1="0" x2="0" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     $symbol10 = Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg"><rect xmlns="http://www.w3.org/2000/svg" id="svg_1" height="168" width="392" y="156" x="54" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="null" fill="black"/></svg>'));
     $column = SyllabaryColumnHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'a', 'symbol_id' => $symbol4->id, 'next_id' => -1, 'prev_id' => -1));
     $columnId = $column->id;
     $column->next_id = $columnId + 1;
     $column->save();
     SyllabaryColumnHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'e', 'symbol_id' => $symbol3->id, 'next_id' => $columnId + 2, 'prev_id' => $columnId));
     SyllabaryColumnHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'i', 'symbol_id' => $symbol2->id, 'next_id' => $columnId + 3, 'prev_id' => $columnId + 1));
     SyllabaryColumnHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'o', 'symbol_id' => $symbol1->id, 'next_id' => $columnId + 4, 'prev_id' => $columnId + 2));
     SyllabaryColumnHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'u', 'symbol_id' => $symbol5->id, 'next_id' => -1, 'prev_id' => $columnId + 3));
     $row = SyllabaryRowHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'b', 'symbol_id' => $symbol6->id, 'next_id' => -1, 'prev_id' => -1));
     $rowId = $row->id;
     $row->next_id = $rowId + 1;
     $row->save();
     SyllabaryRowHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'd', 'symbol_id' => $symbol7->id, 'next_id' => $rowId + 2, 'prev_id' => $rowId));
     SyllabaryRowHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'f', 'symbol_id' => $symbol8->id, 'next_id' => $rowId + 3, 'prev_id' => $rowId + 1));
     SyllabaryRowHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'g', 'symbol_id' => $symbol9->id, 'next_id' => $rowId + 4, 'prev_id' => $rowId + 2));
     SyllabaryRowHeader::create(array('syllabary_id' => $syllabary->id, 'ipa' => 'h', 'symbol_id' => $symbol10->id, 'next_id' => -1, 'prev_id' => $rowId + 3));
     return $syllabary;
 }
 public function UndoAction($syllabaryId)
 {
     $undo = UndoRecord::where('syllabary_id', '=', $syllabaryId)->orderBy('created_at', 'desc')->first();
     if ($undo == NULL) {
         return response()->json(['success' => false]);
     }
     $undoData = json_decode($undo->json_data, true);
     if ($undoData['action'] == "add_row") {
         $rowId = $undoData['row_id'];
         $this->RemoveRow($syllabaryId, $rowId, true);
     } else {
         if ($undoData['action'] == 'remove_row') {
             if ($undoData['direction'] == 'up') {
                 $rowId = $undoData['row_id'] * -1;
             } else {
                 $rowId = $undoData['row_id'];
             }
             $ipa = $undoData['ipa'];
             $symbol_id = $undoData['symbol_id'];
             $audio_sample = $undoData['audio_sample'];
             $this->AddRow($syllabaryId, $rowId, true, $ipa, $symbol_id, $audio_sample);
         } else {
             if ($undoData['action'] == 'add_column') {
                 $colId = $undoData['col_id'];
                 $this->RemoveColumn($syllabaryId, $colId, true);
             } else {
                 if ($undoData['action'] == 'remove_column') {
                     if ($undoData['direction'] == 'left') {
                         $colId = $undoData['col_id'] * -1;
                     } else {
                         $colId = $undoData['col_id'];
                     }
                     $ipa = $undoData['ipa'];
                     $symbol_id = $undoData['symbol_id'];
                     $audio_sample = $undoData['audio_sample'];
                     $this->AddColumn($syllabaryId, $colId, true, $ipa, $symbol_id, $audio_sample);
                 } else {
                     if ($undoData['action'] == 'remove_cell') {
                         $rowId = $undoData['row_id'];
                         $colId = $undoData['col_id'];
                         $this->RestoreCell($syllabaryId, $rowId, $colId, true);
                     } else {
                         if ($undoData['action'] == 'restore_cell') {
                             $rowId = $undoData['row_id'];
                             $colId = $undoData['col_id'];
                             $this->RemoveCell($syllabaryId, $rowId, $colId, true);
                         } else {
                             if ($undoData['action'] == 'update_symbol') {
                                 $symbolId = $undoData['symbol_id'];
                                 $symbolData = $undoData['old_symbol_data'];
                                 $symbol = Symbol::find($symbolId);
                                 if ($symbol != NULL) {
                                     $symbol->symbol_data = $symbolData;
                                     $symbol->save();
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $undo->delete();
     return response()->json(['success' => true]);
 }
 public function run()
 {
     DB::table('symbols')->truncate();
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><circle id="svg_18" r="105.621967" cy="256" cx="256" stroke-width="5" stroke="#000000" fill="#000000"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="50%" x2="100%" y2="50%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="0" x2="100%" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="100%" y1="0" x2="0" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg"><rect xmlns="http://www.w3.org/2000/svg" id="svg_1" height="168" width="392" y="156" x="54" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="null" fill="black"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><circle id="svg_18" r="105.621967" cy="256" cx="256" stroke-width="5" stroke="#000000" fill="#000000"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="50%" x2="100%" y2="50%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="0" y1="0" x2="100%" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><line x1="100%" y1="0" x2="0" y2="100%" style="stroke:rgb(0,0,0);stroke-width:5"/></svg>'));
     Symbol::create(array('symbol_data' => '<?xml version="1.0"?><svg width="512" height="512" xmlns="http://www.w3.org/2000/svg"><rect xmlns="http://www.w3.org/2000/svg" id="svg_1" height="168" width="392" y="156" x="54" stroke-linecap="null" stroke-linejoin="null" stroke-dasharray="null" stroke-width="null" fill="black"/></svg>'));
 }