class= " lineNumbers "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
908:
909:
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944:
945:
946:
947:
948:
949:
950:
951:
952:
953:
954:
955:
956:
957:
958:
959:
960:
961:
962:
963:
964:
965:
966:
967:
968:
969:
970:
971:
972:
973:
974:
975:
976:
977:
978:
979:
980:
981:
982:
983:
984:
985:
986:
987:
988:
989:
990:
991:
992:
993:
994:
995:
996:
997:
998:
999:
1000:
1001:
1002:
1003:
1004:
1005:
1006:
1007:
1008:
1009:
1010:
1011:
1012:
1013:
1014:
1015:
1016:
1017:
1018:
1019:
1020:
1021:
1022:
1023:
1024:
1025:
1026:
1027:
1028:
1029:
1030:
1031:
1032:
1033:
1034:
1035:
1036:
1037:
1038:
1039:
1040:
1041:
1042:
1043:
1044:
1045:
1046:
1047:
1048:
1049:
1050:
1051:
1052:
1053:
1054:
1055:
1056:
1057:
1058:
1059:
1060:
1061:
1062:
1063:
1064:
1065:
1066:
1067:
1068:
1069:
1070:
1071:
1072:
1073:
1074:
1075:
1076:
1077:
1078:
1079:
1080:
1081:
1082:
1083:
1084:
1085:
1086:
1087:
1088:
1089:
1090:
1091:
1092:
1093:
1094:
1095:
1096:
1097:
1098:
1099:
1100:
1101:
1102:
1103:
1104:
1105:
1106:
1107:
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115:
1116:
1117:
1118:
1119:
1120:
1121:
1122:
1123:
1124:
1125:
1126:
1127:
1128:
1129:
1130:
1131:
1132:
1133:
1134:
1135:
1136:
1137:
1138:
1139:
1140:
1141:
1142:
1143:
1144:
1145:
1146:
1147:
1148:
1149:
1150:
1151:
1152:
1153:
1154:
1155:
1156:
1157:
1158:
1159:
1160:
1161:
1162:
1163:
1164:
1165:
1166:
1167:
1168:
1169:
1170:
1171:
1172:
1173:
1174:
1175:
1176:
1177:
1178:
1179:
1180:
1181:
1182:
1183:
1184:
1185:
1186:
1187:
1188:
1189:
1190:
1191:
1192:
1193:
1194:
1195:
1196:
1197:
1198:
1199:
1200:
1201:
1202:
1203:
1204:
1205:
1206:
1207:
1208:
1209:
1210:
1211:
1212:
1213:
1214:
1215:
1216:
1217:
1218:
1219:
1220:
1221:
1222:
1223:
1224:
1225:
1226:
1227:
1228:
1229:
1230:
1231:
1232:
1233:
1234:
1235:
1236:
1237:
1238:
1239:
1240:
1241:
1242:
1243:
1244:
1245:
1246:
1247:
1248:
1249:
1250:
1251:
1252:
1253:
1254:
1255:
1256:
1257:
1258:
1259:
1260:
1261:
1262:
1263:
1264:
1265:
1266:
1267:
1268:
1269:
1270:
1271:
1272:
1273:
1274:
1275:
1276:
1277:
1278:
1279:
1280:
1281:
1282:
1283:
1284:
1285:
1286:
1287:
1288:
1289:
1290:
1291:
1292:
1293:
1294:
1295:
1296:
1297:
1298:
1299:
1300:
1301:
1302:
1303:
1304:
1305:
1306:
1307:
1308:
1309:
1310:
1311:
1312:
1313:
1314:
1315:
1316:
1317:
1318:
1319:
1320:
1321:
1322:
1323:
1324:
1325:
1326:
1327:
1328:
1329:
1330:
1331:
1332:
1333:
1334:
1335:
1336:
1337:
1338:
1339:
1340:
1341:
1342:
1343:
1344:
1345:
1346:
1347:
1348:
1349:
1350:
1351:
1352:
1353:
1354:
1355:
1356:
1357:
1358:
1359:
1360:
1361:
1362:
1363:
1364:
1365:
1366:
1367:
1368:
1369:
1370:
1371:
1372:
1373:
1374:
1375:
1376:
1377:
1378:
1379:
1380:
1381:
1382:
1383:
1384:
1385:
1386:
1387:
1388:
1389:
1390:
1391:
1392:
1393:
1394:
1395:
1396:
1397:
1398:
1399:
1400:
1401:
1402:
1403:
1404:
1405:
1406:
1407:
1408:
1409:
1410:
1411:
1412:
1413:
1414:
1415:
1416:
1417:
1418:
1419:
1420:
1421:
1422:
1423:
1424:
1425:
1426:
1427:
1428:
1429:
1430:
1431:
1432:
1433:
1434:
1435:
1436:
1437:
1438:
1439:
1440:
1441:
1442:
1443:
1444:
1445:
1446:
1447:
1448:
1449:
1450:
1451:
1452:
1453:
1454:
1455:
1456:
1457:
1458:
1459:
1460:
1461:
1462:
1463:
1464:
1465:
1466:
1467:
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516:
1517:
1518:
1519:
1520:
1521:
1522:
1523:
1524:
1525:
1526:
1527:
1528:
1529:
1530:
1531:
1532:
1533:
1534:
1535:
1536:
1537:
1538:
1539:
1540:
1541:
1542:
1543:
1544:
1545:
1546:
1547:
1548:
1549:
1550:
1551:
1552:
1553:
1554:
1555:
1556:
1557:
1558:
1559:
1560:
1561:
1562:
1563:
1564:
1565:
1566:
1567:
1568:
1569:
1570:
1571:
1572:
1573:
1574:
1575:
1576:
1577:
1578:
1579:
1580:
1581:
1582:
1583:
1584:
1585:
1586:
1587:
1588:
1589:
1590:
1591:
1592:
1593:
1594:
1595:
1596:
1597:
1598:
1599:
1600:
1601:
1602:
1603:
1604:
1605:
1606:
1607:
1608:
1609:
1610:
1611:
1612:
1613:
1614:
1615:
1616:
1617:
1618:
1619:
1620:
1621:
1622:
1623:
1624:
1625:
1626:
1627:
1628:
1629:
1630:
1631:
1632:
1633:
1634:
1635:
1636:
1637:
1638:
1639:
1640:
1641:
1642:
1643:
1644:
1645:
1646:
1647:
1648:
1649:
1650:
1651:
1652:
1653:
1654:
1655:
1656:
1657:
1658:
1659:
1660:
1661:
1662:
1663:
1664:
1665:
1666:
1667:
1668:
1669:
1670:
1671:
1672:
1673:
1674:
1675:
1676:
1677:
1678:
1679:
1680:
1681:
1682:
1683:
1684:
1685:
1686:
1687:
1688:
1689:
1690:
1691:
1692:
1693:
1694:
1695:
1696:
1697:
1698:
1699:
1700:
1701:
1702:
1703:
1704:
1705:
1706:
1707:
1708:
1709:
1710:
1711:
1712:
1713:
1714:
1715:
1716:
1717:
1718:
1719:
1720:
1721:
1722:
1723:
1724:
1725:
1726:
1727:
1728:
1729:
1730:
1731:
1732:
1733:
1734:
1735:
1736:
1737:
1738:
1739:
1740:
1741:
1742:
1743:
1744:
1745:
1746:
1747:
1748:
1749:
1750:
1751:
1752:
1753:
1754:
1755:
1756:
1757:
1758:
1759:
1760:
1761:
1762:
1763:
1764:
1765:
1766:
1767:
1768:
1769:
1770:
1771:
1772:
1773:
1774:
1775:
1776:
1777:
1778:
1779:
1780:
1781:
1782:
1783:
1784:
1785:
1786:
1787:
1788:
1789:
1790:
1791:
1792:
1793:
1794:
1795:
1796:
1797:
1798:
1799:
1800:
1801:
1802:
1803:
1804:
1805:
1806:
1807:
1808:
1809:
1810:
1811:
1812:
1813:
1814:
1815:
1816:
1817:
1818:
1819:
1820:
1821:
1822:
1823:
1824:
1825:
1826:
1827:
1828:
1829:
1830:
1831:
1832:
1833:
1834:
1835:
1836:
1837:
1838:
1839:
1840:
1841:
1842:
1843:
1844:
1845:
1846:
1847:
1848:
1849:
1850:
1851:
1852:
1853:
1854:
1855:
1856:
1857:
1858:
1859:
1860:
1861:
1862:
1863:
1864:
1865:
1866:
1867:
1868:
1869:
1870:
1871:
1872:
1873:
1874:
1875:
1876:
1877:
1878:
1879:
1880:
1881:
1882:
1883:
1884:
1885:
1886:
1887:
1888:
1889:
1890:
1891:
1892:
1893:
1894:
1895:
1896:
1897:
1898:
1899:
1900:
1901:
1902:
1903:
1904:
1905:
1906:
1907:
1908:
1909:
1910:
1911:
1912:
1913:
1914:
1915:
1916:
1917:
1918:
1919:
1920:
1921:
1922:
1923:
1924:
1925:
1926:
1927:
1928:
1929:
1930:
1931:
1932:
1933:
1934:
1935:
1936:
1937:
1938:
1939:
1940:
1941:
1942:
1943:
1944:
1945:
1946:
1947:
1948:
1949:
1950:
1951:
1952:
1953:
1954:
1955:
1956:
1957:
1958:
1959:
1960:
1961:
1962:
1963:
1964:
1965:
1966:
1967:
1968:
1969:
1970:
1971:
1972:
1973:
1974:
1975:
1976:
1977:
1978:
1979:
1980:
1981:
1982:
1983:
1984:
1985:
1986:
1987:
1988:
1989:
1990:
1991:
1992:
1993:
1994:
1995:
1996:
1997:
1998:
1999:
2000:
2001:
2002:
2003:
2004:
2005:
2006:
2007:
2008:
2009:
2010:
2011:
2012:
2013:
2014:
2015:
2016:
2017:
2018:
2019:
2020:
2021:
2022:
2023:
2024:
2025:
2026:
2027:
2028:
2029:
2030:
2031:
2032:
2033:
2034:
2035:
2036:
2037:
2038:
2039:
2040:
2041:
2042:
2043:
2044:
2045:
2046:
2047:
2048:
2049:
2050:
2051:
2052:
2053:
2054:
2055:
2056:
2057:
2058:
2059:
2060:
2061:
2062:
2063:
2064:
2065:
2066:
2067:
2068:
2069:
2070:
2071:
2072:
2073:
2074:
2075:
2076:
2077:
2078:
2079:
2080:
2081:
2082:
2083:
2084:
2085:
2086:
2087:
2088:
2089:
2090:
2091:
2092:
2093:
2094:
2095:
2096:
2097:
2098:
2099:
2100:
2101:
2102:
2103:
2104:
2105:
|
class=
>< " class= " id= " codeSnippet651343 ». t («модуль комментария позволяет визитерам прокомментировать на ваших столбах, создавая специальные доски обсуждения. Любое href= " @content-type " >content type Default установленный к Read/Write для того чтобы позволить комментарии, или Disabled, предотвратить комментарии. Установки индикации комментария и другое управление могут также быть подгоняны для каждого содержимого типа (некоторые установки индикации ориентированный на заказчика индивидуальными потребителями). », блок («@content-type» url => («admin/содержание/типы "))). «»;
$output. = «». t («позволения комментария заданы к ролям потребителя, и использованы для того чтобы обусловить позволены ли подметные потребители (или другие роли) прокомментировать на столбах. Если подметные потребители позволены прокомментировать, то их индивидуальные данные по контакта могут быть сохранены в печеньях, котор хранят на их местном компьютере для пользы в более последних представлениях комментария. Когда комментарий не имеет никакие ответы, он может (опционно) быть отредактированным своим автором. Модуль комментария использует такие же имеющиеся формы входного сигнала и бирки HTML создавая другие формы content."). « »;
$output. = «». t («для больше информации, см. он-лайн вход руководства для >Comment module " @comment " href= 'http://drupal.org/handbook/modules/comment/')). «»;
возвращенное $output;
случай «admin/содержание/комментарий»:
возвратите «». t («ниже список самых последних комментариев вывешенных к вашему месту. Щелкните дальше вопросом для того чтобы увидеть комментарий, имя автора для того чтобы редактировать данные по потребителя автора, «редактируйте» для того чтобы доработать текст, и «delete» для того чтобы извлечь их submission."). « »;
случай «admin/содержание/комментарий/утверждение»:
возвратите «». t («ниже список комментариев вывешенный к вашему месту нужно утверждение. Для того чтобы одобрить комментарий, щелкните дальше «редактируйте» и после этого изменяйте свое «состояние умеренности» к утвержденный. Щелкните дальше вопросом для того чтобы увидеть комментарий, имя автора для того чтобы редактировать данные по потребителя автора, «редактируйте» для того чтобы доработать текст, и «delete» для того чтобы извлечь их submission."). « »;
}
}
/**
* Вставка hook_theme ().
*
comment_theme функции () {
возвращенный блок (
блок => «comment_block» (
блок => «аргументов» (),
),
блок => «comment_admin_overview» (
блок => «аргументов» (NULL => «формы»),
),
блок => «comment_preview» (
блок => «аргументов» (NULL => «комментария», NULL => «узла», блок => «соединений» (), «видимое» => 1),
),
блок => «comment_view» (
блок => «аргументов» (NULL => «комментария», NULL => «узла», блок => «соединений» (), «видимое» => 1),
),
блок => «comment_controls» (
блок => «аргументов» (NULL => «формы»),
),
блок => «комментария» (
=> «комментарий» «шаблона»,
блок => «аргументов» (NULL => «комментария», NULL => «узла», блок => «соединений» ()),
),
«comment_folded» блок => (
» комментировать-сложенное => ««шаблона»,
блок => «аргументов» (NULL => «комментария»),
),
«comment_flat_collapsed» блок => (
блок => «аргументов» (NULL => NULL, «узла» => «комментария»),
),
«comment_flat_expanded» блок => (
блок => «аргументов» (NULL => NULL, «узла» => «комментария»),
),
«comment_thread_collapsed» блок => (
блок => «аргументов» (NULL => NULL, «узла» => «комментария»),
),
«comment_thread_expanded» блок => (
блок => «аргументов» (NULL => NULL, «узла» => «комментария»),
),
«comment_post_forbidden» блок => (
блок => «аргументов» (NULL => «nid»),
),
блок => «comment_wrapper» (
=> «комментировать-завертчица» «шаблона»,
блок => «аргументов» (NULL => NULL, «узла» => «содержания»),
),
«comment_submitted» блок => (
блок => «аргументов» (NULL => «комментария»),
),
);
}
/**
* Вставка hook_menu ().
*
comment_menu функции () {
$items [«admin/содержание/комментарий»] = блок (
» => ««названия комментирует»,
список» => ««описания и редактирует комментарии места и косу умеренности комментария. »,
«вызовите => «comment_admin» callback»,
«достигните аргументов» блока => («управьте комментариями "),
«храньте» => «comment.admin.inc»,
);
Платы //:
$items [«admin/содержание/комментарий/новая»] = блок (
=> «опубликованные комментарии» «названия»,
«напечатайте» => на машинке MENU_DEFAULT_LOCAL_TASK,
«утяжельте» => -10,
);
$items [«admin/содержание/комментарий/утверждение»] = блок (
«озаглавьте» => «косу утверждения»,
«вызовите аргументы» блок => («утверждение "),
«достигните аргументов» блока => («управьте комментариями "),
«напечатайте» => на машинке MENU_LOCAL_TASK,
«храньте» => «comment.admin.inc»,
);
$items [«комментарий/delete»] = блок (
=> «комментарий «названия» Delete»,
«вызовите => «comment_delete» callback»,
«достигните аргументов» блока => («управьте комментариями "),
«напечатайте» => на машинке MENU_CALLBACK,
«храньте» => «comment.admin.inc»,
);
$items [«комментарий/редактирует»] = блок (
» => ««названия редактирует комментарий»,
«вызовите => «comment_edit» callback»,
«достигните аргументов» блока => («комментарии столба "),
«напечатайте» => на машинке MENU_CALLBACK,
«храньте» => «comment.pages.inc»,
);
$items [«комментарий/reply/%node»] = блок (
=> «ответ «названия» к комментарию»,
«вызовите» => «callback comment_reply»,
«вызовите блок => аргументы» (2),
«достигните => «node_access» callback»,
«достигните блок => аргументов» («взгляд», 2),
«напечатайте» => на машинке MENU_CALLBACK,
«храньте» => «comment.pages.inc»,
);
возвращенное $items;
}
/**
* Вставка hook_node_type ().
*
comment_node_type функции ($op, $info) {
$settings = блок (
«комментарий»,
«comment_default_mode»,
«comment_default_order»,
«comment_default_per_page»,
«comment_controls»,
«comment_anonymous»,
«comment_subject_field»,
«comment_preview»,
«comment_form_location»,
);
переключите ($op) {
покрывайте «delete»:
foreach ($settings как $setting) {
variable_del ($setting. «_». $info->type);
}
пролом;
}
}
/**
* Вставка hook_perm ().
*
comment_perm функции () {
возвращенный блок («доступ комментирует», «столб комментирует», «управляет комментариями», «комментариями столба без утверждения ");
}
/**
* Вставка hook_block ().
*
* Производит блок с самыми недавними комментариями.
*
comment_block функции ($op = «список», $delta = 0) {
если (список == $op «") {, то
$blocks [0] [«info»] = t («недавние комментарии ");
возвращенное $blocks;
}
еще если (user_access && «взгляда» == $op («комментарии доступа ")) {, то
$block [«вопрос»] = t («недавние комментарии ");
$block [«содержание»] = тема («comment_block ");
возвращенное $block;
}
}
/**
* Находите несколько недавние комментарии. Это сделано в 2 шагах.
* 1. находит узлы n (определенного $number) имеют самую недавнюю
* комментарии. Это сделано путем запрашивая node_comment_statistics имеет
* индексом на last_comment_timestamp, и будет таким образом быстрый вопрос.
* 2. нагружая информацию от таблицы комментариев основанной на nids нашли
* в разделе 1.
*
* @param $number
* (опционно) максимальный число комментариев, котор нужно найти.
* @return
* Блок комментария возражает каждое содержа nid,
* вопрос, cid, и фиксация времени, или пустой блок если не недавних
* комментарии видимые к в настоящее время потребителю.
*
функция comment_get_recent ($number = 10) {
// выбирает узлы $number (видимые к в настоящее время потребителю) с больше всего
комментарии // недавние. Это эффективные должными к индексу дальше
last_comment_timestamp //.
$result = db_query_range (db_rewrite_sql («ОТБОРНОЕ nc.nid ОТ {node_comment_statistics} nc ГДЕ ment_count nc.com > 0 ЗАКАЗОВ nc.last_comment_timestamp DESC», «nc "), 0, $number);
$nids = блок ();
пока ($row = db_fetch_object ($result)) {
$nids [] = $row->nid;
}
$comments = блок ();
если (! опорожните ($nids)) {
// от среди комментариев на узлах выбранных в первом вопросе,
// находит комментарии $number самые недавние.
$result = db_query_range («ОТБОРНЫЕ c.nid, c.subject, c.cid, c.timestamp ОТ {комментарии} c ВНУТРЕННЕГО СОЕДИНЯЮТ {узел} n НА n.nid = c.nid ГДЕ c.nid ВНУТРИ (". взрывайте («,», $nids) .") И n.status = 1 И ЗАКАЗ c.status = %d c.cid DESC», COMMENT_PUBLISHED, 0, $number);
пока ($comment = db_fetch_object ($result)) {
$comments [] = $comment;
}
}
возвращенное $comments;
}
/**
* Высчитайте номер страницы для первого нового комментария.
*
* @param $num_comments
* Количество комментариев.
* @param $new_replies
* Количество новых ответов.
* @param $node
* Первый новый узел комментария.
* @return
* «page=X» если номер страницы большле чем нул; пустой шнур в противном случае.
*
comment_new_page_count функции ($num_comments, $new_replies, $node) {
$comments_per_page = _comment_get_display_setting («comments_per_page», $node);
$mode = _comment_get_display_setting («режим», $node);
$order = _comment_get_display_setting («вид», $node);
$pagenum = NULL;
$flat = in_array ($mode, блок (COMMENT_MODE_FLAT_COLLAPSED, COMMENT_MODE_FLAT_EXPANDED));
если (<= $comments_per_page $num_comments || (== COMMENT_ORDER_NEWEST_FIRST && $order $flat)) {
// только одна страница комментариев или плоского первого форума и самых новых.
Комментарий // сперва новый всегда будет на первой странице.
$pageno = 0;
}
еще {
если ($flat) {, то
Комментарии квартиры // и самое старое первое.
$count = $num_comments - $new_replies;
}
еще {
// продело нитку комментарии. См. документацию для comment_render ().
если (== COMMENT_ORDER_NEWEST_FIRST $order) {, то
Первое // самое новое: находите последнюю резьбу с новым комментарием
ЗАКАЗ $result = db_query («(ОТБОРНАЯ резьба ОТ {комментарии} ГДЕ nid = %d И состояние = 0 ЗАКАЗОВ ПРЕДЕЛОМ %d фиксации времени DESC) ПРЕДЕЛОМ 1», $node->nid, $new_replies резьбы DESC);
$thread = db_result ($result);
$result_count = db_query («ОТБОРНЫЙ ОТСЧЕТ (*) ОТ {комментарии} ГДЕ nid = %d И состояние = 0 И резьба > «». $thread. «» «, $node->nid);
}
еще {
Первое // самое старое: находите первую резьбу с новым комментарием
ЗАКАЗ $result = db_query («(ОТБОРНАЯ резьба ОТ {комментарии} ГДЕ nid = %d И состояние = 0 ЗАКАЗОВ ПРЕДЕЛОМ %d фиксации времени DESC) ПРЕДЕЛОМ 1», $node->nid, $new_replies ПОДСТРОКИ (резьбы, 1, (ДЛИНА (резьба) - 1)));
$thread = substr (db_result ($result), 0, -1);
$result_count = db_query («ОТБОРНЫЙ ОТСЧЕТ (*) ОТ {комментарии} ГДЕ nid = %d И состояние = 0 И ПОДСТРОКА (резьба, 1, (ДЛИНА (резьба) - 1)) < «». $thread. «» «, $node->nid);
}
$count = db_result ($result_count);
}
$pageno = $count/$comments_per_page;
}
если (>= $pageno 1) {, то
$pagenum = «page=». intval ($pageno);
}
возвращенное $pagenum;
}
/**
* Возвращает форматный список недавних комментариев, котор нужно показать в блоке комментария.
*
* @return
* HTML списка комментария.
* @ingroup themeable
*
theme_comment_block функции () {
$items = блок ();
foreach (comment_get_recent () как $comment) {
$items [] = l ($comment->subject, «узел». $comment->nid, блок (=> «комментарий» «части». $comment->cid)). « ». t («@time тому назад», блок (=> «@time» format_interval (время () - $comment->timestamp)));
}
если ($items) {, то
возвращенная тема («item_list», $items);
}
}
/**
* Вставка hook_link ().
*
comment_link функции ($type, $node = NULL, $teaser = ЛОЖНО) {
$links = блок ();
если (&& $node->comment «узла» == $type) {, то
если ($teaser) {, то
Страница // главная: покажите число комментариев были вывешены.
если (user_access («комментарии доступа ")) {, то
$all = comment_num_all ($node->nid);
если ($all) {, то
$links [«comment_comments»] = блок (
«название» => format_plural ($all, «1 комментарий», «комментарии @count "),
=> «node/$node->nid» «href»,
«приписывает» блок => («название» => t («скачка к первому комментарию это posting.")),
» => ««части комментирует»
);
$new = comment_num_new ($node->nid);
если ($new) {, то
$links [«comment_new_comments»] = блок (
«название» => format_plural ($new, «1 новый комментарий», «комментарии @count новые "),
=> «node/$node->nid» «href»,
comment_new_page_count => «вопроса» ($all, $new, $node),
«приписывает» блок => («название» => t («скачка к первому новому комментарию это posting.")),
» => ««части новое»
);
}
}
еще {
если (== COMMENT_NODE_READ_WRITE $node->comment) {, то
если (user_access («комментарии столба ")) {, то
$links [«comment_add»] = блок (
«название» => t («добавьте новый комментарий "),
=> «комментарий «href»/reply/$node->nid»,
«приписывает» блок => («название» => t («добавьте новый комментарий до это page.")),
«разделите» => «комментировать-форму»
);
}
еще {
$links [«comment_forbidden»] [«название»] = тема («comment_post_forbidden», $node);
}
}
}
}
}
еще {
Страница узла //: добавьте «соединение комментария столба» если потребитель позволен к
столб // комментирует, если этот узел не только для чтения, и если форма комментария уже не показана
если (== COMMENT_NODE_READ_WRITE $node->comment) {, то
если (user_access («комментарии столба ")) {, то
если (variable_get, то («comment_form_location_». $NODE->TYPE, == COMMENT_FORM_SEPARATE_PAGE COMMENT_FORM_SEPARATE_PAGE)) {
$links [«comment_add»] = блок (
«название» => t («добавьте новый комментарий "),
=> «комментарий «href»/reply/$node->nid»,
«приписывает» блок => («название» => t («делите ваши мысли и мнения отнесенные до это posting.")),
«разделите» => «комментировать-форму»
);
}
}
еще {
$links [«comment_forbidden»] [«название»] = тема («comment_post_forbidden», $node);
}
}
}
}
если (комментарий == $type «") {, то
$links = comment_links ($node, $teaser);
}
если (isset, то ($links [«comment_forbidden»])) {
$links [«comment_forbidden»] [«HTML»] = TRUE;
}
возвратите $links;
}
/**
* Вставка hook_form_alter ().
*
comment_form_alter функции (&$form, $form_state, $form_id) {
если (isset, то && «node_type_form» == $form_id ($form [«тождественность»] [«тип»])) {
$form [«комментарий»] = блок (
=> «fieldset» «#type»,
«#title» => t («установки комментария "),
«#collapsible» => ПОИСТИНЕ,
«#collapsed» => ПОИСТИНЕ,
);
$form [«комментарий»] [«комментарий»] = блок (
» => ««#type передает по радио»,
«#title» => t («установка комментария невыполнения обязательства "),
variable_get => «#default_value» («comment_». >type $form [«#node_type»] -, COMMENT_NODE_READ_WRITE),
=> «#options» (t («вывел из строя "), t блок («прочитано только "), t («прочитано/напишите ")),
«#description» => t («потребители с позволением administer comments будут отвергнуть это setting."),
);
$form [«комментарий»] [«comment_default_mode»] = блок (
» => ««#type передает по радио»,
«#title» => t («режим индикации невыполнения обязательства "),
variable_get => «#default_value» («comment_default_mode_». >type $form [«#node_type»] -, COMMENT_MODE_THREADED_EXPANDED),
_comment_get_modes => «#options» (),
«#description» => t («взгляд невыполнения обязательства для комментариев. Перспективные виды показывают тело комментария. Продетые нитку взгляды держат ответы together."),
);
$form [«комментарий»] [«comment_default_order»] = блок (
» => ««#type передает по радио»,
«#title» => t («заказ индикации невыполнения обязательства "),
variable_get => «#default_value» («comment_default_order_». >type $form [«#node_type»] -, COMMENT_ORDER_NEWEST_FIRST),
_comment_get_orders => «#options» (),
«#description» => t («невыполнение обязательства сортируя для новых потребителей и подметных потребителей пока осматривающ комментирует. Эти потребители могут изменить их взгляд using пульт управления комментария. Для зарегистрированных потребителей, это изменение вспомнено как упорнейший потребитель preference."),
);
$form [«комментарий»] [«comment_default_per_page»] = блок (
» => ««#type выбирает»,
«#title» => t («невыполнение обязательства комментирует в страницу "),
variable_get => «#default_value» («comment_default_per_page_». >type $form [«#node_type»] -, 50),
_comment_per_page => «#options» (),
«#description» => t («номер невыполнения обязательства комментариев для каждой страницы: больше комментариев распределены в нескольк pages."),
);
$form [«комментарий»] [«comment_controls»] = блок (
» => ««#type передает по радио»,
«#title» => t («управления комментария "),
variable_get => «#default_value» («comment_controls_». >type $form [«#node_type»] -, COMMENT_CONTROLS_HIDDEN),
блок => «#options» (
t («индикация над комментариями "),
t («индикация под комментариями "),
t («индикация над и под комментарии "),
t («не делает индикация ")),
«#description» => t («положение коробки управлениями комментария. Управления комментария препятствовали потребителю изменить режим индикации невыполнения обязательства и показать заказ comments."),
);
$form [«комментарий»] [«comment_anonymous»] = блок (
» => ««#type передает по радио»,
«#title» => t («подметный комментарий "),
variable_get => «#default_value» («comment_anonymous_». >type $form [«#node_type»] -, COMMENT_ANONYMOUS_MAYNOT_CONTACT),
блок => «#options» (
=> t COMMENT_ANONYMOUS_MAYNOT_CONTACT («подметные плакаты не могут вписать их данные по контакта "),
=> t COMMENT_ANONYMOUS_MAY_CONTACT («подметные плакаты могут выйти их данные по контакта "),
=> t COMMENT_ANONYMOUS_MUST_CONTACT («подметные плакаты должны выйти их данные по контакта ")),
«#description» => t («этот вариант позволен когда подметные потребители имеют позволение вывесить комментарии на >permissions page " @url " href= («admin/потребитель/позволения», блок (» => ««части модул-комментирует ")))),
);
если (! user_access («столб комментирует», drupal_anonymous_user ())) {
«#disabled» $form [«комментарий»] [«comment_anonymous»] [] = TRUE;
}
$form [«комментарий»] [«comment_subject_field»] = блок (
» => ««#type передает по радио»,
«#title» => t («поле комментария подчиненный "),
variable_get => «#default_value» («comment_subject_field_». >type $form [«#node_type»] -, 1),
=> «#options» (t блок («вывел из строя "), t («позволено ")),
«#description» => t («могут потребители обеспечить уникально вопрос для их комментариев? "),
);
$form [«комментарий»] [«comment_preview»] = блок (
» => ««#type передает по радио»,
«#title» => t («комментарий предваротельного просмотра "),
variable_get => «#default_value» («comment_preview_». >type $form [«#node_type»] -, COMMENT_PREVIEW_REQUIRED),
=> «#options» (t блок («опционно "), t («потребовал ")),
=> t «#description» («усилия потребитель для того чтобы посмотреть их комментарий путем щелкать на «предваротельном просмотре» кнопке прежде чем они смогут фактическ добавить комментарий»),
);
$form [«комментарий»] [«comment_form_location»] = блок (
» => ««#type передает по радио»,
«#title» => t («положение формы представления комментария "),
variable_get => «#default_value» («comment_form_location_». >type $form [«#node_type»] -, COMMENT_FORM_SEPARATE_PAGE),
=> «#options» (t блок («индикация на отдельно странице "), t («индикация под столбом или комментариями ")),
);
}
isset && elseif (isset ($form [«типа»]) ($form [«#node»])) {
если ($form, то [«тип»] [«#value»]. == $form_id «_node_form») {
$node = $form [«#node»];
$form [«comment_settings»] = блок (
=> «fieldset» «#type»,
«#access» user_access => («управьте комментариями "),
«#title» => t («установки комментария "),
«#collapsible» => ПОИСТИНЕ,
«#collapsed» => ПОИСТИНЕ,
=> 30 «#weight»,
);
$form [«comment_settings»] [«комментарий»] = блок (
» => ««#type передает по радио»,
«#parents» блок => («комментарий "),
=> $node->comment «#default_value»,
=> «#options» (t («вывел из строя "), t блок («прочитано только "), t («прочитано/напишите ")),
);
}
}
}
/**
* Вставка hook_nodeapi ().
*
comment_nodeapi функции (&$node, $op, $arg = 0) {
переключите ($op) {
покрывайте «нагрузку»:
возвратите db_fetch_array (db_query («ОТБОРНОЕ last_comment_timestamp, last_comment_name, comment_count ОТ {node_comment_statistics} ГДЕ nid = %d», $node->nid));
пролом;
случай «подготовляет»:
если (! isset ($node->comment)) {
$node->comment = variable_get («comment_$node->type», COMMENT_NODE_READ_WRITE);
}
пролом;
случай «вставка»:
db_query («ВСТАВКА В {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) ОЦЕНИВАЕТ (%d, %d, NULL, %d, 0)», $node->nid, $node->changed, $node->uid);
пролом;
случай «delete»:
db_query («DELETE ОТ {комментарии} ГДЕ nid = %d», $node->nid);
db_query («DELETE ОТ {node_comment_statistics} ГДЕ nid = %d», $node->nid);
пролом;
случай «индекс уточнения»:
$text = '';
$comments = db_query («ОТБОРНЫЙ вопрос, комментарий, форма ОТ {комментарии} ГДЕ nid = %d И состояние = %d», $node->nid, COMMENT_PUBLISHED);
пока ($comment = db_fetch_object ($comments)) {
$text. = «». check_plain ($comment->subject). «». check_markup ($comment->comment, $comment->format, ЛОЖНЫЕ);
}
возвращенное $text;
случай «результат поиска»:
$comments = db_result (db_query («ОТБОРНОЕ comment_count ОТ {node_comment_statistics} ГДЕ nid = %d», $node->nid));
возвращенное format_plural ($comments, «1 комментарий», «комментарии @count ");
случай «деталь rss»:
если ($node->comment! = COMMENT_NODE_DISABLED) {
возвращенный блок (блок (url => «значения»» => ««ключа комментирует», («узел». $node->nid, блок (» => ««части комментирует», «совершенно» => ПОИСТИНЕ))));
}
еще {
возвращенный блок ();
}
}
}
/**
* Вставка hook_user ().
*
comment_user функции ($type, $edit, &$user, $category = NULL) {
если (delete == $type «") {, то
db_query («УТОЧНЕНИЕ {комментарии} УСТАНОВИЛО uid = 0 КУДА uid = %d», $user->uid);
db_query («УТОЧНЕНИЕ {node_comment_statistics} УСТАНОВИЛО last_comment_uid = 0 КУДА last_comment_uid = %d», $user->uid);
}
}
/**
* Это будет *not* вставка hook_access (). Эта функция вызвана
* обусловить имеет ли в настоящее время потребитель доступ к определенному комментарию.
*
* Authenticated потребители могут редактировать их комментарии как длиной они бедный человек, котор будут
* отвечено к. Это предотвращает людей от изменять или корректировать их
* заявления основанные на ответах к их столбам.
*
* @param $op
* Деятельность должна быть выполненным на комментарии. Только «редактируйте» теперь.
* @param $comment
* Предмет комментария.
* @return
* TRUE если в настоящее время потребитель имеет acces к комментарию, то, ЛОЖНОМУ в противном случае.
*
comment_access функции ($op, $comment) {
глобальное $user;
если (== $op «редактирует ") {, то
возвратите (== 0 comment_num_replies && == $comment->uid && $user->uid $user->uid ($comment->cid)) || user_access («управьте комментариями ");
}
}
/**
* Просто функция хелпера.
*
* @return
* 0th и 1-ые компоненты курса соединили слешем.
*
comment_node_url функции () {
возвращенное arg (0). «/». arg (1);
}
/**
* Признавает представление нового или измененного содержания комментария.
*
* @param $edit
* Блок комментария.
*
* @return
* Если комментарий успешно сохранен, то удостоверение личности комментария возвращено. Если комментарий
* не сохраняет, ЛОЖНО возвращает.
*
comment_save функции ($edit) {
глобальное $user;
если (&&, то user_access («комментариев столба ") (user_access («управьте комментариями ") || == COMMENT_NODE_READ_WRITE node_comment_mode ($edit [«nid»]))) {
если (! form_get_errors ()) {
блок $edit += (
«почта» => '',
«домашняя страница» => '',
«имя» => '',
«состояние» user_access => («столб комментирует без утверждения ")? COMMENT_PUBLISHED: COMMENT_NOT_PUBLISHED,
);
если ($edit [«cid»]) {, то
Уточнение // комментарий в базе данных.
db_query («УТОЧНЕНИЕ {комментарии} УСТАНОВИЛО состояние = %d, фиксацию времени = %d, вопрос = «%s», комментарий = «%s», форма = %d, uid = %d, имя = «%s», почта = «%s», домашняя страница = «%s» ГДЕ cid = %d», $edit [«состояние»], $edit [«фиксация времени»], $edit [«вопрос»], $edit [«комментарий»], $edit [«форма»], $edit [«uid»], $edit [«имя»], $edit [«почта»], $edit [«домашняя страница»], $edit [«cid»]);
// позволяет модули ответить к уточнению комментария.
comment_invoke_comment ($edit, «уточнение ");
// добавляет вход к журналу барбоса.
барбос («содержание», «комментарий: обновленное %subject. $edit [«nid»], блок (=> «комментарий» «части». $edit [«cid»])));
}
еще {
// добавляет комментарий к базе данных.
// здесь мы строим поле резьбы. См. документацию для
comment_render // ().
если (== 0 $edit [«pid»]) {, то
// это будет комментарием без комментария родителя (глубины 0): мы начинаем
// путем восстановлять максимальный уровень резьбы.
$max = db_result (db_query («ОТБОРНОЕ МАКС (резьба) ОТ {комментарии} ГДЕ nid = %d», $edit [«nid»]));
Прокладка // «/» от конца резьбы.
$max = rtrim ($max, «/");
// окончательно, строит поле резьбы для этого нового комментария.
$thread = int2vancode (vancode2int ($max) + 1). «/»;
}
еще {
// это будет комментарием с комментарием родителя: мы увеличиваем
// часть значения резьбы на правильной глубине.
// получает комментарий родителя:
$parent = _comment_load ($edit [«pid»]);
Прокладка // «/» от конца резьбы родителя.
$parent->thread = rtrim (шнура) ((шнур) $parent->thread, «/");
// получает максимальное значение в резьбе _this_.
$max = db_result (db_query («ОТБОРНОЕ МАКС (резьба) ОТ {комментарии} ГДЕ резьба ЛЮБИТ «%s.%%» И nid = %d», $parent->thread, $edit [«nid»]));
если (== $max '') {, то
Ребенок // первый этого родителя.
$thread = $parent->thread. «.». int2vancode (0). «/»;
}
еще {
Прокладка // «/» в конце резьбы.
$max = rtrim ($max, «/");
//, котор нам нужно получить значение на правильно глубине.
$parts = взрывают («. », $max);
$parent_depth = отсчет (взорвите («. », $parent->thread));
$last = $parts [$parent_depth];
// окончательно, строит поле резьбы для этого нового комментария.
$thread = $parent->thread. «.». int2vancode (vancode2int ($last) + 1). «/»;
}
}
если (опорожните, то ($edit [«фиксация времени»])) {
$edit [«фиксация времени»] = время ();
}
если (=== $user->uid), то {// «===» $edit [«uid»] потому что мы хотим доработать подметных потребителей слишком
$edit [«имя»] = $user->name;
}
db_query («ВСТАВКА В {комментарии} (nid, pid, uid, вопрос, комментарий, форма, именя ведущего, фиксация времени, состояние, резьба, имя, почта, домашняя страница) ОЦЕНИВАЕТ (%d, %d, %d, «%s», «%s», %d, «%s», %d, %d, «%s», «%s», «%s», «%s ")», $edit [«nid»], $edit [«pid»], $edit [«uid»], $edit [«вопрос»], $edit [«комментарий»], $edit [«форма»], ip_address (), $edit [«фиксация времени»], $edit [«состояние»], $thread, $edit [«имя»], $edit [«почта»], $edit [«домашняя страница»]);
$edit [«cid»] = db_last_insert_id («комментарии», «cid ");
// говорит другие модули новый, котор комментарий был представлен.
comment_invoke_comment ($edit, «вставка ");
// добавляет вход к журналу барбоса.
барбос («содержание», «комментарий: добавленное %subject. $edit [«nid»], блок (=> «комментарий» «части». $edit [«cid»])));
}
_comment_update_node_statistics ($edit [«nid»]);
Ясность // тайник поэтому подметный потребитель может увидеть его будучи добавлянной комментарий.
cache_clear_all ();
// объясняет косу утверждения если обязательно, и после этого
// перенаправляет потребителя к узлу, котор он комментирует дальше.
если (== COMMENT_NOT_PUBLISHED $edit [«состояния»]) {, то
drupal_set_message (t («ваш комментарий был queued для умеренности администраторами места и будет выходил в свет после approval."));
}
еще {
comment_invoke_comment ($edit, «опубликовывают ");
}
возвращенное $edit [«cid»];
}
еще {
возвращенное ЛОЖНОЕ;
}
}
еще {
барбос («содержание», «комментарий: несанкционированный комментарий представил или комментарий представленный к закрытому столбу %subject. », блок («%subject» => $edit [«вопрос»]), WATCHDOG_WARNING);
drupal_set_message (t («комментарий: несанкционированный комментарий представил или комментарий представленный к закрытому столбу %subject. », блок («%subject» => $edit [«вопрос»])), «ошибка ");
возвращенное ЛОЖНОЕ;
}
}
/**
* Соединения командование строения для комментария (например \ редактируйте, отвечайте, delete) по отношению к в настоящее время позволениям доступа пользователя.
*
* @param $comment
* Комментарий к соединения будут родственн.
* @param $return
* Использовано.
* @return
* Ассоциативный блок содержа соединения.
*
comment_links функции ($comment, $return = 1) {
глобальное $user;
$links = блок ();
// если мы осматриваем как раз этот комментарий, то, мы соединяем назад к узлу.
если ($return) {, то
$links [«comment_parent»] = блок (
«название» => t («родитель "),
comment_node_url => «href» (),
=> «comment-$comment->cid» «части»
);
}
если (== COMMENT_NODE_READ_WRITE node_comment_mode ($comment->nid)) {, то
если (user_access && user_access («управьте комментариями ") («комментарии столба ")) {, то
$links [«comment_delete»] = блок (
«название» => t («delete "),
=> «комментарий «href»/delete/$comment->cid»
);
$links [«comment_edit»] = блок (
«название» => t («редактируйте "),
=> «комментарий «href»/edit/$comment->cid»
);
$links [«comment_reply»] = блок (
«название» => t («ответ "),
=> «комментарий «href»/reply/$comment->nid/$comment->cid»
);
}
еще если (user_access («комментарии столба ")) {, то
если (comment_access, то («редактируйте», $comment)) {
$links [«comment_edit»] = блок (
«название» => t («редактируйте "),
=> «комментарий «href»/edit/$comment->cid»
);
}
$links [«comment_reply»] = блок (
«название» => t («ответ "),
=> «комментарий «href»/reply/$comment->nid/$comment->cid»
);
}
еще {
$node = node_load ($comment->nid);
$links [«comment_forbidden»] [«название»] = тема («comment_post_forbidden», $node);
}
}
возвратите $links;
}
/**
* Представляет комментарии.
*
* @param $node
* Узел комментарию нужно представить.
* @param $cid
* Представлен опционный, если, котор дал, только один комментарий.
*
* К продетой нитку индикации комментирует в правильно заказе, котор мы держим поле «резьбы»
* и заказ тем значением. Это поле держит эти данные внутри
* дорога легко для уточнения и удобно для использования.
*
* Старты значения «резьбы» на «1». Если мы добавляем ребенка (a) к этому комментарию, то
* мы задаем ему «резьбу» = «1.1». Ребенок (a) будет иметь «1.1.1». Затем
* брат (a) получит «1.2». Следующий брат родителя (a) получит
* «2» и так далее.
*
* Во первых всех примечание что поле резьбы хранит глубина комментария:
* глубиной 0 будет «x», глубиной 1 «X.X», глубиной 2 «X.X.X», etc.
*
* Теперь получить приказывая право, рассматривайте этот пример:
*
* 1
* 1.1
* 1.1.1
* 1.2
* 2
*
* Если мы «ПРИКАЗЫВАЕМ резьбой ASC», то мы получаем вышеуказанный результат, и это
* естественный заказ сортированный к время. Однако, если мы «ПРИКАЗЫВАЕМ резьбой DESC», то
* мы получаем:
*
* 2
* 1.2
* 1.1.1
* 1.1
* 1
*
* Ясно, это не будет естественная дорога увидеть резьбу, и потребители получат
* запутанно. Естественный заказ для того чтобы показать резьбу desc времени был бы:
*
* 2
* 1
* 1.2
* 1.1
* 1.1.1
*
* мы уже сделали перед стандартной заплатой pager. Достигнуть
* это мы просто добавляем «/» в конце каждого значения «резьбы». Эта дорога вне
* поля резьбы посмотрят как после того как они показаны ниже:
*
* 1
* 1.1/
* 1.1.1/
* 1.2/
* 2
*
* мы добавляем «/» в виду того что этот чарс находится, в ASCII, более высоко чем каждый номер, так если
* теперь мы «ПРИКАЗЫВАЕМ резьбой DESC», котор мы получаем правильно заказ. Однако это о
* избалуйте обратныйа порядок, «ЗАКАЗ резьбой ASC» -- здесь, нам
* рассматривать отставая «/» так мы используем подстроку только.
*
comment_render функции ($node, $cid = 0) {
глобальное $user;
$output = '';
если (user_access («комментарии доступа ")) {, то
// предварительно обрабатывает перемеююые.
$nid = $node->nid;
если (опорожните, то ($nid)) {
$nid = 0;
}
$mode = _comment_get_display_setting («режим», $node);
$order = _comment_get_display_setting («вид», $node);
$comments_per_page = _comment_get_display_setting («comments_per_page», $node);
если (&& $cid is_numeric, то ($cid)) {
Взгляд комментария // одиночный.
$query = «ОТБОРНОЕ c.cid, c.pid, c.nid, c.subject, c.com ment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name КАК registered_name, u.signature, u.picture, u.data, c.status ОТ {комментарии} c ВНУТРЕННЕГО СОЕДИНЯЮТ {потребители} u НА c.uid = u.uid ГДЕ c.cid = %d»;
$query_args = блок ($cid);
если (! user_access («управьте комментариями ")) {
$query. = «И c.status = %d»;
$query_args [] = COMMENT_PUBLISHED;
}
$query = db_rewrite_sql ($query, «c», «cid ");
$result = db_query ($query, $query_args);
если ($comment = db_fetch_object, то ($result)) {
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$links = module_invoke_all («соединение», «комментарий», $comment, 1);
drupal_alter («соединение», $links, $node);
$output. = тема («comment_view», $comment, $node, $links);
}
}
еще {
Взгляд комментария // множественный
$query_count = «ОТБОРНЫЙ ОТСЧЕТ (*) ОТ {комментарии} c ГДЕ c.nid = %d»;
$query = «ОТБОРНОЕ c.cid как cid, c.pid, c.nid, c.subject, c.com ment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name КАК registered_name, u.signature, u.picture, u.data, c.thread, c.status ОТ {комментарии} c ВНУТРЕННЕГО СОЕДИНЯЮТ {потребители} u НА c.uid = u.uid ГДЕ c.nid = %d»;
$query_args = блок ($nid);
если (! user_access («управьте комментариями ")) {
$query. = «И c.status = %d»;
$query_count. = «И c.status = %d»;
$query_args [] = COMMENT_PUBLISHED;
}
если (== COMMENT_ORDER_NEWEST_FIRST $order) {, то
если (== COMMENT_MODE_FLAT_COLLAPSED $mode || == COMMENT_MODE_FLAT_EXPANDED $mode) {
$query. = «ЗАКАЗ c.cid DESC»;
}
еще {
$query. = «ЗАКАЗ c.thread DESC»;
}
}
еще если (== COMMENT_ORDER_OLDEST_FIRST $order) {, то
если (== COMMENT_MODE_FLAT_COLLAPSED $mode || == COMMENT_MODE_FLAT_EXPANDED $mode) {
$query. = «ЗАКАЗ c.cid»;
}
еще {
// видит комментарий выше. Анализ показывает что это не стоит слишком
// очень. Он вычисляет по маштабу очень очень более лучше чем имеющ комментарий целого
структура //.
$query. = «ЗАКАЗ ПОДСТРОКОЙ (c.thread, 1, (ДЛИНА (c.thread) - 1))»;
}
}
$query = db_rewrite_sql ($query, «c», «cid ");
$query_count = db_rewrite_sql ($query_count, «c», «cid ");
Старт // форма, для пользы с управлением комментария.
$result = pager_query ($query, $comments_per_page, 0, $query_count, $query_args);
$divs = 0;
$num_rows = ЛОЖНО;
$comments = '';
drupal_add_css (drupal_get_path («модуль», «комментарий "). «/comment.css ");
пока ($comment = db_fetch_object ($result)) {
$comment = drupal_unpack ($comment);
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$comment->depth = отсчет (взорвите («. », $comment->thread)) - 1;
если (== COMMENT_MODE_THREADED_COLLAPSED $mode || == COMMENT_MODE_THREADED_EXPANDED $mode) {
если ($comment->depth > $divs) {, то
$divs++;
$comments. = «" выделенное " class= »;
}
еще {
пока ($comment->depth < $divs) {
$divs--;
$comments. = « »;
}
}
}
если (== COMMENT_MODE_FLAT_COLLAPSED $mode) {, то
$comments. = тема («comment_flat_collapsed», $comment, $node);
}
еще если (== COMMENT_MODE_FLAT_EXPANDED $mode) {, то
$comments. = тема («comment_flat_expanded», $comment, $node);
}
еще если (== COMMENT_MODE_THREADED_COLLAPSED $mode) {, то
$comments. = тема («comment_thread_collapsed», $comment, $node);
}
еще если (== COMMENT_MODE_THREADED_EXPANDED $mode) {, то
$comments. = тема («comment_thread_expanded», $comment, $node);
}
$num_rows = TRUE;
}
пока ($divs-- > 0) {
$comments. = «»;
}
$comment_controls = variable_get («comment_controls_». $node->type, COMMENT_CONTROLS_HIDDEN);
если (&&, то $num_rows (== COMMENT_CONTROLS_ABOVE $comment_controls || == COMMENT_CONTROLS_ABOVE_BELOW $comment_controls)) {
$output. = drupal_get_form («comment_controls», $mode, $order, $comments_per_page);
}
$output. = $comments;
$output. = тема («pager», NULL, $comments_per_page, 0);
если (&&, то $num_rows (== COMMENT_CONTROLS_BELOW $comment_controls || == COMMENT_CONTROLS_ABOVE_BELOW $comment_controls)) {
$output. = drupal_get_form («comment_controls», $mode, $order, $comments_per_page);
}
}
// если позволено, показывает новую форму, то комментария если она уже не показывается.
$reply = arg && «комментария» == arg (0) (1) == «ответ»;
если (&&, то == COMMENT_NODE_READ_WRITE node_comment_mode && user_access («комментариев столба ") ($nid) (variable_get («comment_form_location_». $NODE->TYPE, == COMMENT_FORM_BELOW COMMENT_FORM_SEPARATE_PAGE) &&)! $reply) {
$output. = comment_form_box (блок («nid» => $nid), t («комментарий столба новый "));
}
$output = тема («comment_wrapper», $output, $node);
}
возвращенное $output;
}
/**
* Деятельности комментария. Мы предлагаем по-разному деятельности уточнения в зависимости от
* комментируют страница администрации, котор мы дальше.
*
* @param $action
* Страница администрации комментария.
* @return
* Ассоциативный блок содержа предложенные деятельности.
*
comment_operations функции ($action = NULL) {
если (== $action «опубликовывает ") {, то
$operations = блок (
«опубликуйте» блок => (t («опубликуйте выбранные комментарии "), «УТОЧНЕНИЕ {комментарии} УСТАНОВИЛ состояние =». COMMENT_PUBLISHED. «ГДЕ cid = %d "),
«уничтожьте» блок => (t («уничтожьте выбранные комментарии "), '')
);
}
еще если (unpublish == $action «") {, то
$operations = блок (
блок => «unpublish» (t («Unpublish выбранные комментарии "), «УТОЧНЕНИЕ {комментарии} УСТАНОВИЛ состояние =». COMMENT_NOT_PUBLISHED. «ГДЕ cid = %d "),
«delete» блок => (t («уничтожьте выбранные комментарии "), '')
);
}
еще {
$operations = блок (
«опубликуйте» блок => (t («опубликуйте выбранные комментарии "), «УТОЧНЕНИЕ {комментарии} УСТАНОВИЛ состояние =». COMMENT_PUBLISHED. «ГДЕ cid = %d "),
блок => «unpublish» (t («Unpublish выбранные комментарии "), «УТОЧНЕНИЕ {комментарии} УСТАНОВИЛ состояние =». COMMENT_NOT_PUBLISHED. «ГДЕ cid = %d "),
«delete» блок => (t («уничтожьте выбранные комментарии "), '')
);
}
возвращенное $operations;
}
/**
* Разносторонные функции: хелперы, privates, история
*
/**
* Нагрузите весь комментарий cid.
*
* @param $cid
* Определяя удостоверение личности комментария
* @return
* Предмет комментария.
*
_comment_load функции ($cid) {
возвращенное db_fetch_object (db_query («ОТБОРНО * ОТ {комментарии} ГДЕ cid = %d», $cid));
}
/**
* Получите отсчет комментария для узла.
*
* @param $nid
* Удостоверение личности узла
* @return
* Отсчет комментария.
*
comment_num_all функции ($nid) {
статическое $cache;
если (! isset ($cache [$nid])) {
$cache [$nid] = db_result (db_query («ОТБОРНОЕ comment_count ОТ {node_comment_statistics} ГДЕ nid = %d», $nid));
}
возвращенное $cache [$nid];
}
/**
* Получите отсчет ответов для комментария.
*
* @param $pid
* Удостоверение личности комментария
* @return
* Отсчет ответов.
*
comment_num_replies функции ($pid) {
статическое $cache;
если (! isset ($cache [$pid])) {
$cache [$pid] = db_result (db_query («ОТБОРНЫЙ ОТСЧЕТ (cid) ОТ {комментарии} ГДЕ pid = %d И состояние = %d», $pid, COMMENT_PUBLISHED));
}
возвращенное $cache [$pid];
}
/**
* Получите количество новых комментариев для в настоящее время потребителя и определенного узла.
*
* @param $nid
* узл-удостоверение личности для того чтобы подсчитать комментарии для
* @param $timestamp
* время подсчитать от (невыполнения обязательства к времени последнего доступа пользователя
* к узлу)
*
comment_num_new функции ($nid, $timestamp = 0) {
глобальное $user;
если ($user->uid) {, то
// восстановляет фиксацию времени на в настоящее время потребитель на последнем месте осмотрел
// определило узел.
если (! $timestamp) {
$timestamp = node_last_viewed ($nid);
}
$timestamp = ($timestamp > NODE_NEW_LIMIT? $timestamp: NODE_NEW_LIMIT);
Польза // фиксация времени восстановить число новых комментариев.
$result = db_result (db_query («ОТБОРНЫЙ ОТСЧЕТ (c.cid) ОТ {узел} n ВНУТРЕННЕГО СОЕДИНЯЕТ {комментарии} c НА n.nid = c.nid ГДЕ n.nid = %d И фиксация времени > %d И c.status = %d», $nid, $timestamp, COMMENT_PUBLISHED));
возвращенное $result;
}
еще {
возвращение 0;
}
}
/**
* Утвердите данные по комментария.
*
* @param $edit
* Ассоциативное containig блока данные по комментария.
* @return
* Первоначально $edit.
*
comment_validate функции ($edit) {
глобальное $user;
// призывает другие укротители утверждения
comment_invoke_comment ($edit, «утверждают ");
если (isset, то ($edit [«дата»])) {
// от PHP 5.1.0, strtotime возвращает ЛОЖНОЕ на отказе вместо -1.
если (strtotime ($edit [«дата»]) <= 0) {, то
form_set_error («дата», t («вы должны определить действительное date."));
}
}
если (isset ($edit [«автор»]) &&! $account = user_load (блок (=> $edit «имени» [«автор»]))) {
form_set_error («автор», t («вы должны определить действительное author."));
}
Ценностьь проверки // имени, почты и домашняя страница (если дали), то
если (! $user->uid || isset ($edit [«is_anonymous»])) {
$node = node_load ($edit [«nid»]);
если (variable_get, то («comment_anonymous_». $NODE->TYPE, COMMENT_ANONYMOUS_MAYNOT_CONTACT) > COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
если ($edit [«имя»]) {, то
$taken = db_result (db_query («ВЫБЕРИТЕ ОТСЧЕТ (uid) ОТ {потребители} ГДЕ НИЗКО (имя) = «%s»», $edit [«имя»]));
если ($taken! = 0) {
form_set_error («имя», t («имя, котор вы использовали принадлежит до зарегистрированное user."));
}
}
еще если (variable_get, то («comment_anonymous_». $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
form_set_error («имя», t («вы должны выйти ваше name."));
}
если ($edit [«почта»]) {, то
если (! valid_email_address ($edit [«почта»])) {
form_set_error («почта», t («адрес электронная почта, котор вы определили invalid."));
}
}
еще если (variable_get, то («comment_anonymous_». $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
form_set_error («почта», t («вы должны выйти электронная почта address."));
}
если ($edit [«домашняя страница»]) {, то
если (! valid_url ($edit [«домашняя страница»], TRUE)) {
form_set_error («домашняя страница», t («URL вашего домашняя страница инвалидн. Вспомните что оно должен быть полно - квалифицировано, т.е. формы http://example.com/directory ."));
}
}
}
}
возвратите $edit;
}
/**
* Произведите основную форму комментария, потому что прилагать к узлу или индикации на отдельно странице.
*
* @param $title
* Использовано.
* формы @ingroup
* comment_form_validate @see ()
* comment_form_submit @see ()
*
comment_form функции (&$form_state, $edit, $title = NULL) {
глобальное $user;
$op = isset ($_POST [«op»])? $_POST [«op»]: '';
$node = node_load ($edit [«nid»]);
если (! variable_get && $user->uid («comment_anonymous_». $node->type, COMMENT_ANONYMOUS_MAYNOT_CONTACT)! = COMMENT_ANONYMOUS_MAYNOT_CONTACT) {
drupal_add_js (drupal_get_path («модуль», «комментарий "). «/comment.js ");
}
блок $edit += («почты» «имени => '', «домашняя страница» => ''» => '',);
если ($user->uid) {, то
если (! пустые ($edit [«cid»]) user_access && («управьте комментариями ")) {
если (! опорожните ($edit [«автор»])) {
$author = $edit [«автор»];
}
elseif (! опорожните ($edit [«имя»])) {
$author = $edit [«имя»];
}
еще {
$author = $edit [«registered_name»];
}
если (! опорожните ($edit [«состояние»])) {
$status = $edit [«состояние»];
}
еще {
$status = 0;
}
если (! опорожните ($edit [«дата»])) {
$date = $edit [«дата»];
}
еще {
$date = format_date ($edit [«фиксация времени»], «таможня», «Y-m-d h: iий o ");
}
$form [«admin»] = блок (
=> «fieldset» «#type»,
«#title» => t («администрация "),
«#collapsible» => ПОИСТИНЕ,
«#collapsed» => ПОИСТИНЕ,
=> -2 «#weight»,
);
если ($edit, то [«registered_name»]! = '') {
// комментарий зарегистрированным потребителем
$form [«admin»] [«автор»] = блок (
=> «textfield» «#type»,
«#title» => t («после того как я Authored мимо "),
«#size» => 30,
=> 60 «#maxlength»,
=> «потребитель/autocomplete» «#autocomplete_path»,
=> $author «#default_value»,
=> -1 «#weight»,
);
}
еще {
// комментарий подметным потребителем
$form [«is_anonymous»] = блок (
=> «значение» «#type»,
=> «#value» ПОИСТИНЕ,
);
$form [«admin»] [«имя»] = блок (
=> «textfield» «#type»,
«#title» => t («после того как я Authored мимо "),
«#size» => 30,
=> 60 «#maxlength»,
=> $author «#default_value»,
=> -1 «#weight»,
);
$form [«admin»] [«почта»] = блок (
=> «textfield» «#type»,
«#title» => t («электронная почта "),
=> 64 «#maxlength»,
«#size» => 30,
=> $edit «#default_value» [«почта»],
«#description» => t («содержанию этого поля сдержано приватной и не покажут publicly."),
);
$form [«admin»] [«домашняя страница»] = блок (
=> «textfield» «#type»,
«#title» => t («домашняя страница "),
=> 255 «#maxlength»,
«#size» => 30,
=> $edit «#default_value» [«домашняя страница»],
);
}
}
еще {
$form [=> t «#title»» => ««#type «_author»] = блок (деталь», («ваше имя "), тема => «#value» («username», $user)
);
$form [«автор»] = блок (#value»» => «#type «=> $user->name «значения»,);
}
}
еще если (variable_get, то («comment_anonymous_». $NODE->TYPE, == COMMENT_ANONYMOUS_MAY_CONTACT COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
$form [=> t «#title»» => ««#type «имени»] = блок (textfield», («ваше имя "), => 60 «#maxlength», «#size» => 30, => $edit «#default_value» [«имя»]? $edit [«имя»]: variable_get («подметно», t («подметно "))
);
$form [«почта»] = блок (textfield»» => «#type «, «#title» => t («электронная почта "), «#maxlength» => 64, «#size» => 30, «#default_value» => $edit [«почта»], «#description» => t («содержанию этого поля сдержано приватным и не покажут publicly.")
);
$form [«#title»» => ««#type «домашняя страница»] = блок (textfield», («домашняя страница "), => 255 «#maxlength», «#size» => $edit => t => 30, «#default_value» [«домашняя страница»]);
}
еще если (variable_get, то («comment_anonymous_». $NODE->TYPE, == COMMENT_ANONYMOUS_MUST_CONTACT COMMENT_ANONYMOUS_MAYNOT_CONTACT)) {
$form [=> t «#title»» => ««#type «имени»] = блок (textfield», («ваше имя "), => 60 «#maxlength», «#size» => 30, => $edit «#default_value» [«имя»]? $edit [«имя»]: variable_get («подметно», t («подметно ")), «#required» => ПОИСТИНЕ);
$form [«почта»] = блок (textfield»» => «#type «, «#title» => t («электронная почта "), «#maxlength» => 64, «#size» => 30, «#default_value» => $edit [«почта»], «#description» => t («содержанию этого поля сдержано приватным и не покажут publicly."), «#required» => ПОИСТИНЕ);
$form [«#title»» => ««#type «домашняя страница»] = блок (textfield», («домашняя страница "), => 255 «#maxlength», «#size» => $edit => t => 30, «#default_value» [«домашняя страница»]);
}
если (variable_get, то («comment_subject_field_». $node->type, 1) == 1) {
$form [=> t «#title»» => ««#type «вопроса»] = блок (textfield», («подчиненный "), => 64 «#maxlength», => «#default_value»! опорожните ($edit [«вопрос»])? $edit [«вопрос»]: '');
}
если (! пусто ($edit [«комментарий»])) {
$default = $edit [«комментарий»];
}
еще {
$default = '';
}
$form [«comment_filter»] [«комментарий»] = блок (
=> «textarea» «#type»,
«#title» => t («комментарий "),
=> 15 «#rows»,
=> $default «#default_value»,
«#required» => ПОИСТИНЕ,
);
если (! isset ($edit [«форма»])) {
$edit [«форма»] = FILTER_FORMAT_DEFAULT;
}
$form [«comment_filter»] [«форма»] = filter_form ($edit [«форма»]);
$form [«cid»] = блок (=> «#value»» => ««#type значение»! опорожните ($edit [«cid»])? $edit [«cid»]: NULL);
$form [«pid»] = блок (=> «#value»» => ««#type значение»! опорожните ($edit [«pid»])? $edit [«pid»]: NULL);
$form [«nid»] = блок (#value»» => «#type «=> $edit «значения», [«nid»]);
$form [«uid»] = блок (=> «#value»» => ««#type значение»! опорожните ($edit [«uid»])? $edit [«uid»]: NULL);
Выставка // только за исключением кнопки если предваротельный просмотр опционн или если мы находимся в режиме предваротельного просмотра.
// мы показываем спасительную кнопку в режиме предваротельного просмотра даже если будут ошибки формы так, что
элементы формы // опционные (например, captcha) могут быть обновленный в режиме предваротельного просмотра.
если (! && form_get_errors () ((variable_get («comment_preview_». $NODE->TYPE, == COMMENT_PREVIEW_OPTIONAL COMMENT_PREVIEW_REQUIRED)) || (== t $op («предваротельный просмотр ")) || (== t $op («за исключением ")))) {
$form [«представьте»] = блок (=> t («за исключением "), «#weight» «#value»» => ««#type представьте», => 19);
}
$form [=> t («предваротельный просмотр "), «#weight» «#value»» => ««#type «предваротельного просмотра»] = блок (кнопка», => 20);
$form [«#token»] = «комментарий». $edit [«nid»]. (isset ($edit [«pid»])? $edit [«pid»]: '');
если (== t $op («предваротельный просмотр ")) {, то
$form [«#after_build»] = блок («comment_form_add_preview ");
}
если (опорожните ($edit [«cid»]) && пустое, то ($edit [«pid»])) {
$form [«#action»] = url («комментарий/ответ». $edit [«nid»]);
}
возвращенное $form;
}
/**
* Тема коробка формы комментария.
*
* @param $edit
* Структура формы.
* @param $title
* Название формы.
*
comment_form_box функции ($edit, $title = NULL) {
возвращенная тема («коробка», $title, drupal_get_form («comment_form», $edit, $title));
}
/**
* Сформируйте строителя; Произведите и утвердите форму предваротельного просмотра комментария.
*
* формы @ingroup
*
comment_form_add_preview функции ($form, &$form_state) {
глобальное $user;
$edit = $form_state [«значения»];
drupal_set_title (t («комментарий предваротельного просмотра "));
$output = '';
$node = node_load ($edit [«nid»]);
// призывает полное утверждение для формы, для того чтобы защитить против перекрестного места
подлоги запроса // (CSRF) и значения установки произвольные для полей как
// форма входного сигнала. Предварительно просмотрите комментарий только когда утверждение формы не делает
// установило все ошибки.
drupal_validate_form ($form [«form_id»] [«#value»], $form, $form_state);
если (! form_get_errors ()) {
_comment_form_submit ($edit);
$comment = (предмет) $edit;
Attach // данные по потребителя и времени.
если (! опорожните ($edit [«автор»])) {
$account = user_load (блок (=> $edit «имени» [«автор»]));
}
elseif (&& $user->uid! isset ($edit [«is_anonymous»])) {
$account = $user;
}
если (! опорожните ($account)) {
$comment->uid = $account->uid;
$comment->name = check_plain ($account->name);
}
elseif (опорожните ($comment->name)) {
$comment->name = variable_get («подметно», t («подметно "));
}
$comment->timestamp =! опорожните ($edit [«фиксация времени»])? $edit [«фиксация времени»]: время ();
$output. = тема («comment_view», $comment, $node);
}
$form [«comment_preview»] = блок (
=> $output «#value»,
=> -100 «#weight»,
предваротельный просмотр " class= ««#prefix >»,
=> « » «#suffix»,
);
$output = '';
если ($edit [«pid»]) {, то
$comment = db_fetch_object (db_query («ОТБОРНЫЕ c.*, u.uid, u.name КАК registered_name, u.signature, u.picture, u.data ОТ {комментарии} c ВНУТРЕННЕГО СОЕДИНЯЮТ {потребители} u НА c.uid = u.uid ГДЕ c.cid = %d И c.status = %d», $edit [«pid»], COMMENT_PUBLISHED));
$comment = drupal_unpack ($comment);
$comment->name = $comment->uid? $comment->registered_name: $comment->name;
$output. = тема («comment_view», $comment, $node);
}
еще {
$suffix = опорожняют ($form [«#suffix»])? '': $form [«#suffix»];
$form [«#suffix»] = $suffix. node_view ($node);
$edit [«pid»] = 0;
}
$form [«comment_preview_below»] = блок (=> 100 => $output, «#weight» «#value»);
возвращенное $form;
}
/**
* Утвердите представления формы комментария.
*
comment_form_validate функции ($form, &$form_state) {
глобальное $user;
если (=== 0 $user->uid) {, то
foreach (блок («имя», «домашняя страница», «почта ") как $field) {
// установило печенье на 365 дней.
если (isset, то ($form_state [«значения»] [$field])) {
setcookie («comment_info_». $field, $form_state [«значения»] [$field], время () + 31536000, «/");
}
}
}
comment_validate ($form_state [«значения»]);
}
/**
* Подготовьте комментарий для представления.
*
* @param $comment_values
* Ассоциативный блок содержа данные по комментария.
*
_comment_form_submit функции (&$comment_values) {
блок $comment_values += («вопрос» => '');
если (! isset ($comment_values [«дата»])) {
$comment_values [«дата»] = «теперь»;
}
$comment_values [«фиксация времени»] = strtotime ($comment_values [«дата»]);
если (isset, то ($comment_values [«автор»])) {
$account = user_load (блок (=> $comment_values «имени» [«автор»]));
$comment_values [«uid»] = $account->uid;
$comment_values [«имя»] = $comment_values [«автор»];
}
// утверждает вопрос комментария. Если определено, извлеките
// одно от тела комментария.
если (уравновешивание ($comment_values [«вопрос»]) == '') {, то
// тело может находиться в любой форме, так мы:
Фильтр // 1) оно в HTML
Прокладка // 2) вне все бирки HTML
Реальности новообращенного // 3) назад к незашифрованныйу текст.
Примечание //: форма проверена check_markup ().
$comment_values [«вопрос»] = уравновешивание (truncate_utf8 (decode_entities (strip_tags (check_markup ($comment_values [«комментарий»], $comment_values [«форма»]))), 29, TRUE));
Случаи края // где тело комментария заселено только бирками HTML будут
// требует вопроса невыполнения обязательства.
если (== $comment_values [«вопроса»] '') {, то
$comment_values [«вопрос»] = t («(отсутствие вопроса) ");
}
}
}
/**
* Отростчатые представления формы комментария; подготовьте комментарий, сохраньте он, и установите цель redirection.
*
comment_form_submit функции ($form, &$form_state) {
_comment_form_submit ($form_state [«значения»]);
если ($cid = comment_save, то ($form_state [«значения»])) {
$node = node_load ($form_state [«значения»] [«nid»]);
$page = comment_new_page_count ($node->comment_count, 1, $node);
$form_state [«перенаправьте»] = блок («узел». $node->nid, $page, «comment-$cid»);
возвращение;
}
}
/**
* Тема одиночный блок комментария.
*
* @param $comment
* Предмет комментария.
* @param $node
* Узел комментария.
* @param $links
* Ассоциативный блок содержа соединения управления.
* @param $visible
* Переключатели между сложенным/раскрынным взглядом.
* @ingroup themeable
*
theme_comment_view функции ($comment, $node, $links = блок (), $visible = TRUE) {
статическо $first_new = TRUE;
$output = '';
$comment->new = node_mark ($comment->nid, $comment->timestamp);
если (&& $comment->new $first_new! = MARK_READ) {
// задает анкер только для первого нового комментария. Это избегает дубликата
атрибуты удостоверения личности // на странице.
$first_new = ЛОЖНО;
$output. = «id= \ n»;
}
$output. = «id= cid \ «> \ n»;
Переключатель // к после того как я сложен/раскрыл взгляд комментария
если ($visible) {, то
$comment->comment = check_markup ($comment->comment, $comment->format, ЛОЖНЫЕ);
Крюк API комментария //
comment_invoke_comment ($comment, «взгляд ");
$output. = тема («комментарий», $comment, $node, $links);
}
еще {
$output. = тема («comment_folded», $comment);
}
возвращенное $output;
}
/**
* Построьте форму управлением комментария.
*
* @param $mode
* Режим индикации комментария.
* @param $order
* Режим заказа комментария.
* @param $comments_per_page
* Комментирует в страницу.
* формы @ingroup
*
comment_controls функции ($mode = COMMENT_MODE_THREADED_EXPANDED, $order = COMMENT_ORDER_NEWEST_FIRST, $comments_per_page = 50) {
$form [«режим»] = блок (» => ««#type выбирает»,
=> $mode «#default_value»,
_comment_get_modes => «#options» (),
=> 1 «#weight»,
);
$form [«заказ»] = блок (
» => ««#type выбирает»,
=> $order «#default_value»,
_comment_get_orders => «#options» (),
=> 2 «#weight»,
);
foreach (_comment_per_page () как $i) {
$options [$i] = t («! комментарии в страницу», блок («! » => $i));
}
$form [«comments_per_page»] = блок (» => ««#type выбирает»,
=> $comments_per_page «#default_value»,
=> $options «#options»,
=> 3 «#weight»,
);
$form [«представьте»] = блок (» => ««#type представляет»,
«#value» => t («за исключением установок "),
=> 20 «#weight»,
);
возвращенное $form;
}
/**
* Коробка управлениями комментария темы где потребитель может изменить режим индикации невыполнения обязательства и показать заказ комментариев.
*
* @param $form
* Структура формы.
* @ingroup themeable
*
theme_comment_controls функции ($form) {
$output = «class= »;
$output. = drupal_render ($form);
$output. = « »;
$output. = «описание " class= ». t («выберите вашу preferred дорогу показать комментарии и щелкнуть «за исключением установок» для того чтобы активировать ваше changes."). « »;
возвращенная тема («коробка», t («варианты просмотра комментария "), $output);
}
/**
* Отростчатые представления формы comment_controls.
*
comment_controls_submit функции ($form, &$form_state) {
глобальное $user;
$mode = $form_state [«значения»] [«режим»];
$order = $form_state [«значения»] [«заказ»];
$comments_per_page = $form_state [«значения»] [«comments_per_page»];
если ($user->uid) {, то
$account = user_save ($user, блок (=> $mode «режима», => $order, «comments_per_page» «вида» => $comments_per_page));
// прекращает если ошибка произошла во время user_save, то ().
если (! $account) {
drupal_set_message (t («потребитель сбережения ошибки account."), «ошибка ");
возвращение;
}
$user = $account;
}
еще {
$_SESSION [«comment_mode»] = $mode;
$_SESSION [«comment_sort»] = $order;
$_SESSION [«comment_comments_per_page»] = $comments_per_page;
}
}
/**
* Отростчатые перемеююые для comment.tpl.php.
*
* @see comment.tpl.php
* theme_comment @see ()
*
template_preprocess_comment функции (&$variables) {
$comment = $variables [«комментарий»];
$node = $variables [«узел»];
$variables [«автор»] = тема («username», $comment);
$variables [«содержание»] = $comment->comment;
$variables [«дата»] = format_date ($comment->timestamp);
$variables [«соединения»] = isset ($variables [«соединения»])? тема («соединения», $variables [«соединения»]): '';
$variables [«ново»] = $comment->new? t («ново "): '';
$variables [«изображение»] = theme_get_setting («toggle_comment_user_picture ")? тема («user_picture», $comment): '';
$variables [«подпись»] = $comment->signature;
$variables [«представлено»] = тема («comment_submitted», $comment);
$variables [«название»] = l ($comment->subject, $_GET [«q»], блок (=> «comment-$comment->cid» «части»));
$variables [«template_files»] [] = «комментарий». $node->type;
// установило состояние к представлению шнура comment->status.
если (isset, то ($comment->preview)) {
$variables [«состояние»] = «комментировать-предварительно просматривают»;
}
еще {
$variables [«состояние»] = (== COMMENT_NOT_PUBLISHED $comment->status)? «комментировать-неопубликованно»: «комментировать-опубликовано»;
}
}
/**
* Отростчатые перемеююые для comment-folded.tpl.php.
*
* @see comment-folded.tpl.php
* @see theme_comment_folded ()
*
функция template_preprocess_comment_folded (&$variables) {
$comment = $variables [«комментарий»];
$variables [«автор»] = тема («username», $comment);
$variables [«дата»] = format_date ($comment->timestamp);
$variables [«ново»] = $comment->new? t («ново "): '';
$variables [«название»] = l ($comment->subject, comment_node_url (). «/». $comment->cid, блок (=> «comment-$comment->cid» «части»));
}
/**
* Взгляд комментария темы плоский обрушенный.
*
* @param $comment
* Комментарий, котор нужно быть опирающийся на определённую тему.
* @param $node
* Узел комментария.
* @ingroup themeable
*
функция theme_comment_flat_collapsed ($comment, $node) {
возвращенная тема («comment_view», $comment, $node, '', 0);
}
/**
* Перспективный вид комментария темы плоский.
*
* @param $comment
* Комментарий, котор нужно быть опирающийся на определённую тему.
* @param $node
* Узел комментария.
* @ingroup themeable
*
функция theme_comment_flat_expanded ($comment, $node) {
возвращенная тема («comment_view», $comment, $node, module_invoke_all («соединение», «комментарий», $comment, 0));
}
/**
* Резьба комментария темы обрушилась взгляд.
*
* @param $comment
* Комментарий, котор нужно быть опирающийся на определённую тему.
* @param $node
* Узел комментария.
* @ingroup themeable
*
функция theme_comment_thread_collapsed ($comment, $node) {
возвращенная тема («comment_view», $comment, $node, '', 0);
}
/**
* Перспективный вид резьбы комментария темы.
*
* @param $comment
* Комментарий, котор нужно быть опирающийся на определённую тему.
* @param $node
* Узел комментария.
* @ingroup themeable
*
функция theme_comment_thread_expanded ($comment, $node) {
возвращенная тема («comment_view», $comment, $node, module_invoke_all («соединение», «комментарий», $comment, 0));
}
/**
* Тема «вы не можете вывесить извещение о комментарии».
*
* @param $node
* Узел комментария.
* @ingroup themeable
*
функция theme_comment_post_forbidden ($node) {
глобальное $user;
статическое $authenticated_post_comments;
если (! $user->uid) {
если (! isset ($authenticated_post_comments)) {
// мы только вывели наружу любое соединение если мы уверенн, то, то потребители получаем позволение
// для того чтобы вывесить комментарии путем вносить в журнал дальше. Мы также местно прячем эту информацию в тайнике.
$authenticated_post_comments = array_key_exists (DRUPAL_AUTHENTICATED_RID, user_roles (ПОИСТИНЕ, «комментарии столба ") + user_roles (ПОИСТИНЕ, «столб комментирует без утверждения "));
}
если ($authenticated_post_comments) {, то
// мы не можем использовать drupal_get_destination () потому что эти соединения
// иногда появляется на /node и страницы перечисления таксономии.
если (variable_get, то («comment_form_location_». $NODE->TYPE, == COMMENT_FORM_SEPARATE_PAGE COMMENT_FORM_SEPARATE_PAGE)) {
$destination = «destination=». drupal_urlencode («комментарий/reply/$node->nid#comment-form»);
}
еще {
$destination = «destination=». drupal_urlencode («node/$node->nid#comment-form»);
}
если (variable_get, то («user_register», 1)) {
Потребители // могут зарегистрировать.
возвращенный t («url => «@login» " @register " href= Login или >register к столбу комментируют», блок ((«потребитель/имя пользователя», блок (=> $destination «вопроса»));
}
еще {
Admins // только могут добавить новых потребителей, никакого общественного зарегистрирования.
возвращенный t («url => «@login» " @login " href= Login к столбу комментирует», блок ((«потребитель/имя пользователя», блок (=> $destination «вопроса»))));
}
}
}
}
/**
* Отростчатые перемеююые для comment-wrapper.tpl.php.
*
* @see comment-wrapper.tpl.php
* theme_comment_wrapper @see ()
*
template_preprocess_comment_wrapper функции (&$variables) {
// обеспечивает контекстуальную информацию.
$variables [«display_mode»] = _comment_get_display_setting («режим», $variables [«узел»]);
$variables [«display_order»] = _comment_get_display_setting («вид», $variables [«узел»]);
$variables [«comment_controls_state»] = variable_get («comment_controls_». >type $variables [«узла»] -, COMMENT_CONTROLS_HIDDEN);
$variables [«template_files»] [] = «комментировать-завертчица». >type $variables [«узла»] -;
}
/**
* Темы «представленное…» извещение.
*
* @param $comment
* Комментарий.
* @ingroup themeable
*
функция theme_comment_submitted ($comment) {
возвращенный t («представлено мимо! username на @datetime. »,
блок (
«! тема => username» («username», $comment),
format_date => «@datetime» ($comment->timestamp)
));
}
/**
* Возвратите блок режимов просмотра для перечислений комментария.
*
* Мы не можем использовать блок глобальной перемеююого потому что система места
* не выступает с иничиативой пока когда модуль комментария нагружен.
*
_comment_get_modes функции () {
возвращенный блок (
=> t COMMENT_MODE_FLAT_COLLAPSED («плоский обрушенный список - "),
=> t COMMENT_MODE_FLAT_EXPANDED («плоский расширенный список - "),
=> t COMMENT_MODE_THREADED_COLLAPSED («продетый нитку обрушенный список - "),
=> t COMMENT_MODE_THREADED_EXPANDED («продетый нитку расширенный список - ")
);
}
/**
* Возвратите блок заказов просмотра для перечислений комментария.
*
* Мы не можем использовать блок глобальной перемеююого потому что система места
* не выступает с иничиативой пока когда модуль комментария нагружен.
*
_comment_get_orders функции () {
возвращенный блок (
=> t COMMENT_ORDER_NEWEST_FIRST («дата - самые новые первые "),
=> t COMMENT_ORDER_OLDEST_FIRST («дата - самое старое первое ")
);
}
/**
* Возвратите блок «комментарии в установок страницу» от потребитель
* смогите выбрать.
*
_comment_per_page функции () {
возвращенное drupal_map_assoc (блок (10, 30, 50, 70, 90, 150, 200, 250, 300));
}
/**
* Возвратите в настоящее время установку индикации комментария
*
* @param $setting
* может быть одно из этих: «режим», «вид», «comments_per_page»
* @param $node
* Узел комментария в вопросе.
*
функция _comment_get_display_setting ($setting, $node) {
глобальное $user;
если (isset, то ($_GET [$setting])) {
$value = $_GET [$setting];
}
еще {
// получает невыполнение обязательства места установки
переключите ($setting) {
покрывайте «режим»:
$default = variable_get («comment_default_mode_». $node->type, COMMENT_MODE_THREADED_EXPANDED);
пролом;
случай «вид»:
$default = variable_get («comment_default_order_». $node->type, COMMENT_ORDER_NEWEST_FIRST);
пролом;
случай «comments_per_page»:
$default = variable_get («comment_default_per_page_». $node->type, 50);
}
если (variable_get, то («comment_controls_». $NODE->TYPE, == COMMENT_CONTROLS_HIDDEN COMMENT_CONTROLS_HIDDEN)) {
// если управлениями комментария будут невыполнение обязательства места пользы инвалид
$value = $default;
}
еще {
// в противном случае польза установка потребителя если комплект
если (&& $user->$setting isset ($user->$setting)) {, то
$value = $user->$setting;
}
еще если (isset, то ($_SESSION [«comment_». && $_SESSION $setting]) [«comment_». $setting]) {
$value = $_SESSION [«comment_». $setting];
}
еще {
$value = $default;
}
}
}
возвращенное $value;
}
/**
* Уточняет статистик комментария для, котор дали узла. Это должно быть вызвано любые
* приурочьте комментарий будет добавлен, уничтожено, или обновлено.
*
* Следующий поля содержатся в таблице node_comment_statistics.
* - last_comment_timestamp: фиксация времени последнего комментария для этого узла или узел создают штемпель если никакие комментарии не существуют для узла.
* - last_comment_name: имя подметного плаката для последнего комментария
* - last_comment_uid: uid плаката для последнего комментария для этого узла или uid авторов узла если никакие комментарии не существуют для узла.
* - comment_count: общее количество утвержденного/опубликовало комментарии на этом узле.
*
_comment_update_node_statistics функции ($nid) {
$count = db_result (db_query («ОТБОРНЫЙ ОТСЧЕТ (cid) ОТ {комментарии} ГДЕ nid = %d И состояние = %d», $nid, COMMENT_PUBLISHED));
комментарии // существуют
если ($count > 0) {, то
$last_reply = db_fetch_object (db_query_range («ОТБОРНОЕ cid, имя, фиксация времени, uid ОТ {комментарии} ГДЕ nid = %d И состояние = ЗАКАЗ %d cid DESC», $nid, COMMENT_PUBLISHED, 0, 1));
db_query («УТОЧНЕНИЕ {node_comment_statistics} УСТАНОВИЛО comment_count = %d, last_comment_timestamp = %d, last_comment_name = «%s», last_comment_uid = %d КУДА nid = %d», $count, $last_reply->timestamp, $last_reply->uid? '': $last_reply->name, $last_reply->uid, $nid);
}
// отсутствие комментариев
еще {
$node = db_fetch_object (db_query («ОТБОРНОЕ uid, созданное ОТ {узел} ГДЕ nid = %d», $nid));
db_query («УТОЧНЕНИЕ {node_comment_statistics} УСТАНОВИЛО comment_count = 0, last_comment_timestamp = %d, last_comment_name = '', last_comment_uid = %d КУДА nid = %d», $node->created, $node->uid, $nid);
}
}
/**
* Призовите деятельность hook_comment () в всех модулях.
*
* @param &$comment
* Предмет комментария.
* @param $op
* Шнур содержа имя деятельности комментария.
* @return
* Возвращенное значение призванных крюков.
*
comment_invoke_comment функции (&$comment, $op) {
$return = блок ();
foreach (module_implements («комментарий ") как $name) {
$function = $name. «_comment»;
$result = $function ($comment, $op);
если (&& isset ($result) is_array, то ($result)) {
$return = array_merge ($return, $result);
}
еще если (isset, то ($result)) {
$return [] = $result;
}
}
возвращенное $return;
}
/**
* Произведите vancode.
*
* Состоит из ведущий характера показывая длину, последованную за числами n
* с численным значением в основании 36. Vancodes можно сортировать как шнуры
* без messing вверх численный заказ.
*
* Он идет:
* 00, 01, 02,…, 0y, 0z,
* 110, 111,…, 1zy, 1zz,
* 2100, 2101,…, 2zzy, 2zzz,
* 31000, 31001,…
*
функция int2vancode ($i = 0) {
$num = base_convert ((int) $i, 10, 36);
$length = strlen ($num);
возвращенное chr ($length + ord («0») - 1). $num;
}
/**
* Расшифруйте vancode назад к интежеру.
*
функция vancode2int ($c = «00») {
возвращенное base_convert (substr ($c, 1), 36, 10);
}
/**
* Вставка hook_hook_info ().
*
comment_hook_info функции () {
возвращенный блок (
блок => «комментария» (
блок => «комментария» (
«введите» блок => (
«бега когда» => t («после сохранять новый комментарий "),
),
блок => «уточнения» (
«бега когда» => t («после сохранять обновленный комментарий "),
),
блок => «delete» (
«бега когда» => t («после уничтожать комментарий ")
),
блок => «взгляда» (
«бега когда» => t («когда комментарий осмотрится authenticated потребителем ")
),
),
),
);
}
/**
* Вставка hook_action_info ().
*
comment_action_info функции () {
возвращенный блок (
блок => «comment_unpublish_action» (
«описание» => t («комментарий Unpublish "),
«напечатайте» => на машинке «комментарий»,
«конфигурируемый» => ЛОЖНОЕ,
«закрепляет» блок => (
«комментарий» блок => («вставка», «уточнение "),
)
),
блок => «comment_unpublish_by_keyword_action» (
«описание» => t («комментарий Unpublish содержа ключевые слова "),
«напечатайте» => на машинке «комментарий»,
«конфигурируемый» => ПОИСТИНЕ,
«закрепляет» блок => (
«комментарий» блок => («вставка», «уточнение "),
)
)
);
}
/**
* Действие Drupal к unpublish комментарий.
*
* @param $context
* Пользованный ключом блок. Содержать удостоверение личности комментария если $comment не о.
* @param $comment
* Опционный предмет комментария.
*
comment_unpublish_action функции ($comment, $context = блок ()) {
если (isset, то ($comment->cid)) {
$cid = $comment->cid;
$subject = $comment->subject;
}
еще {
$cid = $context [«cid»];
$subject = db_result (db_query («ОТБОРНЫЙ вопрос ОТ {комментарии} ГДЕ cid = %d», $cid));
}
db_query («УТОЧНЕНИЕ {комментарии} УСТАНОВИЛО состояние = %d КУДА cid = %d», COMMENT_NOT_PUBLISHED, $cid);
барбос («действие», «неопубликованный комментарий %subject. », блок (=> $subject «%subject»));
}
/**
* Сформируйте строителя; Подготовьте форму для blacklisted ключевых слов.
*
* формы @ingroup
*
comment_unpublish_by_keyword_action_form функции ($context) {
$form [«ключевые слова] = блок (
«#title» => t («ключевые слова "),
=> «textarea» «#type»,
«#description» => t («комментарий будет неопубликован если он содержит любые последовательности характера выше. Используйте запят-отделенный список последовательностей характера. Пример: смешно, bungee скача, «компания, Inc. ». Последовательностями характера будут случай-sensitive."),
isset => «#default_value» ($context [«ключевые слова])? drupal_implode_tags ($context [«ключевые слова]): '',
);
возвращенное $form;
}
/**
* Отростчатые представления формы comment_unpublish_by_keyword_action_form.
*
comment_unpublish_by_keyword_action_submit функции ($form, $form_state) {
возвращенный блок («drupal_explode_tags => ключевых слов ($form_state [«значения»] [«ключевые слова]));
}
/**
* Вставка конфигурируемый действия Drupal.
* Unpublish комментарий если он содержит некоторый шнур.
*
* @param $context
* Блок больше информации о смысле звонока это действие.
* Неиспользованно здесь в виду того что это действие в настоящее время только поддерживает ops вставки и уточнения
* крюк комментария, оба из которых обеспечивает вполне предмет $comment.
* @param $comment
* Предмет комментария.
*
comment_unpublish_by_keyword_action функции ($comment, $context) {
foreach ($context [«ключевые слова] как $keyword) {
если (strstr, то ($comment->comment, $keyword) || strstr ($comment->subject, $keyword)) {
db_query («УТОЧНЕНИЕ {комментарии} УСТАНОВИЛО состояние = %d КУДА cid = %d», COMMENT_NOT_PUBLISHED, $comment->cid);
барбос («действие», «неопубликованный комментарий %subject. », блок (=> $comment->subject «%subject»));
пролом;
}
}
}
|