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 AddRow($syllabaryId, $relativeId, $suppressUndo = false, $ipa = NULL, $symbol_id = NULL, $audio_sample = NULL)
 {
     if ($ipa == NULL) {
         $ipa = "";
     }
     $headers = SyllabaryRowHeader::where('syllabary_id', '=', $syllabaryId)->get();
     if ($symbol_id == NULL) {
         $newSymbol = Symbol::create(array('symbol_data' => ''));
         $symbol_id = $newSymbol->id;
     }
     // If we specify that we want to add to the bottom of a given header.
     if ($relativeId != NULL) {
         // If we pass a negative relative row ID, that means we want to add to
         // to the top of that row instead of the right.
         if ($relativeId < 0) {
             $topHeader = $headers->find($relativeId * -1);
             $bottomHeader = $topHeader;
             $topHeader = $headers->find($topHeader->prev_id);
         } else {
             $topHeader = $headers->find($relativeId);
             $bottomHeader = $headers->find($topHeader->next_id);
         }
         $newHeader = SyllabaryRowHeader::create(array('syllabary_id' => $syllabaryId, 'ipa' => $ipa, 'symbol_id' => $symbol_id, 'prev_id' => $topHeader != NULL ? $topHeader->id : -1, 'next_id' => $bottomHeader != NULL ? $bottomHeader->id : -1, 'audio_sample' => $audio_sample));
         if ($topHeader != NULL) {
             $topHeader->next_id = $newHeader->id;
             $topHeader->save();
         }
         if ($bottomHeader != NULL) {
             $bottomHeader->prev_id = $newHeader->id;
             $bottomHeader->save();
         }
     } else {
         // If we want to just add to the end of the list.
         $lastHeader = SyllabaryRowHeader::where('syllabary_id', '=', $syllabaryId)->orderBy('next_id')->first();
         $newHeader = SyllabaryRowHeader::create(array('syllabary_id' => $syllabaryId, 'ipa' => $ipa, 'symbol_id' => $symbol_id, 'prev_id' => $lastHeader != NULL ? $lastHeader->id : -1, 'next_id' => -1, 'audio_sample' => $audio_sample));
         if ($lastHeader != NULL) {
             $lastHeader->next_id = $newHeader->id;
             $lastHeader->save();
         }
     }
     if (!$suppressUndo) {
         UndoRecord::create(['syllabary_id' => $syllabaryId, 'json_data' => json_encode(['action' => 'add_row', 'row_id' => $newHeader->id])]);
     }
     return response()->json(['success' => True]);
 }
 public function run()
 {
     DB::table('syllabary_row_header')->truncate();
     SyllabaryRowHeader::create(array('syllabary_id' => 1, 'ipa' => 'b', 'symbol_id' => 6, 'next_id' => 2, 'prev_id' => -1));
     SyllabaryRowHeader::create(array('syllabary_id' => 1, 'ipa' => 'd', 'symbol_id' => 7, 'next_id' => 3, 'prev_id' => 1));
     SyllabaryRowHeader::create(array('syllabary_id' => 1, 'ipa' => 'f', 'symbol_id' => 8, 'next_id' => 4, 'prev_id' => 2));
     SyllabaryRowHeader::create(array('syllabary_id' => 1, 'ipa' => 'g', 'symbol_id' => 9, 'next_id' => 5, 'prev_id' => 3));
     SyllabaryRowHeader::create(array('syllabary_id' => 1, 'ipa' => 'h', 'symbol_id' => 10, 'next_id' => -1, 'prev_id' => 4));
 }