@@ -358,7 +358,7 @@ public static function store_survey($values)
358
358
}
359
359
360
360
if (1 == $ values ['survey_type ' ] && !empty ($ values ['parent_id ' ])) {
361
- self ::copy_survey ($ values ['parent_id ' ], $ survey_id );
361
+ self ::copySurvey ($ values ['parent_id ' ], $ survey_id );
362
362
}
363
363
364
364
Display::addFlash (
@@ -559,114 +559,90 @@ public static function deleteSurvey(CSurvey $survey)
559
559
560
560
/**
561
561
* Copy given survey to a new (optional) given survey ID.
562
- *
563
- * @param int $survey_id
564
- * @param int $new_survey_id
565
- * @param int $targetCourseId
566
- *
567
- * @return bool
568
562
*/
569
- public static function copy_survey ($ survey_id , $ new_survey_id = null , $ targetCourseId = null )
570
- {
571
- $ course_id = api_get_course_int_id ();
563
+ public static function copySurvey (
564
+ int $ surveyId ,
565
+ ?int $ newSurveyId = null ,
566
+ ?int $ targetCourseId = null ,
567
+ ?int $ targetSessionId = null
568
+ ): ?int {
569
+ $ originalCourseId = api_get_course_int_id ();
572
570
if (!$ targetCourseId ) {
573
- $ targetCourseId = $ course_id ;
571
+ $ targetCourseId = $ originalCourseId ;
574
572
}
575
573
576
- // Database table definitions
577
- $ table_survey = Database::get_course_table (TABLE_SURVEY );
578
- $ table_survey_question_group = Database::get_course_table (TABLE_SURVEY_QUESTION_GROUP );
579
- $ table_survey_question = Database::get_course_table (TABLE_SURVEY_QUESTION );
580
- $ table_survey_options = Database::get_course_table (TABLE_SURVEY_QUESTION_OPTION );
581
- $ survey_id = (int ) $ survey_id ;
582
574
$ repo = Container::getSurveyRepository ();
583
575
584
- // Get groups
585
- $ survey_data = self ::get_survey ($ survey_id , 0 , null , true );
586
- if (empty ($ survey_data )) {
587
- return true ;
576
+ $ surveyTable = Database::get_course_table (TABLE_SURVEY );
577
+ $ surveyQuestionTable = Database::get_course_table (TABLE_SURVEY_QUESTION );
578
+ $ surveyOptionsTable = Database::get_course_table (TABLE_SURVEY_QUESTION_OPTION );
579
+
580
+ $ surveyData = self ::get_survey ($ surveyId , 0 , null , true );
581
+ if (empty ($ surveyData )) {
582
+ return null ;
588
583
}
589
584
590
- if (empty ($ new_survey_id )) {
591
- $ params = $ survey_data ;
592
- $ params ['code ' ] = self ::generate_unique_code ($ params ['code ' ]);
593
- $ params ['c_id ' ] = $ targetCourseId ;
594
- unset($ params ['survey_id ' ]);
595
- $ params ['session_id ' ] = api_get_session_id ();
596
- $ params ['title ' ] = $ params ['title ' ].' ' .get_lang ('Copy ' );
597
- unset($ params ['iid ' ]);
598
- $ params ['invited ' ] = 0 ;
599
- $ params ['answered ' ] = 0 ;
585
+ if (empty ($ newSurveyId )) {
586
+ $ surveyData ['code ' ] = self ::generate_unique_code ($ surveyData ['code ' ]);
587
+ $ surveyData ['session_id ' ] = $ targetSessionId ?? api_get_session_id ();
600
588
601
- $ course = api_get_course_entity ();
602
- $ session = api_get_session_entity ();
603
- $ survey = new CSurvey ();
604
- $ survey ->setShowFormProfile ($ params ['show_form_profile ' ]);
605
- $ survey ->setFormFields ($ params ['form_fields ' ]);
606
- $ survey
607
- ->setSurveyType ($ params ['survey_type ' ])
608
- ->setShuffle ($ params ['shuffle ' ])
609
- ->setOneQuestionPerPage ($ params ['one_question_per_page ' ])
610
- ;
611
- $ survey ->setSurveyVersion ($ params ['survey_version ' ]);
612
- $ survey
613
- ->setCode ($ params ['code ' ])
614
- ->setTitle ($ params ['title ' ])
615
- ->setSubtitle ($ params ['subtitle ' ])
616
- ->setLang ($ params ['lang ' ])
617
- ->setAvailFrom (new \DateTime ($ params ['avail_from ' ]))
618
- ->setAvailTill (new \DateTime ($ params ['avail_till ' ]))
619
- ->setIsShared ($ params ['is_shared ' ])
620
- ->setTemplate ($ params ['template ' ])
621
- ->setIntro ($ params ['intro ' ])
622
- ->setSurveyThanks ($ params ['surveythanks ' ])
623
- ->setAnonymous ($ params ['anonymous ' ])
624
- ->setVisibleResults ($ params ['visible_results ' ])
625
- ->setSurveyType ($ params ['survey_type ' ])
626
- ->setParent ($ course )
627
- ->addCourseLink ($ course , $ session )
628
- ;
629
-
630
- if (isset ($ params ['parent_id ' ]) && !empty ($ params ['parent_id ' ])) {
631
- $ parent = $ repo ->find ($ params ['parent_id ' ]);
632
- $ survey ->setSurveyParent ($ parent );
589
+ if ($ targetCourseId === $ originalCourseId ) {
590
+ $ surveyData ['title ' ] .= ' ' .get_lang ('Copy ' );
633
591
}
634
592
635
- $ repo ->create ($ survey );
636
- $ new_survey_id = $ survey ->getIid ();
637
- } else {
638
- $ new_survey_id = (int ) $ new_survey_id ;
639
- }
640
-
641
- /*$sql = "SELECT * FROM $table_survey_question_group
642
- WHERE iid = $survey_id";
643
-
644
- $res = Database::query($sql);
645
- while ($row = Database::fetch_assoc($res)) {
646
- $params = [
647
- 'c_id' => $targetCourseId,
648
- 'name' => $row['title'],
649
- 'description' => $row['description'],
650
- 'survey_id' => $new_survey_id,
651
- ];
593
+ unset($ surveyData ['iid ' ], $ surveyData ['id ' ]);
652
594
653
- $insertId = Database::insert($table_survey_question_group, $params);
595
+ if ($ targetSessionId ) {
596
+ $ newSurveyId = Database::insert ($ surveyTable , $ surveyData );
597
+ } else {
598
+ $ course = api_get_course_entity ();
599
+ $ session = api_get_session_entity ();
654
600
655
- $sql = "UPDATE $table_survey_question_group SET id = iid
656
- WHERE iid = $insertId";
657
- Database::query($sql);
601
+ $ survey = new CSurvey ();
602
+ $ survey
603
+ ->setSurveyType ($ surveyData ['survey_type ' ])
604
+ ->setSurveyVersion ($ surveyData ['survey_version ' ])
605
+ ->setCode ($ surveyData ['code ' ])
606
+ ->setTitle ($ surveyData ['title ' ])
607
+ ->setSubtitle ($ surveyData ['subtitle ' ])
608
+ ->setLang ($ surveyData ['lang ' ])
609
+ ->setAvailFrom (new \DateTime ($ surveyData ['avail_from ' ]))
610
+ ->setAvailTill (new \DateTime ($ surveyData ['avail_till ' ]))
611
+ ->setIsShared ($ surveyData ['is_shared ' ])
612
+ ->setTemplate ($ surveyData ['template ' ])
613
+ ->setIntro ($ surveyData ['intro ' ])
614
+ ->setSurveyThanks ($ surveyData ['surveythanks ' ])
615
+ ->setAnonymous ($ surveyData ['anonymous ' ])
616
+ ->setVisibleResults ($ surveyData ['visible_results ' ])
617
+ ->setShuffle ($ surveyData ['shuffle ' ])
618
+ ->setOneQuestionPerPage ($ surveyData ['one_question_per_page ' ])
619
+ ->setShowFormProfile ($ surveyData ['show_form_profile ' ])
620
+ ->setFormFields ($ surveyData ['form_fields ' ])
621
+ ->setParent ($ course )
622
+ ->addCourseLink ($ course , $ session );
623
+
624
+ if (!empty ($ surveyData ['parent_id ' ])) {
625
+ $ parent = $ repo ->find ($ surveyData ['parent_id ' ]);
626
+ if ($ parent ) {
627
+ $ survey ->setSurveyParent ($ parent );
628
+ }
629
+ }
658
630
659
- $group_id[$row['id']] = $insertId;
660
- }*/
631
+ $ repo ->create ($ survey );
632
+ $ newSurveyId = $ survey ->getIid ();
633
+ }
634
+ }
661
635
662
- // Get questions
663
- $ sql = " SELECT * FROM $ table_survey_question
664
- WHERE survey_id = $ survey_id " ;
636
+ if ( empty ( $ newSurveyId )) {
637
+ return null ;
638
+ }
665
639
640
+ $ sql = "SELECT * FROM $ surveyQuestionTable WHERE survey_id = $ surveyId " ;
666
641
$ res = Database::query ($ sql );
642
+ $ question_id = [];
667
643
while ($ row = Database::fetch_assoc ($ res )) {
668
644
$ params = [
669
- 'survey_id ' => $ new_survey_id ,
645
+ 'survey_id ' => $ newSurveyId ,
670
646
'survey_question ' => $ row ['survey_question ' ],
671
647
'survey_question_comment ' => $ row ['survey_question_comment ' ],
672
648
'type ' => $ row ['type ' ],
@@ -683,31 +659,26 @@ public static function copy_survey($survey_id, $new_survey_id = null, $targetCou
683
659
$ params ['is_required ' ] = $ row ['is_required ' ];
684
660
}
685
661
686
- $ insertId = Database::insert ($ table_survey_question , $ params );
662
+ $ insertId = Database::insert ($ surveyQuestionTable , $ params );
687
663
if ($ insertId ) {
688
- /*$sql = "UPDATE $table_survey_question SET question_id = iid WHERE iid = $insertId";
689
- Database::query($sql);*/
690
664
$ question_id [$ row ['iid ' ]] = $ insertId ;
691
665
}
692
666
}
693
667
694
- // Get questions options
695
- $ sql = "SELECT * FROM $ table_survey_options
696
- WHERE survey_id=' " .$ survey_id ."' " ;
697
-
668
+ $ sql = "SELECT * FROM $ surveyOptionsTable WHERE survey_id = $ surveyId " ;
698
669
$ res = Database::query ($ sql );
699
670
while ($ row = Database::fetch_assoc ($ res )) {
700
671
$ params = [
701
- 'question_id ' => $ question_id [$ row ['question_id ' ]],
702
- 'survey_id ' => $ new_survey_id ,
672
+ 'question_id ' => $ question_id [$ row ['question_id ' ]] ?? 0 ,
673
+ 'survey_id ' => $ newSurveyId ,
703
674
'option_text ' => $ row ['option_text ' ],
704
675
'sort ' => $ row ['sort ' ],
705
676
'value ' => $ row ['value ' ],
706
677
];
707
- $ insertId = Database::insert ($ table_survey_options , $ params );
678
+ Database::insert ($ surveyOptionsTable , $ params );
708
679
}
709
680
710
- return $ new_survey_id ;
681
+ return $ newSurveyId ;
711
682
}
712
683
713
684
/**
@@ -1674,127 +1645,6 @@ public static function emptySurveyFromId($surveyId)
1674
1645
return true ;
1675
1646
}
1676
1647
1677
- /**
1678
- * Copy survey specifying course ID and session ID where will be copied.
1679
- *
1680
- * @param int $surveyId
1681
- * @param int $targetCourseId target course id
1682
- * @param int $targetSessionId target session id
1683
- *
1684
- * @return bool|int when fails or return the new survey id
1685
- */
1686
- public static function copySurveySession ($ surveyId , $ targetCourseId , $ targetSessionId )
1687
- {
1688
- // Database table definitions
1689
- $ surveyTable = Database::get_course_table (TABLE_SURVEY );
1690
- $ surveyQuestionGroupTable = Database::get_course_table (TABLE_SURVEY_QUESTION_GROUP );
1691
- $ surveyQuestionTable = Database::get_course_table (TABLE_SURVEY_QUESTION );
1692
- $ surveyOptionsTable = Database::get_course_table (TABLE_SURVEY_QUESTION_OPTION );
1693
- $ surveyId = (int ) $ surveyId ;
1694
- $ targetCourseId = (int ) $ targetCourseId ;
1695
- $ targetSessionId = (int ) $ targetSessionId ;
1696
-
1697
- $ surveyData = self ::get_survey ($ surveyId , 0 , '' , true );
1698
- if (empty ($ surveyData ) || empty ($ targetCourseId )) {
1699
- return false ;
1700
- }
1701
-
1702
- $ originalCourseId = $ surveyData ['c_id ' ];
1703
- $ originalSessionId = $ surveyData ['session_id ' ];
1704
-
1705
- $ surveyData ['code ' ] = self ::generate_unique_code ($ surveyData ['code ' ]);
1706
- $ surveyData ['c_id ' ] = $ targetCourseId ;
1707
- $ surveyData ['session_id ' ] = $ targetSessionId ;
1708
- // Add a "Copy" suffix if copied inside the same course
1709
- if ($ targetCourseId == $ originalCourseId ) {
1710
- $ surveyData ['title ' ] = $ surveyData ['title ' ].' ' .get_lang ('Copy ' );
1711
- }
1712
- unset($ surveyData ['iid ' ]);
1713
- unset($ surveyData ['id ' ]);
1714
-
1715
- $ newSurveyId = Database::insert ($ surveyTable , $ surveyData );
1716
-
1717
- if ($ newSurveyId ) {
1718
- $ sql = "SELECT * FROM $ surveyQuestionGroupTable
1719
- WHERE c_id = $ originalCourseId AND survey_id = $ surveyId " ;
1720
- $ res = Database::query ($ sql );
1721
- while ($ row = Database::fetch_assoc ($ res )) {
1722
- $ params = [
1723
- 'c_id ' => $ targetCourseId ,
1724
- 'name ' => $ row ['title ' ],
1725
- 'description ' => $ row ['description ' ],
1726
- 'survey_id ' => $ newSurveyId ,
1727
- ];
1728
- $ insertId = Database::insert ($ surveyQuestionGroupTable , $ params );
1729
- if ($ insertId ) {
1730
- $ sql = "UPDATE $ surveyQuestionGroupTable SET id = iid WHERE iid = $ insertId " ;
1731
- Database::query ($ sql );
1732
- $ group_id [$ row ['id ' ]] = $ insertId ;
1733
- }
1734
- }
1735
-
1736
- // Get questions
1737
- $ sql = "SELECT * FROM $ surveyQuestionTable
1738
- WHERE c_id = $ originalCourseId AND survey_id = $ surveyId " ;
1739
- $ res = Database::query ($ sql );
1740
- while ($ row = Database::fetch_assoc ($ res )) {
1741
- $ params = [
1742
- 'c_id ' => $ targetCourseId ,
1743
- 'survey_id ' => $ newSurveyId ,
1744
- 'survey_question ' => $ row ['survey_question ' ],
1745
- 'survey_question_comment ' => $ row ['survey_question_comment ' ],
1746
- 'type ' => $ row ['type ' ],
1747
- 'display ' => $ row ['display ' ],
1748
- 'sort ' => $ row ['sort ' ],
1749
- 'shared_question_id ' => $ row ['shared_question_id ' ],
1750
- 'max_value ' => $ row ['max_value ' ],
1751
- 'survey_group_pri ' => $ row ['survey_group_pri ' ],
1752
- 'survey_group_sec1 ' => $ row ['survey_group_sec1 ' ],
1753
- 'survey_group_sec2 ' => $ row ['survey_group_sec2 ' ],
1754
- ];
1755
-
1756
- if (isset ($ row ['is_required ' ])) {
1757
- $ params ['is_required ' ] = $ row ['is_required ' ];
1758
- }
1759
-
1760
- $ insertId = Database::insert ($ surveyQuestionTable , $ params );
1761
- if ($ insertId ) {
1762
- /*$sql = "UPDATE $surveyQuestionTable
1763
- SET question_id = iid
1764
- WHERE iid = $insertId";
1765
- Database::query($sql);*/
1766
-
1767
- $ question_id [$ row ['iid ' ]] = $ insertId ;
1768
- }
1769
- }
1770
-
1771
- // Get questions options
1772
- $ sql = "SELECT * FROM $ surveyOptionsTable
1773
- WHERE survey_id = $ surveyId AND c_id = $ originalCourseId " ;
1774
-
1775
- $ res = Database::query ($ sql );
1776
- while ($ row = Database::fetch_assoc ($ res )) {
1777
- $ params = [
1778
- 'c_id ' => $ targetCourseId ,
1779
- 'question_id ' => $ question_id [$ row ['question_id ' ]],
1780
- 'survey_id ' => $ newSurveyId ,
1781
- 'option_text ' => $ row ['option_text ' ],
1782
- 'sort ' => $ row ['sort ' ],
1783
- 'value ' => $ row ['value ' ],
1784
- ];
1785
- $ insertId = Database::insert ($ surveyOptionsTable , $ params );
1786
- if ($ insertId ) {
1787
- $ sql = "UPDATE $ surveyOptionsTable SET question_option_id = $ insertId WHERE iid = $ insertId " ;
1788
- Database::query ($ sql );
1789
- }
1790
- }
1791
-
1792
- return $ newSurveyId ;
1793
- }
1794
-
1795
- return false ;
1796
- }
1797
-
1798
1648
/**
1799
1649
* Copy/duplicate one question (into the same survey).
1800
1650
* Note: Relies on the question iid to find all necessary info.
0 commit comments