@@ -476,7 +476,7 @@ public function writeSlide(Slide $pSlide)
476
476
$ objWriter ->endElement ();
477
477
478
478
// Loop shapes
479
- $ shapeId = 0 ;
479
+ $ shapeId = 1 ;
480
480
$ shapes = $ pSlide ->getShapeCollection ();
481
481
foreach ($ shapes as $ shape ) {
482
482
// Increment $shapeId
@@ -514,6 +514,272 @@ public function writeSlide(Slide $pSlide)
514
514
if (!is_null ($ pSlide ->getTransition ())) {
515
515
$ this ->writeTransition ($ objWriter , $ pSlide ->getTransition ());
516
516
}
517
+ $ shapeId = 1 ;
518
+ $ shapes = $ pSlide ->getShapeCollection ();
519
+
520
+ $ animations = $ pSlide ->getAnimations ();
521
+
522
+ if (count ($ animations ) > 0 ) {
523
+
524
+ $ hashToIdMap = array ();
525
+
526
+ foreach ($ shapes as $ shape ) {
527
+ $ shapeId += 1 ;
528
+ $ hash = $ shape ->getHashCode ();
529
+ $ hashToIdMap [$ hash ] = $ shapeId ;
530
+ }
531
+
532
+ $ animationIds = array ();
533
+
534
+ foreach ($ animations as $ animation ) {
535
+ $ shapesInAnimation = $ animation ->getShapeCollection ();
536
+ foreach ($ shapesInAnimation as $ shape ) {
537
+ $ hash = $ shape ->getHashCode ();
538
+ $ animationIds [] = $ hashToIdMap [$ hash ];
539
+ }
540
+ }
541
+
542
+ $ idCount = 1 ;
543
+
544
+ $ objWriter ->startElement ('p:timing ' );
545
+
546
+ $ objWriter ->startElement ('p:tnLst ' );
547
+
548
+ $ objWriter ->startElement ('p:par ' );
549
+
550
+ $ objWriter ->startElement ('p:cTn ' );
551
+ $ objWriter ->writeAttribute ('id ' , $ idCount );
552
+ $ idCount += 1 ;
553
+ $ objWriter ->writeAttribute ('dur ' , 'indefinite ' );
554
+ $ objWriter ->writeAttribute ('restart ' , 'never ' );
555
+ $ objWriter ->writeAttribute ('nodeType ' , 'tmRoot ' );
556
+
557
+ $ objWriter ->startElement ('p:childTnLst ' );
558
+
559
+ $ objWriter ->startElement ('p:seq ' );
560
+ $ objWriter ->writeAttribute ('concurrent ' , '1 ' );
561
+ $ objWriter ->writeAttribute ('nextAc ' , 'seek ' );
562
+
563
+ $ objWriter ->startElement ('p:cTn ' );
564
+ $ objWriter ->writeAttribute ('id ' , $ idCount );
565
+ $ idCount += 1 ;
566
+ $ objWriter ->writeAttribute ('dur ' , 'indefinite ' );
567
+ $ objWriter ->writeAttribute ('nodeType ' , 'mainSeq ' );
568
+
569
+ $ objWriter ->startElement ("p:childTnLst " );
570
+
571
+ //each animation has multiple shapes
572
+ foreach ($ animations as $ animation ) {
573
+
574
+ $ objWriter ->startElement ("p:par " );
575
+
576
+ $ objWriter ->startElement ("p:cTn " );
577
+ $ objWriter ->writeAttribute ("id " , $ idCount );
578
+ $ idCount += 1 ;
579
+ $ objWriter ->writeAttribute ("fill " , "hold " );
580
+
581
+ $ objWriter ->startElement ('p:stCondLst ' );
582
+
583
+ $ objWriter ->startElement ('p:cond ' );
584
+ $ objWriter ->writeAttribute ("delay " , "indefinite " );
585
+ $ objWriter ->endElement ();
586
+
587
+ $ objWriter ->endElement ();
588
+
589
+ $ objWriter ->startElement ("p:childTnLst " );
590
+
591
+ $ objWriter ->startElement ("p:par " );
592
+
593
+ $ objWriter ->startElement ("p:cTn " );
594
+ $ objWriter ->writeAttribute ("id " , $ idCount );
595
+ $ idCount += 1 ;
596
+ $ objWriter ->writeAttribute ("fill " , "hold " );
597
+
598
+ $ objWriter ->startElement ('p:stCondLst ' );
599
+
600
+ $ objWriter ->startElement ('p:cond ' );
601
+ $ objWriter ->writeAttribute ("delay " , "0 " );
602
+ $ objWriter ->endElement ();
603
+
604
+ $ objWriter ->endElement ();
605
+
606
+ $ objWriter ->startElement ("p:childTnLst " );
607
+
608
+ $ shapesInAnimation = $ animation ->getShapeCollection ();
609
+
610
+ $ firstInAni = true ;
611
+
612
+ foreach ($ shapesInAnimation as $ shape ) {
613
+ $ hash = $ shape ->getHashCode ();
614
+ $ shapeId = $ hashToIdMap [$ hash ];
615
+
616
+ $ objWriter ->startElement ("p:par " );
617
+
618
+ $ objWriter ->startElement ("p:cTn " );
619
+ $ objWriter ->writeAttribute ("id " , $ idCount );
620
+ $ idCount += 1 ;
621
+ $ objWriter ->writeAttribute ("presetID " , "1 " );
622
+ $ objWriter ->writeAttribute ("presetClass " , "entr " );
623
+ $ objWriter ->writeAttribute ("fill " , "hold " );
624
+ $ objWriter ->writeAttribute ("presetSubtype " , "0 " );
625
+ $ objWriter ->writeAttribute ("grpId " , "0 " );
626
+
627
+ $ nodeType = $ firstInAni ? "clickEffect " : "withEffect " ;
628
+
629
+ $ objWriter ->writeAttribute ("nodeType " , $ nodeType );
630
+
631
+ $ objWriter ->startElement ("p:stCondLst " );
632
+
633
+ $ objWriter ->startElement ("p:cond " );
634
+ $ objWriter ->writeAttribute ("delay " , "0 " );
635
+ $ objWriter ->endElement ();
636
+
637
+ $ objWriter ->endElement ();
638
+
639
+ $ objWriter ->startElement ("p:childTnLst " );
640
+
641
+ $ objWriter ->startElement ("p:set " );
642
+
643
+ $ objWriter ->startElement ("p:cBhvr " );
644
+
645
+ $ objWriter ->startElement ("p:cTn " );
646
+ $ objWriter ->writeAttribute ("id " , $ idCount );
647
+ $ idCount += 1 ;
648
+ $ objWriter ->writeAttribute ("dur " , "1 " );
649
+ $ objWriter ->writeAttribute ("fill " , "hold " );
650
+
651
+ $ objWriter ->startElement ("p:stCondLst " );
652
+
653
+ $ objWriter ->startElement ("p:cond " );
654
+ $ objWriter ->writeAttribute ("delay " , "0 " );
655
+ $ objWriter ->endElement ();
656
+
657
+ $ objWriter ->endElement ();
658
+
659
+
660
+
661
+ $ objWriter ->endElement ();
662
+
663
+ $ objWriter ->startElement ("p:tgtEl " );
664
+
665
+ $ objWriter ->startElement ("p:spTgt " );
666
+ //shape id
667
+ $ objWriter ->writeAttribute ("spid " , $ shapeId );
668
+ $ objWriter ->endElement ();
669
+
670
+ $ objWriter ->endElement ();
671
+
672
+ $ objWriter ->startElement ("p:attrNameLst " );
673
+
674
+ $ objWriter ->writeElement ("p:attrName " , "style.visibility " );
675
+
676
+ $ objWriter ->endElement ();
677
+
678
+ $ objWriter ->endElement ();
679
+
680
+ $ objWriter ->startElement ("p:to " );
681
+
682
+ $ objWriter ->startElement ("p:strVal " );
683
+ $ objWriter ->writeAttribute ("val " , "visible " );
684
+ $ objWriter ->endElement ();
685
+
686
+ $ objWriter ->endElement ();
687
+
688
+ $ objWriter ->endElement ();
689
+
690
+ $ objWriter ->endElement (); //end child tn lst
691
+
692
+ $ objWriter ->endElement (); //end ctn
693
+
694
+ $ objWriter ->endElement ();
695
+
696
+ $ firstInAni = false ;
697
+ }
698
+
699
+
700
+ $ objWriter ->endElement (); //end child lst
701
+
702
+ $ objWriter ->endElement (); //end ctn
703
+
704
+ $ objWriter ->endElement (); //end par
705
+
706
+
707
+ $ objWriter ->endElement (); //end childtnlist
708
+
709
+ $ objWriter ->endElement (); //end ctn
710
+
711
+ $ objWriter ->endElement (); //end par
712
+
713
+ }
714
+
715
+
716
+ $ objWriter ->endElement ();
717
+
718
+ $ objWriter ->endElement ();
719
+
720
+ ///prevCondLst
721
+ $ objWriter ->startElement ("p:prevCondLst " );
722
+
723
+ $ objWriter ->startElement ('p:cond ' );
724
+ $ objWriter ->writeAttribute ('evt ' , 'onPrev ' );
725
+ $ objWriter ->writeAttribute ('delay ' , '0 ' );
726
+
727
+ $ objWriter ->startElement ('p:tgtEl ' );
728
+
729
+ $ objWriter ->writeElement ('p:sldTgt ' , null );
730
+
731
+ $ objWriter ->endElement ();
732
+
733
+ $ objWriter ->endElement ();
734
+
735
+ $ objWriter ->endElement ();
736
+
737
+ //nextCondLst
738
+ $ objWriter ->startElement ("p:nextCondLst " );
739
+
740
+ $ objWriter ->startElement ('p:cond ' );
741
+ $ objWriter ->writeAttribute ('evt ' , 'onNext ' );
742
+ $ objWriter ->writeAttribute ('delay ' , '0 ' );
743
+
744
+ $ objWriter ->startElement ('p:tgtEl ' );
745
+
746
+ $ objWriter ->writeElement ('p:sldTgt ' , null );
747
+
748
+ $ objWriter ->endElement ();
749
+
750
+ $ objWriter ->endElement ();
751
+
752
+ $ objWriter ->endElement ();
753
+
754
+ $ objWriter ->endElement (); //end p:seq
755
+
756
+ $ objWriter ->endElement (); //end p:childTnLst
757
+
758
+ $ objWriter ->endElement (); //end ctn
759
+
760
+ $ objWriter ->endElement (); //end par
761
+
762
+ $ objWriter ->endElement (); //end tnLst
763
+
764
+ $ objWriter ->startElement ('p:bldLst ' );
765
+
766
+ //add in ids of all shapes in this slides animations
767
+
768
+ foreach ($ animationIds as $ id ) {
769
+ $ objWriter ->startElement ('p:bldP ' );
770
+ $ objWriter ->writeAttribute ("spid " , $ id );
771
+ $ objWriter ->writeAttribute ('grpId ' , 0 );
772
+ $ objWriter ->endELement ();
773
+ }
774
+
775
+
776
+ $ objWriter ->endElement (); // end bldLst
777
+
778
+ $ objWriter ->endElement (); //end timing
779
+
780
+ $ objWriter ->endElement ();
781
+ }
782
+
517
783
518
784
$ objWriter ->endElement ();
519
785
0 commit comments